@elementor/editor-canvas 0.4.0 → 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/.turbo/turbo-build.log +8 -8
- package/CHANGELOG.md +11 -0
- package/dist/index.js +15 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +15 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
- package/src/styles-renderer/__tests__/__mocks__/styles-schema.ts +67 -15
- package/src/styles-renderer/__tests__/index.test.ts +139 -31
- package/src/styles-renderer/transformers/background-color-overlay-transformer.ts +9 -0
- package/src/styles-renderer/transformers/background-transformer.ts +12 -0
- package/src/styles-renderer/transformers/index.ts +5 -3
- package/src/styles-renderer/transformers/background-overlay-transformer.ts +0 -9
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @elementor/editor-canvas@0.
|
|
2
|
+
> @elementor/editor-canvas@0.5.0 build
|
|
3
3
|
> tsup --config=../../tsup.build.ts
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: src/index.ts
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mESM[39m Build start
|
|
12
12
|
[34mCJS[39m Build start
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
13
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m15.56 KB[39m
|
|
14
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m32.17 KB[39m
|
|
15
|
+
[32mESM[39m ⚡️ Build success in 94ms
|
|
16
|
+
[32mCJS[39m [1mdist/index.js [22m[32m17.08 KB[39m
|
|
17
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m32.16 KB[39m
|
|
18
|
+
[32mCJS[39m ⚡️ Build success in 103ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 17517ms
|
|
21
21
|
[32mDTS[39m [1mdist/index.d.mts [22m[32m13.00 B[39m
|
|
22
22
|
[32mDTS[39m [1mdist/index.d.ts [22m[32m13.00 B[39m
|
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -152,11 +152,19 @@ function ElementsOverlays() {
|
|
|
152
152
|
var import_editor_responsive = require("@elementor/editor-responsive");
|
|
153
153
|
var import_editor_styles_repository = require("@elementor/editor-styles-repository");
|
|
154
154
|
|
|
155
|
-
// src/styles-renderer/transformers/background-overlay-transformer.ts
|
|
156
|
-
var
|
|
157
|
-
return `linear-gradient(${value
|
|
155
|
+
// src/styles-renderer/transformers/background-color-overlay-transformer.ts
|
|
156
|
+
var backgroundColorOverlayTransformer = (value) => {
|
|
157
|
+
return `linear-gradient(${value}, ${value})`;
|
|
158
158
|
};
|
|
159
|
-
var
|
|
159
|
+
var background_color_overlay_transformer_default = backgroundColorOverlayTransformer;
|
|
160
|
+
|
|
161
|
+
// src/styles-renderer/transformers/background-transformer.ts
|
|
162
|
+
var backgroundTransformer = (value) => {
|
|
163
|
+
const overlays = value["background-overlay"] ?? "";
|
|
164
|
+
const color = value.color ?? "";
|
|
165
|
+
return `${overlays} ${color}`.trim();
|
|
166
|
+
};
|
|
167
|
+
var background_transformer_default = backgroundTransformer;
|
|
160
168
|
|
|
161
169
|
// src/styles-renderer/transformers/create-combine-array-transformer.ts
|
|
162
170
|
var createCombineArrayTransformer = (delimiter) => {
|
|
@@ -261,13 +269,14 @@ var transformers_default = {
|
|
|
261
269
|
shadow: shadow_transformer_default,
|
|
262
270
|
stroke: stroke_transformer_default,
|
|
263
271
|
gap: gap_transformer_default,
|
|
272
|
+
background: background_transformer_default,
|
|
264
273
|
color: primitiveTransformer,
|
|
265
274
|
number: primitiveTransformer,
|
|
266
275
|
string: primitiveTransformer,
|
|
267
276
|
"linked-dimensions": linked_dimensions_transformer_default,
|
|
268
|
-
"background-overlay":
|
|
277
|
+
"background-color-overlay": background_color_overlay_transformer_default,
|
|
278
|
+
"background-overlay": create_combine_array_transformer_default(","),
|
|
269
279
|
"box-shadow": create_combine_array_transformer_default(","),
|
|
270
|
-
"background-image": create_combine_array_transformer_default(","),
|
|
271
280
|
"border-width": create_edge_sizes_transformer_default((edgeKey) => `border-${edgeKey}-width`),
|
|
272
281
|
"border-radius": create_corner_sizes_transformer_default((cornerKey) => `border-${cornerKey}-radius`)
|
|
273
282
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/init.tsx","../src/components/elements-overlays.tsx","../src/components/element-overlay.tsx","../src/hooks/use-bind-react-props-to-element.ts","../src/hooks/use-floating-on-element.ts","../src/init-styles-renderer.ts","../src/styles-renderer/transformers/background-overlay-transformer.ts","../src/styles-renderer/transformers/create-combine-array-transformer.ts","../src/styles-renderer/multi-props.ts","../src/styles-renderer/transformers/create-corner-sizes-transformer.ts","../src/styles-renderer/transformers/create-edge-sizes-transformer.ts","../src/styles-renderer/transformers/gap-transformer.ts","../src/styles-renderer/transformers/linked-dimensions-transformer.ts","../src/styles-renderer/transformers/primitive-transformer.ts","../src/styles-renderer/transformers/shadow-transformer.ts","../src/styles-renderer/transformers/size-transformer.ts","../src/styles-renderer/transformers/stroke-transformer.ts","../src/styles-renderer/transformers/index.ts","../src/styles-renderer/render.ts","../src/styles-renderer/get-styles-schema.ts","../src/styles-renderer/resolve.ts","../src/styles-renderer/enqueue-used-fonts.ts","../src/sync/enqueue-font.ts","../src/sync/get-canvas-iframe-body.ts","../src/index.ts"],"sourcesContent":["import { injectIntoTop } from '@elementor/editor';\n\nimport { ElementsOverlays } from './components/elements-overlays';\nimport { initStylesRenderer } from './init-styles-renderer';\n\nexport function init() {\n\tinitStylesRenderer();\n\n\tinjectIntoTop( {\n\t\tid: 'elements-overlays',\n\t\tcomponent: ElementsOverlays,\n\t} );\n}\n","import * as React from 'react';\nimport { useElementsDomRef, useSelectedElement } from '@elementor/editor-elements';\nimport {\n\t__privateUseIsPreviewMode as useIsPreviewMode,\n\t__privateUseIsRouteActive as useIsRouteActive,\n} from '@elementor/editor-v1-adapters';\n\nimport { ElementOverlay } from './element-overlay';\n\nexport function ElementsOverlays() {\n\tconst selected = useSelectedElement();\n\tconst domElements = useElementsDomRef();\n\n\tconst isPreviewMode = useIsPreviewMode();\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\n\tconst isActive = ! isPreviewMode && ! isKitRouteActive;\n\n\treturn (\n\t\tisActive &&\n\t\tdomElements.map( ( el ) => (\n\t\t\t<ElementOverlay\n\t\t\t\telement={ el }\n\t\t\t\tkey={ el.dataset.id }\n\t\t\t\tisSelected={ selected.element?.id === el.dataset.id }\n\t\t\t/>\n\t\t) )\n\t);\n}\n","import * as React from 'react';\nimport { Box, styled } from '@elementor/ui';\nimport { FloatingPortal, useHover, useInteractions } from '@floating-ui/react';\n\nimport { useBindReactPropsToElement } from '../hooks/use-bind-react-props-to-element';\nimport { useFloatingOnElement } from '../hooks/use-floating-on-element';\n\nexport const CANVAS_WRAPPER_ID = 'elementor-preview-responsive-wrapper';\n\ntype Props = {\n\telement: HTMLElement;\n\tisSelected: boolean;\n};\n\nconst OverlayBox = styled( Box, { shouldForwardProp: ( prop ) => prop !== 'isSelected' } )<\n\tPick< Props, 'isSelected' >\n>( ( { theme, isSelected } ) => ( {\n\toutline: `${ isSelected ? '2px' : '1px' } solid ${ theme.palette.primary.light }`,\n\toutlineOffset: isSelected ? '-2px' : '-1px',\n\tpointerEvents: 'none',\n} ) );\n\nexport function ElementOverlay( { element, isSelected }: Props ) {\n\tconst { context, floating, isVisible } = useFloatingOnElement( { element, isSelected } );\n\tconst { getFloatingProps, getReferenceProps } = useInteractions( [ useHover( context ) ] );\n\n\tuseBindReactPropsToElement( element, getReferenceProps );\n\n\treturn (\n\t\tisVisible && (\n\t\t\t<FloatingPortal id={ CANVAS_WRAPPER_ID }>\n\t\t\t\t<OverlayBox\n\t\t\t\t\tref={ floating.setRef }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tstyle={ floating.styles }\n\t\t\t\t\tdata-element-overlay={ element.dataset.id }\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t{ ...getFloatingProps() }\n\t\t\t\t/>\n\t\t\t</FloatingPortal>\n\t\t)\n\t);\n}\n","import { useEffect } from 'react';\n\ntype Props = Record< string, unknown >;\n\nexport function useBindReactPropsToElement( element: HTMLElement, getProps: () => Props ) {\n\tuseEffect( () => {\n\t\tconst el = element;\n\n\t\tconst { events, attrs } = groupProps( getProps() );\n\n\t\tevents.forEach( ( [ eventName, listener ] ) => el.addEventListener( eventName, listener ) );\n\t\tattrs.forEach( ( [ attrName, attrValue ] ) => el.setAttribute( attrName, attrValue ) );\n\n\t\treturn () => {\n\t\t\tevents.forEach( ( [ eventName, listener ] ) => el.removeEventListener( eventName, listener ) );\n\t\t\tattrs.forEach( ( [ attrName ] ) => el.removeAttribute( attrName ) );\n\t\t};\n\t}, [ getProps, element ] );\n}\n\ntype GroupedProps = {\n\tevents: Array< [ string, () => void ] >;\n\tattrs: Array< [ string, string ] >;\n};\n\nfunction groupProps( props: Props ) {\n\tconst eventRegex = /^on(?=[A-Z])/;\n\n\treturn Object.entries( props ).reduce< GroupedProps >(\n\t\t( acc, [ propName, propValue ] ) => {\n\t\t\tif ( ! eventRegex.test( propName ) ) {\n\t\t\t\tacc.attrs.push( [ propName, propValue as string ] );\n\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tconst eventName = propName.replace( eventRegex, '' ).toLowerCase();\n\t\t\tconst listener = propValue as () => void;\n\n\t\t\tacc.events.push( [ eventName, listener ] );\n\n\t\t\treturn acc;\n\t\t},\n\t\t{\n\t\t\tevents: [],\n\t\t\tattrs: [],\n\t\t}\n\t);\n}\n","import { useState } from 'react';\nimport { autoUpdate, offset, size, useFloating } from '@floating-ui/react';\n\ntype Options = {\n\telement: HTMLElement;\n\tisSelected: boolean;\n};\n\nexport function useFloatingOnElement( { element, isSelected }: Options ) {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\n\tconst { refs, floatingStyles, context } = useFloating( {\n\t\t// Must be controlled for interactions (like hover) to work.\n\t\topen: isOpen || isSelected,\n\t\tonOpenChange: setIsOpen,\n\n\t\t// Add an animation frame to support scroll events (without it the floating element will stay in the same position).\n\t\twhileElementsMounted: ( ...args ) => autoUpdate( ...args, { animationFrame: true } ),\n\n\t\t// The first element in the canvas is `display: contents` so we need to use the first child.\n\t\telements: { reference: element.firstElementChild },\n\n\t\tmiddleware: [\n\t\t\t// Match the floating element's size to the reference element.\n\t\t\tsize( {\n\t\t\t\tapply( { elements, rects } ) {\n\t\t\t\t\tObject.assign( elements.floating.style, {\n\t\t\t\t\t\twidth: `${ rects.reference.width }px`,\n\t\t\t\t\t\theight: `${ rects.reference.height }px`,\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t} ),\n\n\t\t\t// Center the floating element on the reference element.\n\t\t\toffset( ( { rects } ) => -rects.reference.height / 2 - rects.floating.height / 2 ),\n\t\t],\n\t} );\n\n\treturn {\n\t\tisVisible: isOpen || isSelected,\n\t\tcontext,\n\t\tfloating: {\n\t\t\tsetRef: refs.setFloating,\n\t\t\tref: refs.floating,\n\t\t\tstyles: floatingStyles,\n\t\t},\n\t};\n}\n","import { getBreakpointsMap } from '@elementor/editor-responsive';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\n\nimport { render, transformers } from './styles-renderer';\nimport enqueueUsedFonts from './styles-renderer/enqueue-used-fonts';\nimport { getCanvasIframeBody } from './sync/get-canvas-iframe-body';\n\nconst WRAPPER_DATA_ATTR = 'data-styles-container';\n\nexport function initStylesRenderer() {\n\tstylesRepository.subscribe( () => {\n\t\tconst styleContainer = getStylesContainer();\n\t\tconst styles = stylesRepository.all();\n\t\tconst breakpoints = getBreakpointsMap();\n\n\t\tstyleContainer.innerHTML = render( { transformers, styles, breakpoints } );\n\n\t\tenqueueUsedFonts( styles );\n\t} );\n}\n\nfunction getStylesContainer() {\n\tconst preview = getCanvasIframeBody();\n\tconst stylesContainer = preview?.querySelector( `[${ WRAPPER_DATA_ATTR }]` );\n\n\tif ( stylesContainer ) {\n\t\treturn stylesContainer;\n\t}\n\n\tconst el = createStylesContainer();\n\n\tpreview?.prepend( el );\n\n\treturn el;\n}\n\nfunction createStylesContainer() {\n\tconst el = document.createElement( 'div' );\n\tel.style.display = 'none';\n\tel.setAttribute( WRAPPER_DATA_ATTR, '' );\n\n\treturn el;\n}\n","import { type ColorGradientPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst backgroundOverlayTransformer: Transformer< ColorGradientPropValue[ 'value' ] > = ( value ) => {\n\treturn `linear-gradient(${ value.color },${ value.color })`;\n};\n\nexport default backgroundOverlayTransformer;\n","import { type Transformer } from '../types';\n\ntype CreateCombineArrayTransformer = ( delimiter: string ) => Transformer< Array< string | number > >;\n\nconst createCombineArrayTransformer: CreateCombineArrayTransformer = ( delimiter ) => {\n\treturn ( value ) => value.filter( Boolean ).join( delimiter );\n};\n\nexport default createCombineArrayTransformer;\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nexport type MultiProps = {\n\t'$$multi-props': true;\n\tvalue: Props;\n};\n\nexport const isMultiProps = ( propValue: PropValue ): propValue is MultiProps => {\n\treturn (\n\t\t!! propValue &&\n\t\ttypeof propValue === 'object' &&\n\t\t'$$multi-props' in propValue &&\n\t\tpropValue[ '$$multi-props' ] === true\n\t);\n};\n\nexport const createMultiPropsValue = ( props: Props ): MultiProps => {\n\treturn {\n\t\t'$$multi-props': true,\n\t\tvalue: props,\n\t};\n};\n\nexport const getMultiPropsValue = ( multiProps: MultiProps ): Props => {\n\treturn multiProps.value;\n};\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nexport type CornerSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\nexport type CreateCornerSizesTransformer = (\n\tkeyGenerator: ( cornerKey: string ) => string\n) => Transformer< CornerSizes >;\n\nconst validCorners = [ 'top-left', 'top-right', 'bottom-left', 'bottom-right' ];\n\nconst createCornerSizesTransformer: CreateCornerSizesTransformer = ( keyGenerator ) => ( value ) => {\n\tconst props = Object.entries( value ).reduce< Props >( ( acc, [ corner, cornerValue ] ) => {\n\t\tif ( validCorners.includes( corner ) ) {\n\t\t\tconst key = keyGenerator( corner );\n\n\t\t\tacc[ key ] = cornerValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( props );\n};\n\nexport default createCornerSizesTransformer;\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nexport type EdgeSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\nexport type CreateEdgeSizesTransformer = ( keyGenerator: ( edgeKey: string ) => string ) => Transformer< EdgeSizes >;\n\nconst validEdges = [ 'top', 'right', 'bottom', 'left' ];\n\nconst createEdgeSizesTransformer: CreateEdgeSizesTransformer = ( keyGenerator ) => ( value ) => {\n\tconst props = Object.entries( value ).reduce< Props >( ( acc, [ edge, edgeValue ] ) => {\n\t\tif ( validEdges.includes( edge ) ) {\n\t\t\tconst key = keyGenerator( edge );\n\n\t\t\tacc[ key ] = edgeValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( props );\n};\n\nexport default createEdgeSizesTransformer;\n","import { type GapPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'row', 'column' ];\n\nconst gapTransformer: Transformer< GapPropValue[ 'value' ] > = ( value, key ) => {\n\tconst parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {\n\t\tif ( dimensionValue && validKeys.includes( dimensionKey ) ) {\n\t\t\tacc[ `${ dimensionKey }-${ key }` ] = dimensionValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default gapTransformer;\n","import { type LinkedDimensionsPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'top', 'right', 'bottom', 'left' ];\n\nconst linkedDimensionsTransformer: Transformer< LinkedDimensionsPropValue[ 'value' ] > = ( value, key ) => {\n\tconst parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {\n\t\tif ( dimensionValue && validKeys.includes( dimensionKey ) ) {\n\t\t\tacc[ `${ key }-${ dimensionKey }` ] = dimensionValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default linkedDimensionsTransformer;\n","import { type Transformer } from '../types';\n\ntype Primitive = string | number | boolean;\n\nexport const primitiveTransformer: Transformer< Primitive > = ( value ) => {\n\treturn value;\n};\n","import { type ShadowPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst shadowTransformer: Transformer< ShadowPropValue[ 'value' ] > = ( value ) => {\n\treturn [ value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position ]\n\t\t.filter( Boolean )\n\t\t.join( ' ' );\n};\n\nexport default shadowTransformer;\n","import { type SizePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst sizeTransformer: Transformer< SizePropValue[ 'value' ] > = ( value ) => {\n\treturn `${ value.size }${ value.unit }`;\n};\n\nexport default sizeTransformer;\n","import { type StrokePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst strokeTransformer: Transformer< StrokePropValue[ 'value' ] > = ( value ) => {\n\treturn `${ value.width } ${ value.color }`;\n};\n\nexport default strokeTransformer;\n","import { type TransformersMap } from '../types';\nimport { default as backgroundOverlay } from './background-overlay-transformer';\nimport { default as createCombineArrayTransformer } from './create-combine-array-transformer';\nimport createCornerSizesTransformer from './create-corner-sizes-transformer';\nimport createEdgeSizesTransformer from './create-edge-sizes-transformer';\nimport { default as gap } from './gap-transformer';\nimport { default as linkedDimensions } from './linked-dimensions-transformer';\nimport { primitiveTransformer } from './primitive-transformer';\nimport { default as shadow } from './shadow-transformer';\nimport { default as size } from './size-transformer';\nimport { default as stroke } from './stroke-transformer';\n\nexport default {\n\tsize,\n\tshadow,\n\tstroke,\n\tgap,\n\n\tcolor: primitiveTransformer,\n\tnumber: primitiveTransformer,\n\tstring: primitiveTransformer,\n\n\t'linked-dimensions': linkedDimensions,\n\t'background-overlay': backgroundOverlay,\n\n\t'box-shadow': createCombineArrayTransformer( ',' ),\n\t'background-image': createCombineArrayTransformer( ',' ),\n\n\t'border-width': createEdgeSizesTransformer( ( edgeKey ) => `border-${ edgeKey }-width` ),\n\t'border-radius': createCornerSizesTransformer( ( cornerKey ) => `border-${ cornerKey }-radius` ),\n} satisfies TransformersMap;\n","import { type Props } from '@elementor/editor-props';\nimport { type Breakpoint, type BreakpointId, type BreakpointsMap } from '@elementor/editor-responsive';\nimport { type StyleDefinition, type StyleVariant } from '@elementor/editor-styles';\nimport { ensureError } from '@elementor/utils';\n\nimport { getStylesSchema } from './get-styles-schema';\nimport { resolve } from './resolve';\nimport { type TransformersMap } from './types';\n\ntype RenderParams = {\n\ttransformers: TransformersMap;\n\tstyles: StyleDefinition[];\n\tbreakpoints: BreakpointsMap;\n};\n\nexport default function render( { transformers, styles, breakpoints }: RenderParams ) {\n\tconst cssStyle: string[] = [];\n\n\ttry {\n\t\tstyles.forEach( ( styleDef ) => {\n\t\t\tconst style = renderStyle( styleDef, transformers, breakpoints );\n\n\t\t\tcssStyle.push( wrapWithStyleElement( styleDef.id, style ) );\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( `Cannot render style': ${ ensureError( error ).message }` );\n\t}\n\n\treturn cssStyle.join( '' );\n}\n\nfunction renderStyle( style: StyleDefinition, transformers: TransformersMap, breakpoints: BreakpointsMap ) {\n\tconst baseSelector = getBaseSelector( style );\n\n\tif ( ! baseSelector ) {\n\t\treturn '';\n\t}\n\n\tconst stylesheet: string[] = [];\n\n\tObject.values( style.variants ).forEach( ( variant ) => {\n\t\tconst styleDeclaration = variantToStyleDeclaration( baseSelector, variant, transformers, breakpoints );\n\n\t\tif ( styleDeclaration ) {\n\t\t\tstylesheet.push( styleDeclaration );\n\t\t}\n\t} );\n\n\treturn stylesheet.join( '' );\n}\n\nfunction getBaseSelector( styleDef: StyleDefinition ) {\n\tconst map = {\n\t\tclass: '.',\n\t};\n\n\treturn `${ map[ styleDef.type ] }${ styleDef.id }`;\n}\n\nfunction variantToStyleDeclaration(\n\tbaseSelector: string,\n\tvariant: StyleVariant,\n\ttransformers: TransformersMap,\n\tbreakpoints: BreakpointsMap\n) {\n\tconst css = propsToCss( variant.props, transformers );\n\n\tif ( ! css ) {\n\t\treturn '';\n\t}\n\n\tconst state = variant.meta.state ? `:${ variant.meta.state }` : '';\n\tconst selector = `${ baseSelector }${ state }`;\n\n\tlet styleDeclaration = `${ selector }{${ css }}`;\n\n\tif ( variant.meta.breakpoint ) {\n\t\tstyleDeclaration = wrapWithMediaQuery( breakpoints, variant.meta.breakpoint, styleDeclaration );\n\t}\n\n\treturn styleDeclaration;\n}\n\nfunction propsToCss( props: Props, transformers: TransformersMap ): string {\n\tconst schema = getStylesSchema();\n\n\tconst transformed = resolve( { props, schema, transformers } );\n\n\treturn Object.entries( transformed )\n\t\t.reduce< string[] >( ( acc, [ propName, propValue ] ) => {\n\t\t\tacc.push( propName + ':' + propValue + ';' );\n\n\t\t\treturn acc;\n\t\t}, [] )\n\t\t.join( '' );\n}\n\nfunction wrapWithMediaQuery( breakpoints: BreakpointsMap, breakpoint: BreakpointId, css: string ) {\n\tconst size = getBreakpointSize( breakpoints[ breakpoint ] );\n\treturn size ? `@media(${ size }){${ css }}` : css;\n}\n\nfunction getBreakpointSize( breakpoint: Breakpoint ) {\n\treturn breakpoint.type ? `${ breakpoint.type }:${ breakpoint.width }px` : null;\n}\n\nfunction wrapWithStyleElement( id: string, content: string ) {\n\treturn `<style data-style-id=\"${ id }\">${ content }</style>`;\n}\n","import { type PropKey, type PropType } from '@elementor/editor-props';\n\ntype ExtendedWindow = Window & {\n\telementor?: {\n\t\tconfig?: {\n\t\t\tatomic?: {\n\t\t\t\tstyles_schema?: Record< PropKey, PropType >;\n\t\t\t};\n\t\t};\n\t};\n};\n\nexport const getStylesSchema = () => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.config?.atomic?.styles_schema ?? {};\n};\n","import { type PropsSchema } from '@elementor/editor-elements';\nimport { isTransformable, type PropKey, type Props, type PropType, type PropValue } from '@elementor/editor-props';\n\nimport { getMultiPropsValue, isMultiProps } from './multi-props';\nimport { type TransformersMap } from './types';\n\nconst TRANSFORM_DEPTH_LIMIT = 3;\n\ntype ResolveArgs = {\n\tprops: Props;\n\tschema: PropsSchema;\n\ttransformers: TransformersMap;\n};\n\nexport function resolve( { props, schema, transformers }: ResolveArgs ) {\n\tconst resolved: Props = {};\n\n\tObject.entries( schema ).forEach( ( [ key, propType ] ) => {\n\t\tconst value = props[ key ] ?? propType.default;\n\n\t\tconst transformed = transform( value, key, propType, transformers );\n\n\t\tif ( transformed === null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isMultiProps( transformed ) ) {\n\t\t\tObject.assign( resolved, getMultiPropsValue( transformed ) );\n\t\t\treturn;\n\t\t}\n\n\t\tresolved[ key ] = transformed;\n\t} );\n\n\treturn resolved;\n}\n\nfunction transform(\n\tvalue: PropValue,\n\tpropKey: PropKey,\n\tpropType: PropType,\n\ttransformers: TransformersMap,\n\tdepth: number = 0\n) {\n\tif ( ! value && value !== 0 ) {\n\t\treturn null;\n\t}\n\n\tif ( ! isTransformable( value ) ) {\n\t\treturn value;\n\t}\n\n\tif ( depth > TRANSFORM_DEPTH_LIMIT ) {\n\t\treturn null;\n\t}\n\n\tif ( value.disabled === true ) {\n\t\treturn null;\n\t}\n\n\tif ( propType.kind === 'union' ) {\n\t\tpropType = propType.prop_types[ value.$$type ];\n\n\t\tif ( ! propType ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Warning: This variable is loosely-typed - use with caution.\n\tlet resolvedValue = value.value;\n\n\tif ( propType.kind === 'object' ) {\n\t\tresolvedValue = resolve( {\n\t\t\ttransformers,\n\t\t\tprops: resolvedValue,\n\t\t\tschema: propType.shape,\n\t\t} );\n\t}\n\n\tif ( propType.kind === 'array' ) {\n\t\tresolvedValue = resolvedValue.map( ( item: PropValue ) =>\n\t\t\ttransform( item, propKey, propType.item_prop_type, transformers, depth )\n\t\t);\n\t}\n\n\tconst transformer = transformers[ value.$$type ];\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst transformed = transformer( resolvedValue, propKey );\n\n\t\treturn transform( transformed, propKey, propType, transformers, depth + 1 );\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import { type StyleDefinition } from '@elementor/editor-styles';\nimport { ensureError } from '@elementor/utils';\n\nimport { enqueueFont } from '../sync/enqueue-font';\n\nexport default function enqueueUsedFonts( styles: StyleDefinition[] ) {\n\ttry {\n\t\tstyles.forEach( ( styleDef ) => {\n\t\t\tObject.values( styleDef.variants ).forEach( ( variant ) => {\n\t\t\t\tconst fontFamily = variant.props[ 'font-family' ] ?? null;\n\n\t\t\t\tif ( fontFamily && typeof fontFamily === 'string' ) {\n\t\t\t\t\tenqueueFont( fontFamily );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( `Cannot enqueue font': ${ ensureError( error ).message }` );\n\t}\n}\n","import { type CanvasExtendedWindow, type EnqueueFont } from './types';\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n","import type { CanvasExtendedWindow } from './types';\n\nexport function getCanvasIframeBody() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.$preview?.[ 0 ]?.contentDocument?.body;\n}\n","import { init } from './init';\n\ninit();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oBAA8B;;;ACA9B,IAAAA,SAAuB;AACvB,6BAAsD;AACtD,gCAGO;;;ACLP,YAAuB;AACvB,gBAA4B;AAC5B,IAAAC,gBAA0D;;;ACF1D,mBAA0B;AAInB,SAAS,2BAA4B,SAAsB,UAAwB;AACzF,8BAAW,MAAM;AAChB,UAAM,KAAK;AAEX,UAAM,EAAE,QAAQ,MAAM,IAAI,WAAY,SAAS,CAAE;AAEjD,WAAO,QAAS,CAAE,CAAE,WAAW,QAAS,MAAO,GAAG,iBAAkB,WAAW,QAAS,CAAE;AAC1F,UAAM,QAAS,CAAE,CAAE,UAAU,SAAU,MAAO,GAAG,aAAc,UAAU,SAAU,CAAE;AAErF,WAAO,MAAM;AACZ,aAAO,QAAS,CAAE,CAAE,WAAW,QAAS,MAAO,GAAG,oBAAqB,WAAW,QAAS,CAAE;AAC7F,YAAM,QAAS,CAAE,CAAE,QAAS,MAAO,GAAG,gBAAiB,QAAS,CAAE;AAAA,IACnE;AAAA,EACD,GAAG,CAAE,UAAU,OAAQ,CAAE;AAC1B;AAOA,SAAS,WAAY,OAAe;AACnC,QAAM,aAAa;AAEnB,SAAO,OAAO,QAAS,KAAM,EAAE;AAAA,IAC9B,CAAE,KAAK,CAAE,UAAU,SAAU,MAAO;AACnC,UAAK,CAAE,WAAW,KAAM,QAAS,GAAI;AACpC,YAAI,MAAM,KAAM,CAAE,UAAU,SAAoB,CAAE;AAElD,eAAO;AAAA,MACR;AAEA,YAAM,YAAY,SAAS,QAAS,YAAY,EAAG,EAAE,YAAY;AACjE,YAAM,WAAW;AAEjB,UAAI,OAAO,KAAM,CAAE,WAAW,QAAS,CAAE;AAEzC,aAAO;AAAA,IACR;AAAA,IACA;AAAA,MACC,QAAQ,CAAC;AAAA,MACT,OAAO,CAAC;AAAA,IACT;AAAA,EACD;AACD;;;AChDA,IAAAC,gBAAyB;AACzB,IAAAA,gBAAsD;AAO/C,SAAS,qBAAsB,EAAE,SAAS,WAAW,GAAa;AACxE,QAAM,CAAE,QAAQ,SAAU,QAAI,wBAAU,KAAM;AAE9C,QAAM,EAAE,MAAM,gBAAgB,QAAQ,QAAI,2BAAa;AAAA;AAAA,IAEtD,MAAM,UAAU;AAAA,IAChB,cAAc;AAAA;AAAA,IAGd,sBAAsB,IAAK,aAAU,0BAAY,GAAG,MAAM,EAAE,gBAAgB,KAAK,CAAE;AAAA;AAAA,IAGnF,UAAU,EAAE,WAAW,QAAQ,kBAAkB;AAAA,IAEjD,YAAY;AAAA;AAAA,UAEX,oBAAM;AAAA,QACL,MAAO,EAAE,UAAU,MAAM,GAAI;AAC5B,iBAAO,OAAQ,SAAS,SAAS,OAAO;AAAA,YACvC,OAAO,GAAI,MAAM,UAAU,KAAM;AAAA,YACjC,QAAQ,GAAI,MAAM,UAAU,MAAO;AAAA,UACpC,CAAE;AAAA,QACH;AAAA,MACD,CAAE;AAAA;AAAA,UAGF,sBAAQ,CAAE,EAAE,MAAM,MAAO,CAAC,MAAM,UAAU,SAAS,IAAI,MAAM,SAAS,SAAS,CAAE;AAAA,IAClF;AAAA,EACD,CAAE;AAEF,SAAO;AAAA,IACN,WAAW,UAAU;AAAA,IACrB;AAAA,IACA,UAAU;AAAA,MACT,QAAQ,KAAK;AAAA,MACb,KAAK,KAAK;AAAA,MACV,QAAQ;AAAA,IACT;AAAA,EACD;AACD;;;AFxCO,IAAM,oBAAoB;AAOjC,IAAM,iBAAa,kBAAQ,eAAK,EAAE,mBAAmB,CAAE,SAAU,SAAS,aAAa,CAAE,EAEtF,CAAE,EAAE,OAAO,WAAW,OAAS;AAAA,EACjC,SAAS,GAAI,aAAa,QAAQ,KAAM,UAAW,MAAM,QAAQ,QAAQ,KAAM;AAAA,EAC/E,eAAe,aAAa,SAAS;AAAA,EACrC,eAAe;AAChB,EAAI;AAEG,SAAS,eAAgB,EAAE,SAAS,WAAW,GAAW;AAChE,QAAM,EAAE,SAAS,UAAU,UAAU,IAAI,qBAAsB,EAAE,SAAS,WAAW,CAAE;AACvF,QAAM,EAAE,kBAAkB,kBAAkB,QAAI,+BAAiB,KAAE,wBAAU,OAAQ,CAAE,CAAE;AAEzF,6BAA4B,SAAS,iBAAkB;AAEvD,SACC,aACC,oCAAC,gCAAe,IAAK,qBACpB;AAAA,IAAC;AAAA;AAAA,MACA,KAAM,SAAS;AAAA,MACf;AAAA,MACA,OAAQ,SAAS;AAAA,MACjB,wBAAuB,QAAQ,QAAQ;AAAA,MACvC,MAAK;AAAA,MACH,GAAG,iBAAiB;AAAA;AAAA,EACvB,CACD;AAGH;;;ADjCO,SAAS,mBAAmB;AAClC,QAAM,eAAW,2CAAmB;AACpC,QAAM,kBAAc,0CAAkB;AAEtC,QAAM,oBAAgB,0BAAAC,2BAAiB;AACvC,QAAM,uBAAmB,0BAAAC,2BAAkB,cAAe;AAE1D,QAAM,WAAW,CAAE,iBAAiB,CAAE;AAEtC,SACC,YACA,YAAY,IAAK,CAAE,OAClB;AAAA,IAAC;AAAA;AAAA,MACA,SAAU;AAAA,MACV,KAAM,GAAG,QAAQ;AAAA,MACjB,YAAa,SAAS,SAAS,OAAO,GAAG,QAAQ;AAAA;AAAA,EAClD,CACC;AAEJ;;;AI5BA,+BAAkC;AAClC,sCAAiC;;;ACGjC,IAAM,+BAAiF,CAAE,UAAW;AACnG,SAAO,mBAAoB,MAAM,KAAM,IAAK,MAAM,KAAM;AACzD;AAEA,IAAO,yCAAQ;;;ACJf,IAAM,gCAA+D,CAAE,cAAe;AACrF,SAAO,CAAE,UAAW,MAAM,OAAQ,OAAQ,EAAE,KAAM,SAAU;AAC7D;AAEA,IAAO,2CAAQ;;;ACDR,IAAM,eAAe,CAAE,cAAmD;AAChF,SACC,CAAC,CAAE,aACH,OAAO,cAAc,YACrB,mBAAmB,aACnB,UAAW,eAAgB,MAAM;AAEnC;AAEO,IAAM,wBAAwB,CAAE,UAA8B;AACpE,SAAO;AAAA,IACN,iBAAiB;AAAA,IACjB,OAAO;AAAA,EACR;AACD;AAEO,IAAM,qBAAqB,CAAE,eAAmC;AACtE,SAAO,WAAW;AACnB;;;ACTA,IAAM,eAAe,CAAE,YAAY,aAAa,eAAe,cAAe;AAE9E,IAAM,+BAA6D,CAAE,iBAAkB,CAAE,UAAW;AACnG,QAAM,QAAQ,OAAO,QAAS,KAAM,EAAE,OAAiB,CAAE,KAAK,CAAE,QAAQ,WAAY,MAAO;AAC1F,QAAK,aAAa,SAAU,MAAO,GAAI;AACtC,YAAM,MAAM,aAAc,MAAO;AAEjC,UAAK,GAAI,IAAI;AAAA,IACd;AAEA,WAAO;AAAA,EACR,GAAG,CAAC,CAAE;AAEN,SAAO,sBAAuB,KAAM;AACrC;AAEA,IAAO,0CAAQ;;;AClBf,IAAM,aAAa,CAAE,OAAO,SAAS,UAAU,MAAO;AAEtD,IAAM,6BAAyD,CAAE,iBAAkB,CAAE,UAAW;AAC/F,QAAM,QAAQ,OAAO,QAAS,KAAM,EAAE,OAAiB,CAAE,KAAK,CAAE,MAAM,SAAU,MAAO;AACtF,QAAK,WAAW,SAAU,IAAK,GAAI;AAClC,YAAM,MAAM,aAAc,IAAK;AAE/B,UAAK,GAAI,IAAI;AAAA,IACd;AAEA,WAAO;AAAA,EACR,GAAG,CAAC,CAAE;AAEN,SAAO,sBAAuB,KAAM;AACrC;AAEA,IAAO,wCAAQ;;;ACzBf,IAAM,YAAY,CAAE,OAAO,QAAS;AAEpC,IAAM,iBAAyD,CAAE,OAAO,QAAS;AAChF,QAAM,SAAS,OAAO,QAAS,KAAM,EAAE,OAAiB,CAAE,KAAK,CAAE,cAAc,cAAe,MAAO;AACpG,QAAK,kBAAkB,UAAU,SAAU,YAAa,GAAI;AAC3D,UAAK,GAAI,YAAa,IAAK,GAAI,EAAG,IAAI;AAAA,IACvC;AAEA,WAAO;AAAA,EACR,GAAG,CAAC,CAAE;AAEN,SAAO,sBAAuB,MAAO;AACtC;AAEA,IAAO,0BAAQ;;;ACdf,IAAMC,aAAY,CAAE,OAAO,SAAS,UAAU,MAAO;AAErD,IAAM,8BAAmF,CAAE,OAAO,QAAS;AAC1G,QAAM,SAAS,OAAO,QAAS,KAAM,EAAE,OAAiB,CAAE,KAAK,CAAE,cAAc,cAAe,MAAO;AACpG,QAAK,kBAAkBA,WAAU,SAAU,YAAa,GAAI;AAC3D,UAAK,GAAI,GAAI,IAAK,YAAa,EAAG,IAAI;AAAA,IACvC;AAEA,WAAO;AAAA,EACR,GAAG,CAAC,CAAE;AAEN,SAAO,sBAAuB,MAAO;AACtC;AAEA,IAAO,wCAAQ;;;ACfR,IAAM,uBAAiD,CAAE,UAAW;AAC1E,SAAO;AACR;;;ACFA,IAAM,oBAA+D,CAAE,UAAW;AACjF,SAAO,CAAE,MAAM,SAAS,MAAM,SAAS,MAAM,MAAM,MAAM,QAAQ,MAAM,OAAO,MAAM,QAAS,EAC3F,OAAQ,OAAQ,EAChB,KAAM,GAAI;AACb;AAEA,IAAO,6BAAQ;;;ACNf,IAAM,kBAA2D,CAAE,UAAW;AAC7E,SAAO,GAAI,MAAM,IAAK,GAAI,MAAM,IAAK;AACtC;AAEA,IAAO,2BAAQ;;;ACJf,IAAM,oBAA+D,CAAE,UAAW;AACjF,SAAO,GAAI,MAAM,KAAM,IAAK,MAAM,KAAM;AACzC;AAEA,IAAO,6BAAQ;;;ACIf,IAAO,uBAAQ;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,qBAAqB;AAAA,EACrB,sBAAsB;AAAA,EAEtB,cAAc,yCAA+B,GAAI;AAAA,EACjD,oBAAoB,yCAA+B,GAAI;AAAA,EAEvD,gBAAgB,sCAA4B,CAAE,YAAa,UAAW,OAAQ,QAAS;AAAA,EACvF,iBAAiB,wCAA8B,CAAE,cAAe,UAAW,SAAU,SAAU;AAChG;;;AC3BA,mBAA4B;;;ACSrB,IAAM,kBAAkB,MAAM;AACpC,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,QAAQ,QAAQ,iBAAiB,CAAC;AACpE;;;ACfA,0BAAyF;AAKzF,IAAM,wBAAwB;AAQvB,SAAS,QAAS,EAAE,OAAO,QAAQ,aAAa,GAAiB;AACvE,QAAM,WAAkB,CAAC;AAEzB,SAAO,QAAS,MAAO,EAAE,QAAS,CAAE,CAAE,KAAK,QAAS,MAAO;AAC1D,UAAM,QAAQ,MAAO,GAAI,KAAK,SAAS;AAEvC,UAAM,cAAc,UAAW,OAAO,KAAK,UAAU,YAAa;AAElE,QAAK,gBAAgB,MAAO;AAC3B;AAAA,IACD;AAEA,QAAK,aAAc,WAAY,GAAI;AAClC,aAAO,OAAQ,UAAU,mBAAoB,WAAY,CAAE;AAC3D;AAAA,IACD;AAEA,aAAU,GAAI,IAAI;AAAA,EACnB,CAAE;AAEF,SAAO;AACR;AAEA,SAAS,UACR,OACA,SACA,UACA,cACA,QAAgB,GACf;AACD,MAAK,CAAE,SAAS,UAAU,GAAI;AAC7B,WAAO;AAAA,EACR;AAEA,MAAK,KAAE,qCAAiB,KAAM,GAAI;AACjC,WAAO;AAAA,EACR;AAEA,MAAK,QAAQ,uBAAwB;AACpC,WAAO;AAAA,EACR;AAEA,MAAK,MAAM,aAAa,MAAO;AAC9B,WAAO;AAAA,EACR;AAEA,MAAK,SAAS,SAAS,SAAU;AAChC,eAAW,SAAS,WAAY,MAAM,MAAO;AAE7C,QAAK,CAAE,UAAW;AACjB,aAAO;AAAA,IACR;AAAA,EACD;AAGA,MAAI,gBAAgB,MAAM;AAE1B,MAAK,SAAS,SAAS,UAAW;AACjC,oBAAgB,QAAS;AAAA,MACxB;AAAA,MACA,OAAO;AAAA,MACP,QAAQ,SAAS;AAAA,IAClB,CAAE;AAAA,EACH;AAEA,MAAK,SAAS,SAAS,SAAU;AAChC,oBAAgB,cAAc;AAAA,MAAK,CAAE,SACpC,UAAW,MAAM,SAAS,SAAS,gBAAgB,cAAc,KAAM;AAAA,IACxE;AAAA,EACD;AAEA,QAAM,cAAc,aAAc,MAAM,MAAO;AAE/C,MAAK,CAAE,aAAc;AACpB,WAAO;AAAA,EACR;AAEA,MAAI;AACH,UAAM,cAAc,YAAa,eAAe,OAAQ;AAExD,WAAO,UAAW,aAAa,SAAS,UAAU,cAAc,QAAQ,CAAE;AAAA,EAC3E,QAAQ;AACP,WAAO;AAAA,EACR;AACD;;;AFnFe,SAAR,OAAyB,EAAE,cAAc,QAAQ,YAAY,GAAkB;AACrF,QAAM,WAAqB,CAAC;AAE5B,MAAI;AACH,WAAO,QAAS,CAAE,aAAc;AAC/B,YAAM,QAAQ,YAAa,UAAU,cAAc,WAAY;AAE/D,eAAS,KAAM,qBAAsB,SAAS,IAAI,KAAM,CAAE;AAAA,IAC3D,CAAE;AAAA,EACH,SAAU,OAAiB;AAE1B,YAAQ,MAAO,6BAA0B,0BAAa,KAAM,EAAE,OAAQ,EAAG;AAAA,EAC1E;AAEA,SAAO,SAAS,KAAM,EAAG;AAC1B;AAEA,SAAS,YAAa,OAAwB,cAA+B,aAA8B;AAC1G,QAAM,eAAe,gBAAiB,KAAM;AAE5C,MAAK,CAAE,cAAe;AACrB,WAAO;AAAA,EACR;AAEA,QAAM,aAAuB,CAAC;AAE9B,SAAO,OAAQ,MAAM,QAAS,EAAE,QAAS,CAAE,YAAa;AACvD,UAAM,mBAAmB,0BAA2B,cAAc,SAAS,cAAc,WAAY;AAErG,QAAK,kBAAmB;AACvB,iBAAW,KAAM,gBAAiB;AAAA,IACnC;AAAA,EACD,CAAE;AAEF,SAAO,WAAW,KAAM,EAAG;AAC5B;AAEA,SAAS,gBAAiB,UAA4B;AACrD,QAAM,MAAM;AAAA,IACX,OAAO;AAAA,EACR;AAEA,SAAO,GAAI,IAAK,SAAS,IAAK,CAAE,GAAI,SAAS,EAAG;AACjD;AAEA,SAAS,0BACR,cACA,SACA,cACA,aACC;AACD,QAAM,MAAM,WAAY,QAAQ,OAAO,YAAa;AAEpD,MAAK,CAAE,KAAM;AACZ,WAAO;AAAA,EACR;AAEA,QAAM,QAAQ,QAAQ,KAAK,QAAQ,IAAK,QAAQ,KAAK,KAAM,KAAK;AAChE,QAAM,WAAW,GAAI,YAAa,GAAI,KAAM;AAE5C,MAAI,mBAAmB,GAAI,QAAS,IAAK,GAAI;AAE7C,MAAK,QAAQ,KAAK,YAAa;AAC9B,uBAAmB,mBAAoB,aAAa,QAAQ,KAAK,YAAY,gBAAiB;AAAA,EAC/F;AAEA,SAAO;AACR;AAEA,SAAS,WAAY,OAAc,cAAwC;AAC1E,QAAM,SAAS,gBAAgB;AAE/B,QAAM,cAAc,QAAS,EAAE,OAAO,QAAQ,aAAa,CAAE;AAE7D,SAAO,OAAO,QAAS,WAAY,EACjC,OAAoB,CAAE,KAAK,CAAE,UAAU,SAAU,MAAO;AACxD,QAAI,KAAM,WAAW,MAAM,YAAY,GAAI;AAE3C,WAAO;AAAA,EACR,GAAG,CAAC,CAAE,EACL,KAAM,EAAG;AACZ;AAEA,SAAS,mBAAoB,aAA6B,YAA0B,KAAc;AACjG,QAAMC,QAAO,kBAAmB,YAAa,UAAW,CAAE;AAC1D,SAAOA,QAAO,UAAWA,KAAK,KAAM,GAAI,MAAM;AAC/C;AAEA,SAAS,kBAAmB,YAAyB;AACpD,SAAO,WAAW,OAAO,GAAI,WAAW,IAAK,IAAK,WAAW,KAAM,OAAO;AAC3E;AAEA,SAAS,qBAAsB,IAAY,SAAkB;AAC5D,SAAO,yBAA0B,EAAG,KAAM,OAAQ;AACnD;;;AG5GA,IAAAC,gBAA4B;;;ACCrB,IAAM,cAA2B,CAAE,YAAY,UAAU,cAAe;AAC9E,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,SAAS,cAAe,YAAY,OAAQ,KAAK;AACnF;;;ADDe,SAAR,iBAAmC,QAA4B;AACrE,MAAI;AACH,WAAO,QAAS,CAAE,aAAc;AAC/B,aAAO,OAAQ,SAAS,QAAS,EAAE,QAAS,CAAE,YAAa;AAC1D,cAAM,aAAa,QAAQ,MAAO,aAAc,KAAK;AAErD,YAAK,cAAc,OAAO,eAAe,UAAW;AACnD,sBAAa,UAAW;AAAA,QACzB;AAAA,MACD,CAAE;AAAA,IACH,CAAE;AAAA,EACH,SAAU,OAAiB;AAE1B,YAAQ,MAAO,6BAA0B,2BAAa,KAAM,EAAE,OAAQ,EAAG;AAAA,EAC1E;AACD;;;AElBO,SAAS,sBAAsB;AACrC,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,WAAY,CAAE,GAAG,iBAAiB;AACpE;;;AlBCA,IAAM,oBAAoB;AAEnB,SAAS,qBAAqB;AACpC,mDAAiB,UAAW,MAAM;AACjC,UAAM,iBAAiB,mBAAmB;AAC1C,UAAM,SAAS,iDAAiB,IAAI;AACpC,UAAM,kBAAc,4CAAkB;AAEtC,mBAAe,YAAY,OAAQ,EAAE,oCAAc,QAAQ,YAAY,CAAE;AAEzE,qBAAkB,MAAO;AAAA,EAC1B,CAAE;AACH;AAEA,SAAS,qBAAqB;AAC7B,QAAM,UAAU,oBAAoB;AACpC,QAAM,kBAAkB,SAAS,cAAe,IAAK,iBAAkB,GAAI;AAE3E,MAAK,iBAAkB;AACtB,WAAO;AAAA,EACR;AAEA,QAAM,KAAK,sBAAsB;AAEjC,WAAS,QAAS,EAAG;AAErB,SAAO;AACR;AAEA,SAAS,wBAAwB;AAChC,QAAM,KAAK,SAAS,cAAe,KAAM;AACzC,KAAG,MAAM,UAAU;AACnB,KAAG,aAAc,mBAAmB,EAAG;AAEvC,SAAO;AACR;;;ALrCO,SAAS,OAAO;AACtB,qBAAmB;AAEnB,mCAAe;AAAA,IACd,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AACH;;;AwBVA,KAAK;","names":["React","import_react","import_react","useIsPreviewMode","useIsRouteActive","validKeys","size","import_utils"]}
|
|
1
|
+
{"version":3,"sources":["../src/init.tsx","../src/components/elements-overlays.tsx","../src/components/element-overlay.tsx","../src/hooks/use-bind-react-props-to-element.ts","../src/hooks/use-floating-on-element.ts","../src/init-styles-renderer.ts","../src/styles-renderer/transformers/background-color-overlay-transformer.ts","../src/styles-renderer/transformers/background-transformer.ts","../src/styles-renderer/transformers/create-combine-array-transformer.ts","../src/styles-renderer/multi-props.ts","../src/styles-renderer/transformers/create-corner-sizes-transformer.ts","../src/styles-renderer/transformers/create-edge-sizes-transformer.ts","../src/styles-renderer/transformers/gap-transformer.ts","../src/styles-renderer/transformers/linked-dimensions-transformer.ts","../src/styles-renderer/transformers/primitive-transformer.ts","../src/styles-renderer/transformers/shadow-transformer.ts","../src/styles-renderer/transformers/size-transformer.ts","../src/styles-renderer/transformers/stroke-transformer.ts","../src/styles-renderer/transformers/index.ts","../src/styles-renderer/render.ts","../src/styles-renderer/get-styles-schema.ts","../src/styles-renderer/resolve.ts","../src/styles-renderer/enqueue-used-fonts.ts","../src/sync/enqueue-font.ts","../src/sync/get-canvas-iframe-body.ts","../src/index.ts"],"sourcesContent":["import { injectIntoTop } from '@elementor/editor';\n\nimport { ElementsOverlays } from './components/elements-overlays';\nimport { initStylesRenderer } from './init-styles-renderer';\n\nexport function init() {\n\tinitStylesRenderer();\n\n\tinjectIntoTop( {\n\t\tid: 'elements-overlays',\n\t\tcomponent: ElementsOverlays,\n\t} );\n}\n","import * as React from 'react';\nimport { useElementsDomRef, useSelectedElement } from '@elementor/editor-elements';\nimport {\n\t__privateUseIsPreviewMode as useIsPreviewMode,\n\t__privateUseIsRouteActive as useIsRouteActive,\n} from '@elementor/editor-v1-adapters';\n\nimport { ElementOverlay } from './element-overlay';\n\nexport function ElementsOverlays() {\n\tconst selected = useSelectedElement();\n\tconst domElements = useElementsDomRef();\n\n\tconst isPreviewMode = useIsPreviewMode();\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\n\tconst isActive = ! isPreviewMode && ! isKitRouteActive;\n\n\treturn (\n\t\tisActive &&\n\t\tdomElements.map( ( el ) => (\n\t\t\t<ElementOverlay\n\t\t\t\telement={ el }\n\t\t\t\tkey={ el.dataset.id }\n\t\t\t\tisSelected={ selected.element?.id === el.dataset.id }\n\t\t\t/>\n\t\t) )\n\t);\n}\n","import * as React from 'react';\nimport { Box, styled } from '@elementor/ui';\nimport { FloatingPortal, useHover, useInteractions } from '@floating-ui/react';\n\nimport { useBindReactPropsToElement } from '../hooks/use-bind-react-props-to-element';\nimport { useFloatingOnElement } from '../hooks/use-floating-on-element';\n\nexport const CANVAS_WRAPPER_ID = 'elementor-preview-responsive-wrapper';\n\ntype Props = {\n\telement: HTMLElement;\n\tisSelected: boolean;\n};\n\nconst OverlayBox = styled( Box, { shouldForwardProp: ( prop ) => prop !== 'isSelected' } )<\n\tPick< Props, 'isSelected' >\n>( ( { theme, isSelected } ) => ( {\n\toutline: `${ isSelected ? '2px' : '1px' } solid ${ theme.palette.primary.light }`,\n\toutlineOffset: isSelected ? '-2px' : '-1px',\n\tpointerEvents: 'none',\n} ) );\n\nexport function ElementOverlay( { element, isSelected }: Props ) {\n\tconst { context, floating, isVisible } = useFloatingOnElement( { element, isSelected } );\n\tconst { getFloatingProps, getReferenceProps } = useInteractions( [ useHover( context ) ] );\n\n\tuseBindReactPropsToElement( element, getReferenceProps );\n\n\treturn (\n\t\tisVisible && (\n\t\t\t<FloatingPortal id={ CANVAS_WRAPPER_ID }>\n\t\t\t\t<OverlayBox\n\t\t\t\t\tref={ floating.setRef }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tstyle={ floating.styles }\n\t\t\t\t\tdata-element-overlay={ element.dataset.id }\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t{ ...getFloatingProps() }\n\t\t\t\t/>\n\t\t\t</FloatingPortal>\n\t\t)\n\t);\n}\n","import { useEffect } from 'react';\n\ntype Props = Record< string, unknown >;\n\nexport function useBindReactPropsToElement( element: HTMLElement, getProps: () => Props ) {\n\tuseEffect( () => {\n\t\tconst el = element;\n\n\t\tconst { events, attrs } = groupProps( getProps() );\n\n\t\tevents.forEach( ( [ eventName, listener ] ) => el.addEventListener( eventName, listener ) );\n\t\tattrs.forEach( ( [ attrName, attrValue ] ) => el.setAttribute( attrName, attrValue ) );\n\n\t\treturn () => {\n\t\t\tevents.forEach( ( [ eventName, listener ] ) => el.removeEventListener( eventName, listener ) );\n\t\t\tattrs.forEach( ( [ attrName ] ) => el.removeAttribute( attrName ) );\n\t\t};\n\t}, [ getProps, element ] );\n}\n\ntype GroupedProps = {\n\tevents: Array< [ string, () => void ] >;\n\tattrs: Array< [ string, string ] >;\n};\n\nfunction groupProps( props: Props ) {\n\tconst eventRegex = /^on(?=[A-Z])/;\n\n\treturn Object.entries( props ).reduce< GroupedProps >(\n\t\t( acc, [ propName, propValue ] ) => {\n\t\t\tif ( ! eventRegex.test( propName ) ) {\n\t\t\t\tacc.attrs.push( [ propName, propValue as string ] );\n\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tconst eventName = propName.replace( eventRegex, '' ).toLowerCase();\n\t\t\tconst listener = propValue as () => void;\n\n\t\t\tacc.events.push( [ eventName, listener ] );\n\n\t\t\treturn acc;\n\t\t},\n\t\t{\n\t\t\tevents: [],\n\t\t\tattrs: [],\n\t\t}\n\t);\n}\n","import { useState } from 'react';\nimport { autoUpdate, offset, size, useFloating } from '@floating-ui/react';\n\ntype Options = {\n\telement: HTMLElement;\n\tisSelected: boolean;\n};\n\nexport function useFloatingOnElement( { element, isSelected }: Options ) {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\n\tconst { refs, floatingStyles, context } = useFloating( {\n\t\t// Must be controlled for interactions (like hover) to work.\n\t\topen: isOpen || isSelected,\n\t\tonOpenChange: setIsOpen,\n\n\t\t// Add an animation frame to support scroll events (without it the floating element will stay in the same position).\n\t\twhileElementsMounted: ( ...args ) => autoUpdate( ...args, { animationFrame: true } ),\n\n\t\t// The first element in the canvas is `display: contents` so we need to use the first child.\n\t\telements: { reference: element.firstElementChild },\n\n\t\tmiddleware: [\n\t\t\t// Match the floating element's size to the reference element.\n\t\t\tsize( {\n\t\t\t\tapply( { elements, rects } ) {\n\t\t\t\t\tObject.assign( elements.floating.style, {\n\t\t\t\t\t\twidth: `${ rects.reference.width }px`,\n\t\t\t\t\t\theight: `${ rects.reference.height }px`,\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t} ),\n\n\t\t\t// Center the floating element on the reference element.\n\t\t\toffset( ( { rects } ) => -rects.reference.height / 2 - rects.floating.height / 2 ),\n\t\t],\n\t} );\n\n\treturn {\n\t\tisVisible: isOpen || isSelected,\n\t\tcontext,\n\t\tfloating: {\n\t\t\tsetRef: refs.setFloating,\n\t\t\tref: refs.floating,\n\t\t\tstyles: floatingStyles,\n\t\t},\n\t};\n}\n","import { getBreakpointsMap } from '@elementor/editor-responsive';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\n\nimport { render, transformers } from './styles-renderer';\nimport enqueueUsedFonts from './styles-renderer/enqueue-used-fonts';\nimport { getCanvasIframeBody } from './sync/get-canvas-iframe-body';\n\nconst WRAPPER_DATA_ATTR = 'data-styles-container';\n\nexport function initStylesRenderer() {\n\tstylesRepository.subscribe( () => {\n\t\tconst styleContainer = getStylesContainer();\n\t\tconst styles = stylesRepository.all();\n\t\tconst breakpoints = getBreakpointsMap();\n\n\t\tstyleContainer.innerHTML = render( { transformers, styles, breakpoints } );\n\n\t\tenqueueUsedFonts( styles );\n\t} );\n}\n\nfunction getStylesContainer() {\n\tconst preview = getCanvasIframeBody();\n\tconst stylesContainer = preview?.querySelector( `[${ WRAPPER_DATA_ATTR }]` );\n\n\tif ( stylesContainer ) {\n\t\treturn stylesContainer;\n\t}\n\n\tconst el = createStylesContainer();\n\n\tpreview?.prepend( el );\n\n\treturn el;\n}\n\nfunction createStylesContainer() {\n\tconst el = document.createElement( 'div' );\n\tel.style.display = 'none';\n\tel.setAttribute( WRAPPER_DATA_ATTR, '' );\n\n\treturn el;\n}\n","import { type BackgroundColorOverlayPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst backgroundColorOverlayTransformer: Transformer< BackgroundColorOverlayPropValue[ 'value' ] > = ( value ) => {\n\treturn `linear-gradient(${ value }, ${ value })`;\n};\n\nexport default backgroundColorOverlayTransformer;\n","import { type BackgroundPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst backgroundTransformer: Transformer< BackgroundPropValue[ 'value' ] > = ( value ) => {\n\tconst overlays = value[ 'background-overlay' ] ?? '';\n\tconst color = value.color ?? '';\n\n\treturn `${ overlays } ${ color }`.trim();\n};\n\nexport default backgroundTransformer;\n","import { type Transformer } from '../types';\n\ntype CreateCombineArrayTransformer = ( delimiter: string ) => Transformer< Array< string | number > >;\n\nconst createCombineArrayTransformer: CreateCombineArrayTransformer = ( delimiter ) => {\n\treturn ( value ) => value.filter( Boolean ).join( delimiter );\n};\n\nexport default createCombineArrayTransformer;\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nexport type MultiProps = {\n\t'$$multi-props': true;\n\tvalue: Props;\n};\n\nexport const isMultiProps = ( propValue: PropValue ): propValue is MultiProps => {\n\treturn (\n\t\t!! propValue &&\n\t\ttypeof propValue === 'object' &&\n\t\t'$$multi-props' in propValue &&\n\t\tpropValue[ '$$multi-props' ] === true\n\t);\n};\n\nexport const createMultiPropsValue = ( props: Props ): MultiProps => {\n\treturn {\n\t\t'$$multi-props': true,\n\t\tvalue: props,\n\t};\n};\n\nexport const getMultiPropsValue = ( multiProps: MultiProps ): Props => {\n\treturn multiProps.value;\n};\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nexport type CornerSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\nexport type CreateCornerSizesTransformer = (\n\tkeyGenerator: ( cornerKey: string ) => string\n) => Transformer< CornerSizes >;\n\nconst validCorners = [ 'top-left', 'top-right', 'bottom-left', 'bottom-right' ];\n\nconst createCornerSizesTransformer: CreateCornerSizesTransformer = ( keyGenerator ) => ( value ) => {\n\tconst props = Object.entries( value ).reduce< Props >( ( acc, [ corner, cornerValue ] ) => {\n\t\tif ( validCorners.includes( corner ) ) {\n\t\t\tconst key = keyGenerator( corner );\n\n\t\t\tacc[ key ] = cornerValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( props );\n};\n\nexport default createCornerSizesTransformer;\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nexport type EdgeSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\nexport type CreateEdgeSizesTransformer = ( keyGenerator: ( edgeKey: string ) => string ) => Transformer< EdgeSizes >;\n\nconst validEdges = [ 'top', 'right', 'bottom', 'left' ];\n\nconst createEdgeSizesTransformer: CreateEdgeSizesTransformer = ( keyGenerator ) => ( value ) => {\n\tconst props = Object.entries( value ).reduce< Props >( ( acc, [ edge, edgeValue ] ) => {\n\t\tif ( validEdges.includes( edge ) ) {\n\t\t\tconst key = keyGenerator( edge );\n\n\t\t\tacc[ key ] = edgeValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( props );\n};\n\nexport default createEdgeSizesTransformer;\n","import { type GapPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'row', 'column' ];\n\nconst gapTransformer: Transformer< GapPropValue[ 'value' ] > = ( value, key ) => {\n\tconst parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {\n\t\tif ( dimensionValue && validKeys.includes( dimensionKey ) ) {\n\t\t\tacc[ `${ dimensionKey }-${ key }` ] = dimensionValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default gapTransformer;\n","import { type LinkedDimensionsPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'top', 'right', 'bottom', 'left' ];\n\nconst linkedDimensionsTransformer: Transformer< LinkedDimensionsPropValue[ 'value' ] > = ( value, key ) => {\n\tconst parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {\n\t\tif ( dimensionValue && validKeys.includes( dimensionKey ) ) {\n\t\t\tacc[ `${ key }-${ dimensionKey }` ] = dimensionValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default linkedDimensionsTransformer;\n","import { type Transformer } from '../types';\n\ntype Primitive = string | number | boolean;\n\nexport const primitiveTransformer: Transformer< Primitive > = ( value ) => {\n\treturn value;\n};\n","import { type ShadowPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst shadowTransformer: Transformer< ShadowPropValue[ 'value' ] > = ( value ) => {\n\treturn [ value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position ]\n\t\t.filter( Boolean )\n\t\t.join( ' ' );\n};\n\nexport default shadowTransformer;\n","import { type SizePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst sizeTransformer: Transformer< SizePropValue[ 'value' ] > = ( value ) => {\n\treturn `${ value.size }${ value.unit }`;\n};\n\nexport default sizeTransformer;\n","import { type StrokePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst strokeTransformer: Transformer< StrokePropValue[ 'value' ] > = ( value ) => {\n\treturn `${ value.width } ${ value.color }`;\n};\n\nexport default strokeTransformer;\n","import { type TransformersMap } from '../types';\nimport backgroundColorOverlayTransformer from './background-color-overlay-transformer';\nimport { default as background } from './background-transformer';\nimport { default as createCombineArrayTransformer } from './create-combine-array-transformer';\nimport createCornerSizesTransformer from './create-corner-sizes-transformer';\nimport createEdgeSizesTransformer from './create-edge-sizes-transformer';\nimport { default as gap } from './gap-transformer';\nimport { default as linkedDimensions } from './linked-dimensions-transformer';\nimport { primitiveTransformer } from './primitive-transformer';\nimport { default as shadow } from './shadow-transformer';\nimport { default as size } from './size-transformer';\nimport { default as stroke } from './stroke-transformer';\n\nexport default {\n\tsize,\n\tshadow,\n\tstroke,\n\tgap,\n\tbackground,\n\n\tcolor: primitiveTransformer,\n\tnumber: primitiveTransformer,\n\tstring: primitiveTransformer,\n\n\t'linked-dimensions': linkedDimensions,\n\t'background-color-overlay': backgroundColorOverlayTransformer,\n\t'background-overlay': createCombineArrayTransformer( ',' ),\n\n\t'box-shadow': createCombineArrayTransformer( ',' ),\n\n\t'border-width': createEdgeSizesTransformer( ( edgeKey ) => `border-${ edgeKey }-width` ),\n\t'border-radius': createCornerSizesTransformer( ( cornerKey ) => `border-${ cornerKey }-radius` ),\n} satisfies TransformersMap;\n","import { type Props } from '@elementor/editor-props';\nimport { type Breakpoint, type BreakpointId, type BreakpointsMap } from '@elementor/editor-responsive';\nimport { type StyleDefinition, type StyleVariant } from '@elementor/editor-styles';\nimport { ensureError } from '@elementor/utils';\n\nimport { getStylesSchema } from './get-styles-schema';\nimport { resolve } from './resolve';\nimport { type TransformersMap } from './types';\n\ntype RenderParams = {\n\ttransformers: TransformersMap;\n\tstyles: StyleDefinition[];\n\tbreakpoints: BreakpointsMap;\n};\n\nexport default function render( { transformers, styles, breakpoints }: RenderParams ) {\n\tconst cssStyle: string[] = [];\n\n\ttry {\n\t\tstyles.forEach( ( styleDef ) => {\n\t\t\tconst style = renderStyle( styleDef, transformers, breakpoints );\n\n\t\t\tcssStyle.push( wrapWithStyleElement( styleDef.id, style ) );\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( `Cannot render style': ${ ensureError( error ).message }` );\n\t}\n\n\treturn cssStyle.join( '' );\n}\n\nfunction renderStyle( style: StyleDefinition, transformers: TransformersMap, breakpoints: BreakpointsMap ) {\n\tconst baseSelector = getBaseSelector( style );\n\n\tif ( ! baseSelector ) {\n\t\treturn '';\n\t}\n\n\tconst stylesheet: string[] = [];\n\n\tObject.values( style.variants ).forEach( ( variant ) => {\n\t\tconst styleDeclaration = variantToStyleDeclaration( baseSelector, variant, transformers, breakpoints );\n\n\t\tif ( styleDeclaration ) {\n\t\t\tstylesheet.push( styleDeclaration );\n\t\t}\n\t} );\n\n\treturn stylesheet.join( '' );\n}\n\nfunction getBaseSelector( styleDef: StyleDefinition ) {\n\tconst map = {\n\t\tclass: '.',\n\t};\n\n\treturn `${ map[ styleDef.type ] }${ styleDef.id }`;\n}\n\nfunction variantToStyleDeclaration(\n\tbaseSelector: string,\n\tvariant: StyleVariant,\n\ttransformers: TransformersMap,\n\tbreakpoints: BreakpointsMap\n) {\n\tconst css = propsToCss( variant.props, transformers );\n\n\tif ( ! css ) {\n\t\treturn '';\n\t}\n\n\tconst state = variant.meta.state ? `:${ variant.meta.state }` : '';\n\tconst selector = `${ baseSelector }${ state }`;\n\n\tlet styleDeclaration = `${ selector }{${ css }}`;\n\n\tif ( variant.meta.breakpoint ) {\n\t\tstyleDeclaration = wrapWithMediaQuery( breakpoints, variant.meta.breakpoint, styleDeclaration );\n\t}\n\n\treturn styleDeclaration;\n}\n\nfunction propsToCss( props: Props, transformers: TransformersMap ): string {\n\tconst schema = getStylesSchema();\n\n\tconst transformed = resolve( { props, schema, transformers } );\n\n\treturn Object.entries( transformed )\n\t\t.reduce< string[] >( ( acc, [ propName, propValue ] ) => {\n\t\t\tacc.push( propName + ':' + propValue + ';' );\n\n\t\t\treturn acc;\n\t\t}, [] )\n\t\t.join( '' );\n}\n\nfunction wrapWithMediaQuery( breakpoints: BreakpointsMap, breakpoint: BreakpointId, css: string ) {\n\tconst size = getBreakpointSize( breakpoints[ breakpoint ] );\n\treturn size ? `@media(${ size }){${ css }}` : css;\n}\n\nfunction getBreakpointSize( breakpoint: Breakpoint ) {\n\treturn breakpoint.type ? `${ breakpoint.type }:${ breakpoint.width }px` : null;\n}\n\nfunction wrapWithStyleElement( id: string, content: string ) {\n\treturn `<style data-style-id=\"${ id }\">${ content }</style>`;\n}\n","import { type PropKey, type PropType } from '@elementor/editor-props';\n\ntype ExtendedWindow = Window & {\n\telementor?: {\n\t\tconfig?: {\n\t\t\tatomic?: {\n\t\t\t\tstyles_schema?: Record< PropKey, PropType >;\n\t\t\t};\n\t\t};\n\t};\n};\n\nexport const getStylesSchema = () => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.config?.atomic?.styles_schema ?? {};\n};\n","import { type PropsSchema } from '@elementor/editor-elements';\nimport { isTransformable, type PropKey, type Props, type PropType, type PropValue } from '@elementor/editor-props';\n\nimport { getMultiPropsValue, isMultiProps } from './multi-props';\nimport { type TransformersMap } from './types';\n\nconst TRANSFORM_DEPTH_LIMIT = 3;\n\ntype ResolveArgs = {\n\tprops: Props;\n\tschema: PropsSchema;\n\ttransformers: TransformersMap;\n};\n\nexport function resolve( { props, schema, transformers }: ResolveArgs ) {\n\tconst resolved: Props = {};\n\n\tObject.entries( schema ).forEach( ( [ key, propType ] ) => {\n\t\tconst value = props[ key ] ?? propType.default;\n\n\t\tconst transformed = transform( value, key, propType, transformers );\n\n\t\tif ( transformed === null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isMultiProps( transformed ) ) {\n\t\t\tObject.assign( resolved, getMultiPropsValue( transformed ) );\n\t\t\treturn;\n\t\t}\n\n\t\tresolved[ key ] = transformed;\n\t} );\n\n\treturn resolved;\n}\n\nfunction transform(\n\tvalue: PropValue,\n\tpropKey: PropKey,\n\tpropType: PropType,\n\ttransformers: TransformersMap,\n\tdepth: number = 0\n) {\n\tif ( ! value && value !== 0 ) {\n\t\treturn null;\n\t}\n\n\tif ( ! isTransformable( value ) ) {\n\t\treturn value;\n\t}\n\n\tif ( depth > TRANSFORM_DEPTH_LIMIT ) {\n\t\treturn null;\n\t}\n\n\tif ( value.disabled === true ) {\n\t\treturn null;\n\t}\n\n\tif ( propType.kind === 'union' ) {\n\t\tpropType = propType.prop_types[ value.$$type ];\n\n\t\tif ( ! propType ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Warning: This variable is loosely-typed - use with caution.\n\tlet resolvedValue = value.value;\n\n\tif ( propType.kind === 'object' ) {\n\t\tresolvedValue = resolve( {\n\t\t\ttransformers,\n\t\t\tprops: resolvedValue,\n\t\t\tschema: propType.shape,\n\t\t} );\n\t}\n\n\tif ( propType.kind === 'array' ) {\n\t\tresolvedValue = resolvedValue.map( ( item: PropValue ) =>\n\t\t\ttransform( item, propKey, propType.item_prop_type, transformers, depth )\n\t\t);\n\t}\n\n\tconst transformer = transformers[ value.$$type ];\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst transformed = transformer( resolvedValue, propKey );\n\n\t\treturn transform( transformed, propKey, propType, transformers, depth + 1 );\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import { type StyleDefinition } from '@elementor/editor-styles';\nimport { ensureError } from '@elementor/utils';\n\nimport { enqueueFont } from '../sync/enqueue-font';\n\nexport default function enqueueUsedFonts( styles: StyleDefinition[] ) {\n\ttry {\n\t\tstyles.forEach( ( styleDef ) => {\n\t\t\tObject.values( styleDef.variants ).forEach( ( variant ) => {\n\t\t\t\tconst fontFamily = variant.props[ 'font-family' ] ?? null;\n\n\t\t\t\tif ( fontFamily && typeof fontFamily === 'string' ) {\n\t\t\t\t\tenqueueFont( fontFamily );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( `Cannot enqueue font': ${ ensureError( error ).message }` );\n\t}\n}\n","import { type CanvasExtendedWindow, type EnqueueFont } from './types';\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n","import type { CanvasExtendedWindow } from './types';\n\nexport function getCanvasIframeBody() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.$preview?.[ 0 ]?.contentDocument?.body;\n}\n","import { init } from './init';\n\ninit();\n"],"mappings":"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","names":["React","import_react","import_react","useIsPreviewMode","useIsRouteActive","validKeys","size","import_utils"]}
|
package/dist/index.mjs
CHANGED
|
@@ -131,11 +131,19 @@ function ElementsOverlays() {
|
|
|
131
131
|
import { getBreakpointsMap } from "@elementor/editor-responsive";
|
|
132
132
|
import { stylesRepository } from "@elementor/editor-styles-repository";
|
|
133
133
|
|
|
134
|
-
// src/styles-renderer/transformers/background-overlay-transformer.ts
|
|
135
|
-
var
|
|
136
|
-
return `linear-gradient(${value
|
|
134
|
+
// src/styles-renderer/transformers/background-color-overlay-transformer.ts
|
|
135
|
+
var backgroundColorOverlayTransformer = (value) => {
|
|
136
|
+
return `linear-gradient(${value}, ${value})`;
|
|
137
137
|
};
|
|
138
|
-
var
|
|
138
|
+
var background_color_overlay_transformer_default = backgroundColorOverlayTransformer;
|
|
139
|
+
|
|
140
|
+
// src/styles-renderer/transformers/background-transformer.ts
|
|
141
|
+
var backgroundTransformer = (value) => {
|
|
142
|
+
const overlays = value["background-overlay"] ?? "";
|
|
143
|
+
const color = value.color ?? "";
|
|
144
|
+
return `${overlays} ${color}`.trim();
|
|
145
|
+
};
|
|
146
|
+
var background_transformer_default = backgroundTransformer;
|
|
139
147
|
|
|
140
148
|
// src/styles-renderer/transformers/create-combine-array-transformer.ts
|
|
141
149
|
var createCombineArrayTransformer = (delimiter) => {
|
|
@@ -240,13 +248,14 @@ var transformers_default = {
|
|
|
240
248
|
shadow: shadow_transformer_default,
|
|
241
249
|
stroke: stroke_transformer_default,
|
|
242
250
|
gap: gap_transformer_default,
|
|
251
|
+
background: background_transformer_default,
|
|
243
252
|
color: primitiveTransformer,
|
|
244
253
|
number: primitiveTransformer,
|
|
245
254
|
string: primitiveTransformer,
|
|
246
255
|
"linked-dimensions": linked_dimensions_transformer_default,
|
|
247
|
-
"background-overlay":
|
|
256
|
+
"background-color-overlay": background_color_overlay_transformer_default,
|
|
257
|
+
"background-overlay": create_combine_array_transformer_default(","),
|
|
248
258
|
"box-shadow": create_combine_array_transformer_default(","),
|
|
249
|
-
"background-image": create_combine_array_transformer_default(","),
|
|
250
259
|
"border-width": create_edge_sizes_transformer_default((edgeKey) => `border-${edgeKey}-width`),
|
|
251
260
|
"border-radius": create_corner_sizes_transformer_default((cornerKey) => `border-${cornerKey}-radius`)
|
|
252
261
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/init.tsx","../src/components/elements-overlays.tsx","../src/components/element-overlay.tsx","../src/hooks/use-bind-react-props-to-element.ts","../src/hooks/use-floating-on-element.ts","../src/init-styles-renderer.ts","../src/styles-renderer/transformers/background-overlay-transformer.ts","../src/styles-renderer/transformers/create-combine-array-transformer.ts","../src/styles-renderer/multi-props.ts","../src/styles-renderer/transformers/create-corner-sizes-transformer.ts","../src/styles-renderer/transformers/create-edge-sizes-transformer.ts","../src/styles-renderer/transformers/gap-transformer.ts","../src/styles-renderer/transformers/linked-dimensions-transformer.ts","../src/styles-renderer/transformers/primitive-transformer.ts","../src/styles-renderer/transformers/shadow-transformer.ts","../src/styles-renderer/transformers/size-transformer.ts","../src/styles-renderer/transformers/stroke-transformer.ts","../src/styles-renderer/transformers/index.ts","../src/styles-renderer/render.ts","../src/styles-renderer/get-styles-schema.ts","../src/styles-renderer/resolve.ts","../src/styles-renderer/enqueue-used-fonts.ts","../src/sync/enqueue-font.ts","../src/sync/get-canvas-iframe-body.ts","../src/index.ts"],"sourcesContent":["import { injectIntoTop } from '@elementor/editor';\n\nimport { ElementsOverlays } from './components/elements-overlays';\nimport { initStylesRenderer } from './init-styles-renderer';\n\nexport function init() {\n\tinitStylesRenderer();\n\n\tinjectIntoTop( {\n\t\tid: 'elements-overlays',\n\t\tcomponent: ElementsOverlays,\n\t} );\n}\n","import * as React from 'react';\nimport { useElementsDomRef, useSelectedElement } from '@elementor/editor-elements';\nimport {\n\t__privateUseIsPreviewMode as useIsPreviewMode,\n\t__privateUseIsRouteActive as useIsRouteActive,\n} from '@elementor/editor-v1-adapters';\n\nimport { ElementOverlay } from './element-overlay';\n\nexport function ElementsOverlays() {\n\tconst selected = useSelectedElement();\n\tconst domElements = useElementsDomRef();\n\n\tconst isPreviewMode = useIsPreviewMode();\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\n\tconst isActive = ! isPreviewMode && ! isKitRouteActive;\n\n\treturn (\n\t\tisActive &&\n\t\tdomElements.map( ( el ) => (\n\t\t\t<ElementOverlay\n\t\t\t\telement={ el }\n\t\t\t\tkey={ el.dataset.id }\n\t\t\t\tisSelected={ selected.element?.id === el.dataset.id }\n\t\t\t/>\n\t\t) )\n\t);\n}\n","import * as React from 'react';\nimport { Box, styled } from '@elementor/ui';\nimport { FloatingPortal, useHover, useInteractions } from '@floating-ui/react';\n\nimport { useBindReactPropsToElement } from '../hooks/use-bind-react-props-to-element';\nimport { useFloatingOnElement } from '../hooks/use-floating-on-element';\n\nexport const CANVAS_WRAPPER_ID = 'elementor-preview-responsive-wrapper';\n\ntype Props = {\n\telement: HTMLElement;\n\tisSelected: boolean;\n};\n\nconst OverlayBox = styled( Box, { shouldForwardProp: ( prop ) => prop !== 'isSelected' } )<\n\tPick< Props, 'isSelected' >\n>( ( { theme, isSelected } ) => ( {\n\toutline: `${ isSelected ? '2px' : '1px' } solid ${ theme.palette.primary.light }`,\n\toutlineOffset: isSelected ? '-2px' : '-1px',\n\tpointerEvents: 'none',\n} ) );\n\nexport function ElementOverlay( { element, isSelected }: Props ) {\n\tconst { context, floating, isVisible } = useFloatingOnElement( { element, isSelected } );\n\tconst { getFloatingProps, getReferenceProps } = useInteractions( [ useHover( context ) ] );\n\n\tuseBindReactPropsToElement( element, getReferenceProps );\n\n\treturn (\n\t\tisVisible && (\n\t\t\t<FloatingPortal id={ CANVAS_WRAPPER_ID }>\n\t\t\t\t<OverlayBox\n\t\t\t\t\tref={ floating.setRef }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tstyle={ floating.styles }\n\t\t\t\t\tdata-element-overlay={ element.dataset.id }\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t{ ...getFloatingProps() }\n\t\t\t\t/>\n\t\t\t</FloatingPortal>\n\t\t)\n\t);\n}\n","import { useEffect } from 'react';\n\ntype Props = Record< string, unknown >;\n\nexport function useBindReactPropsToElement( element: HTMLElement, getProps: () => Props ) {\n\tuseEffect( () => {\n\t\tconst el = element;\n\n\t\tconst { events, attrs } = groupProps( getProps() );\n\n\t\tevents.forEach( ( [ eventName, listener ] ) => el.addEventListener( eventName, listener ) );\n\t\tattrs.forEach( ( [ attrName, attrValue ] ) => el.setAttribute( attrName, attrValue ) );\n\n\t\treturn () => {\n\t\t\tevents.forEach( ( [ eventName, listener ] ) => el.removeEventListener( eventName, listener ) );\n\t\t\tattrs.forEach( ( [ attrName ] ) => el.removeAttribute( attrName ) );\n\t\t};\n\t}, [ getProps, element ] );\n}\n\ntype GroupedProps = {\n\tevents: Array< [ string, () => void ] >;\n\tattrs: Array< [ string, string ] >;\n};\n\nfunction groupProps( props: Props ) {\n\tconst eventRegex = /^on(?=[A-Z])/;\n\n\treturn Object.entries( props ).reduce< GroupedProps >(\n\t\t( acc, [ propName, propValue ] ) => {\n\t\t\tif ( ! eventRegex.test( propName ) ) {\n\t\t\t\tacc.attrs.push( [ propName, propValue as string ] );\n\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tconst eventName = propName.replace( eventRegex, '' ).toLowerCase();\n\t\t\tconst listener = propValue as () => void;\n\n\t\t\tacc.events.push( [ eventName, listener ] );\n\n\t\t\treturn acc;\n\t\t},\n\t\t{\n\t\t\tevents: [],\n\t\t\tattrs: [],\n\t\t}\n\t);\n}\n","import { useState } from 'react';\nimport { autoUpdate, offset, size, useFloating } from '@floating-ui/react';\n\ntype Options = {\n\telement: HTMLElement;\n\tisSelected: boolean;\n};\n\nexport function useFloatingOnElement( { element, isSelected }: Options ) {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\n\tconst { refs, floatingStyles, context } = useFloating( {\n\t\t// Must be controlled for interactions (like hover) to work.\n\t\topen: isOpen || isSelected,\n\t\tonOpenChange: setIsOpen,\n\n\t\t// Add an animation frame to support scroll events (without it the floating element will stay in the same position).\n\t\twhileElementsMounted: ( ...args ) => autoUpdate( ...args, { animationFrame: true } ),\n\n\t\t// The first element in the canvas is `display: contents` so we need to use the first child.\n\t\telements: { reference: element.firstElementChild },\n\n\t\tmiddleware: [\n\t\t\t// Match the floating element's size to the reference element.\n\t\t\tsize( {\n\t\t\t\tapply( { elements, rects } ) {\n\t\t\t\t\tObject.assign( elements.floating.style, {\n\t\t\t\t\t\twidth: `${ rects.reference.width }px`,\n\t\t\t\t\t\theight: `${ rects.reference.height }px`,\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t} ),\n\n\t\t\t// Center the floating element on the reference element.\n\t\t\toffset( ( { rects } ) => -rects.reference.height / 2 - rects.floating.height / 2 ),\n\t\t],\n\t} );\n\n\treturn {\n\t\tisVisible: isOpen || isSelected,\n\t\tcontext,\n\t\tfloating: {\n\t\t\tsetRef: refs.setFloating,\n\t\t\tref: refs.floating,\n\t\t\tstyles: floatingStyles,\n\t\t},\n\t};\n}\n","import { getBreakpointsMap } from '@elementor/editor-responsive';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\n\nimport { render, transformers } from './styles-renderer';\nimport enqueueUsedFonts from './styles-renderer/enqueue-used-fonts';\nimport { getCanvasIframeBody } from './sync/get-canvas-iframe-body';\n\nconst WRAPPER_DATA_ATTR = 'data-styles-container';\n\nexport function initStylesRenderer() {\n\tstylesRepository.subscribe( () => {\n\t\tconst styleContainer = getStylesContainer();\n\t\tconst styles = stylesRepository.all();\n\t\tconst breakpoints = getBreakpointsMap();\n\n\t\tstyleContainer.innerHTML = render( { transformers, styles, breakpoints } );\n\n\t\tenqueueUsedFonts( styles );\n\t} );\n}\n\nfunction getStylesContainer() {\n\tconst preview = getCanvasIframeBody();\n\tconst stylesContainer = preview?.querySelector( `[${ WRAPPER_DATA_ATTR }]` );\n\n\tif ( stylesContainer ) {\n\t\treturn stylesContainer;\n\t}\n\n\tconst el = createStylesContainer();\n\n\tpreview?.prepend( el );\n\n\treturn el;\n}\n\nfunction createStylesContainer() {\n\tconst el = document.createElement( 'div' );\n\tel.style.display = 'none';\n\tel.setAttribute( WRAPPER_DATA_ATTR, '' );\n\n\treturn el;\n}\n","import { type ColorGradientPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst backgroundOverlayTransformer: Transformer< ColorGradientPropValue[ 'value' ] > = ( value ) => {\n\treturn `linear-gradient(${ value.color },${ value.color })`;\n};\n\nexport default backgroundOverlayTransformer;\n","import { type Transformer } from '../types';\n\ntype CreateCombineArrayTransformer = ( delimiter: string ) => Transformer< Array< string | number > >;\n\nconst createCombineArrayTransformer: CreateCombineArrayTransformer = ( delimiter ) => {\n\treturn ( value ) => value.filter( Boolean ).join( delimiter );\n};\n\nexport default createCombineArrayTransformer;\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nexport type MultiProps = {\n\t'$$multi-props': true;\n\tvalue: Props;\n};\n\nexport const isMultiProps = ( propValue: PropValue ): propValue is MultiProps => {\n\treturn (\n\t\t!! propValue &&\n\t\ttypeof propValue === 'object' &&\n\t\t'$$multi-props' in propValue &&\n\t\tpropValue[ '$$multi-props' ] === true\n\t);\n};\n\nexport const createMultiPropsValue = ( props: Props ): MultiProps => {\n\treturn {\n\t\t'$$multi-props': true,\n\t\tvalue: props,\n\t};\n};\n\nexport const getMultiPropsValue = ( multiProps: MultiProps ): Props => {\n\treturn multiProps.value;\n};\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nexport type CornerSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\nexport type CreateCornerSizesTransformer = (\n\tkeyGenerator: ( cornerKey: string ) => string\n) => Transformer< CornerSizes >;\n\nconst validCorners = [ 'top-left', 'top-right', 'bottom-left', 'bottom-right' ];\n\nconst createCornerSizesTransformer: CreateCornerSizesTransformer = ( keyGenerator ) => ( value ) => {\n\tconst props = Object.entries( value ).reduce< Props >( ( acc, [ corner, cornerValue ] ) => {\n\t\tif ( validCorners.includes( corner ) ) {\n\t\t\tconst key = keyGenerator( corner );\n\n\t\t\tacc[ key ] = cornerValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( props );\n};\n\nexport default createCornerSizesTransformer;\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nexport type EdgeSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\nexport type CreateEdgeSizesTransformer = ( keyGenerator: ( edgeKey: string ) => string ) => Transformer< EdgeSizes >;\n\nconst validEdges = [ 'top', 'right', 'bottom', 'left' ];\n\nconst createEdgeSizesTransformer: CreateEdgeSizesTransformer = ( keyGenerator ) => ( value ) => {\n\tconst props = Object.entries( value ).reduce< Props >( ( acc, [ edge, edgeValue ] ) => {\n\t\tif ( validEdges.includes( edge ) ) {\n\t\t\tconst key = keyGenerator( edge );\n\n\t\t\tacc[ key ] = edgeValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( props );\n};\n\nexport default createEdgeSizesTransformer;\n","import { type GapPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'row', 'column' ];\n\nconst gapTransformer: Transformer< GapPropValue[ 'value' ] > = ( value, key ) => {\n\tconst parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {\n\t\tif ( dimensionValue && validKeys.includes( dimensionKey ) ) {\n\t\t\tacc[ `${ dimensionKey }-${ key }` ] = dimensionValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default gapTransformer;\n","import { type LinkedDimensionsPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'top', 'right', 'bottom', 'left' ];\n\nconst linkedDimensionsTransformer: Transformer< LinkedDimensionsPropValue[ 'value' ] > = ( value, key ) => {\n\tconst parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {\n\t\tif ( dimensionValue && validKeys.includes( dimensionKey ) ) {\n\t\t\tacc[ `${ key }-${ dimensionKey }` ] = dimensionValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default linkedDimensionsTransformer;\n","import { type Transformer } from '../types';\n\ntype Primitive = string | number | boolean;\n\nexport const primitiveTransformer: Transformer< Primitive > = ( value ) => {\n\treturn value;\n};\n","import { type ShadowPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst shadowTransformer: Transformer< ShadowPropValue[ 'value' ] > = ( value ) => {\n\treturn [ value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position ]\n\t\t.filter( Boolean )\n\t\t.join( ' ' );\n};\n\nexport default shadowTransformer;\n","import { type SizePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst sizeTransformer: Transformer< SizePropValue[ 'value' ] > = ( value ) => {\n\treturn `${ value.size }${ value.unit }`;\n};\n\nexport default sizeTransformer;\n","import { type StrokePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst strokeTransformer: Transformer< StrokePropValue[ 'value' ] > = ( value ) => {\n\treturn `${ value.width } ${ value.color }`;\n};\n\nexport default strokeTransformer;\n","import { type TransformersMap } from '../types';\nimport { default as backgroundOverlay } from './background-overlay-transformer';\nimport { default as createCombineArrayTransformer } from './create-combine-array-transformer';\nimport createCornerSizesTransformer from './create-corner-sizes-transformer';\nimport createEdgeSizesTransformer from './create-edge-sizes-transformer';\nimport { default as gap } from './gap-transformer';\nimport { default as linkedDimensions } from './linked-dimensions-transformer';\nimport { primitiveTransformer } from './primitive-transformer';\nimport { default as shadow } from './shadow-transformer';\nimport { default as size } from './size-transformer';\nimport { default as stroke } from './stroke-transformer';\n\nexport default {\n\tsize,\n\tshadow,\n\tstroke,\n\tgap,\n\n\tcolor: primitiveTransformer,\n\tnumber: primitiveTransformer,\n\tstring: primitiveTransformer,\n\n\t'linked-dimensions': linkedDimensions,\n\t'background-overlay': backgroundOverlay,\n\n\t'box-shadow': createCombineArrayTransformer( ',' ),\n\t'background-image': createCombineArrayTransformer( ',' ),\n\n\t'border-width': createEdgeSizesTransformer( ( edgeKey ) => `border-${ edgeKey }-width` ),\n\t'border-radius': createCornerSizesTransformer( ( cornerKey ) => `border-${ cornerKey }-radius` ),\n} satisfies TransformersMap;\n","import { type Props } from '@elementor/editor-props';\nimport { type Breakpoint, type BreakpointId, type BreakpointsMap } from '@elementor/editor-responsive';\nimport { type StyleDefinition, type StyleVariant } from '@elementor/editor-styles';\nimport { ensureError } from '@elementor/utils';\n\nimport { getStylesSchema } from './get-styles-schema';\nimport { resolve } from './resolve';\nimport { type TransformersMap } from './types';\n\ntype RenderParams = {\n\ttransformers: TransformersMap;\n\tstyles: StyleDefinition[];\n\tbreakpoints: BreakpointsMap;\n};\n\nexport default function render( { transformers, styles, breakpoints }: RenderParams ) {\n\tconst cssStyle: string[] = [];\n\n\ttry {\n\t\tstyles.forEach( ( styleDef ) => {\n\t\t\tconst style = renderStyle( styleDef, transformers, breakpoints );\n\n\t\t\tcssStyle.push( wrapWithStyleElement( styleDef.id, style ) );\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( `Cannot render style': ${ ensureError( error ).message }` );\n\t}\n\n\treturn cssStyle.join( '' );\n}\n\nfunction renderStyle( style: StyleDefinition, transformers: TransformersMap, breakpoints: BreakpointsMap ) {\n\tconst baseSelector = getBaseSelector( style );\n\n\tif ( ! baseSelector ) {\n\t\treturn '';\n\t}\n\n\tconst stylesheet: string[] = [];\n\n\tObject.values( style.variants ).forEach( ( variant ) => {\n\t\tconst styleDeclaration = variantToStyleDeclaration( baseSelector, variant, transformers, breakpoints );\n\n\t\tif ( styleDeclaration ) {\n\t\t\tstylesheet.push( styleDeclaration );\n\t\t}\n\t} );\n\n\treturn stylesheet.join( '' );\n}\n\nfunction getBaseSelector( styleDef: StyleDefinition ) {\n\tconst map = {\n\t\tclass: '.',\n\t};\n\n\treturn `${ map[ styleDef.type ] }${ styleDef.id }`;\n}\n\nfunction variantToStyleDeclaration(\n\tbaseSelector: string,\n\tvariant: StyleVariant,\n\ttransformers: TransformersMap,\n\tbreakpoints: BreakpointsMap\n) {\n\tconst css = propsToCss( variant.props, transformers );\n\n\tif ( ! css ) {\n\t\treturn '';\n\t}\n\n\tconst state = variant.meta.state ? `:${ variant.meta.state }` : '';\n\tconst selector = `${ baseSelector }${ state }`;\n\n\tlet styleDeclaration = `${ selector }{${ css }}`;\n\n\tif ( variant.meta.breakpoint ) {\n\t\tstyleDeclaration = wrapWithMediaQuery( breakpoints, variant.meta.breakpoint, styleDeclaration );\n\t}\n\n\treturn styleDeclaration;\n}\n\nfunction propsToCss( props: Props, transformers: TransformersMap ): string {\n\tconst schema = getStylesSchema();\n\n\tconst transformed = resolve( { props, schema, transformers } );\n\n\treturn Object.entries( transformed )\n\t\t.reduce< string[] >( ( acc, [ propName, propValue ] ) => {\n\t\t\tacc.push( propName + ':' + propValue + ';' );\n\n\t\t\treturn acc;\n\t\t}, [] )\n\t\t.join( '' );\n}\n\nfunction wrapWithMediaQuery( breakpoints: BreakpointsMap, breakpoint: BreakpointId, css: string ) {\n\tconst size = getBreakpointSize( breakpoints[ breakpoint ] );\n\treturn size ? `@media(${ size }){${ css }}` : css;\n}\n\nfunction getBreakpointSize( breakpoint: Breakpoint ) {\n\treturn breakpoint.type ? `${ breakpoint.type }:${ breakpoint.width }px` : null;\n}\n\nfunction wrapWithStyleElement( id: string, content: string ) {\n\treturn `<style data-style-id=\"${ id }\">${ content }</style>`;\n}\n","import { type PropKey, type PropType } from '@elementor/editor-props';\n\ntype ExtendedWindow = Window & {\n\telementor?: {\n\t\tconfig?: {\n\t\t\tatomic?: {\n\t\t\t\tstyles_schema?: Record< PropKey, PropType >;\n\t\t\t};\n\t\t};\n\t};\n};\n\nexport const getStylesSchema = () => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.config?.atomic?.styles_schema ?? {};\n};\n","import { type PropsSchema } from '@elementor/editor-elements';\nimport { isTransformable, type PropKey, type Props, type PropType, type PropValue } from '@elementor/editor-props';\n\nimport { getMultiPropsValue, isMultiProps } from './multi-props';\nimport { type TransformersMap } from './types';\n\nconst TRANSFORM_DEPTH_LIMIT = 3;\n\ntype ResolveArgs = {\n\tprops: Props;\n\tschema: PropsSchema;\n\ttransformers: TransformersMap;\n};\n\nexport function resolve( { props, schema, transformers }: ResolveArgs ) {\n\tconst resolved: Props = {};\n\n\tObject.entries( schema ).forEach( ( [ key, propType ] ) => {\n\t\tconst value = props[ key ] ?? propType.default;\n\n\t\tconst transformed = transform( value, key, propType, transformers );\n\n\t\tif ( transformed === null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isMultiProps( transformed ) ) {\n\t\t\tObject.assign( resolved, getMultiPropsValue( transformed ) );\n\t\t\treturn;\n\t\t}\n\n\t\tresolved[ key ] = transformed;\n\t} );\n\n\treturn resolved;\n}\n\nfunction transform(\n\tvalue: PropValue,\n\tpropKey: PropKey,\n\tpropType: PropType,\n\ttransformers: TransformersMap,\n\tdepth: number = 0\n) {\n\tif ( ! value && value !== 0 ) {\n\t\treturn null;\n\t}\n\n\tif ( ! isTransformable( value ) ) {\n\t\treturn value;\n\t}\n\n\tif ( depth > TRANSFORM_DEPTH_LIMIT ) {\n\t\treturn null;\n\t}\n\n\tif ( value.disabled === true ) {\n\t\treturn null;\n\t}\n\n\tif ( propType.kind === 'union' ) {\n\t\tpropType = propType.prop_types[ value.$$type ];\n\n\t\tif ( ! propType ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Warning: This variable is loosely-typed - use with caution.\n\tlet resolvedValue = value.value;\n\n\tif ( propType.kind === 'object' ) {\n\t\tresolvedValue = resolve( {\n\t\t\ttransformers,\n\t\t\tprops: resolvedValue,\n\t\t\tschema: propType.shape,\n\t\t} );\n\t}\n\n\tif ( propType.kind === 'array' ) {\n\t\tresolvedValue = resolvedValue.map( ( item: PropValue ) =>\n\t\t\ttransform( item, propKey, propType.item_prop_type, transformers, depth )\n\t\t);\n\t}\n\n\tconst transformer = transformers[ value.$$type ];\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst transformed = transformer( resolvedValue, propKey );\n\n\t\treturn transform( transformed, propKey, propType, transformers, depth + 1 );\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import { type StyleDefinition } from '@elementor/editor-styles';\nimport { ensureError } from '@elementor/utils';\n\nimport { enqueueFont } from '../sync/enqueue-font';\n\nexport default function enqueueUsedFonts( styles: StyleDefinition[] ) {\n\ttry {\n\t\tstyles.forEach( ( styleDef ) => {\n\t\t\tObject.values( styleDef.variants ).forEach( ( variant ) => {\n\t\t\t\tconst fontFamily = variant.props[ 'font-family' ] ?? null;\n\n\t\t\t\tif ( fontFamily && typeof fontFamily === 'string' ) {\n\t\t\t\t\tenqueueFont( fontFamily );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( `Cannot enqueue font': ${ ensureError( error ).message }` );\n\t}\n}\n","import { type CanvasExtendedWindow, type EnqueueFont } from './types';\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n","import type { CanvasExtendedWindow } from './types';\n\nexport function getCanvasIframeBody() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.$preview?.[ 0 ]?.contentDocument?.body;\n}\n","import { init } from './init';\n\ninit();\n"],"mappings":"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","names":["React","validKeys","size","ensureError","ensureError"]}
|
|
1
|
+
{"version":3,"sources":["../src/init.tsx","../src/components/elements-overlays.tsx","../src/components/element-overlay.tsx","../src/hooks/use-bind-react-props-to-element.ts","../src/hooks/use-floating-on-element.ts","../src/init-styles-renderer.ts","../src/styles-renderer/transformers/background-color-overlay-transformer.ts","../src/styles-renderer/transformers/background-transformer.ts","../src/styles-renderer/transformers/create-combine-array-transformer.ts","../src/styles-renderer/multi-props.ts","../src/styles-renderer/transformers/create-corner-sizes-transformer.ts","../src/styles-renderer/transformers/create-edge-sizes-transformer.ts","../src/styles-renderer/transformers/gap-transformer.ts","../src/styles-renderer/transformers/linked-dimensions-transformer.ts","../src/styles-renderer/transformers/primitive-transformer.ts","../src/styles-renderer/transformers/shadow-transformer.ts","../src/styles-renderer/transformers/size-transformer.ts","../src/styles-renderer/transformers/stroke-transformer.ts","../src/styles-renderer/transformers/index.ts","../src/styles-renderer/render.ts","../src/styles-renderer/get-styles-schema.ts","../src/styles-renderer/resolve.ts","../src/styles-renderer/enqueue-used-fonts.ts","../src/sync/enqueue-font.ts","../src/sync/get-canvas-iframe-body.ts","../src/index.ts"],"sourcesContent":["import { injectIntoTop } from '@elementor/editor';\n\nimport { ElementsOverlays } from './components/elements-overlays';\nimport { initStylesRenderer } from './init-styles-renderer';\n\nexport function init() {\n\tinitStylesRenderer();\n\n\tinjectIntoTop( {\n\t\tid: 'elements-overlays',\n\t\tcomponent: ElementsOverlays,\n\t} );\n}\n","import * as React from 'react';\nimport { useElementsDomRef, useSelectedElement } from '@elementor/editor-elements';\nimport {\n\t__privateUseIsPreviewMode as useIsPreviewMode,\n\t__privateUseIsRouteActive as useIsRouteActive,\n} from '@elementor/editor-v1-adapters';\n\nimport { ElementOverlay } from './element-overlay';\n\nexport function ElementsOverlays() {\n\tconst selected = useSelectedElement();\n\tconst domElements = useElementsDomRef();\n\n\tconst isPreviewMode = useIsPreviewMode();\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\n\tconst isActive = ! isPreviewMode && ! isKitRouteActive;\n\n\treturn (\n\t\tisActive &&\n\t\tdomElements.map( ( el ) => (\n\t\t\t<ElementOverlay\n\t\t\t\telement={ el }\n\t\t\t\tkey={ el.dataset.id }\n\t\t\t\tisSelected={ selected.element?.id === el.dataset.id }\n\t\t\t/>\n\t\t) )\n\t);\n}\n","import * as React from 'react';\nimport { Box, styled } from '@elementor/ui';\nimport { FloatingPortal, useHover, useInteractions } from '@floating-ui/react';\n\nimport { useBindReactPropsToElement } from '../hooks/use-bind-react-props-to-element';\nimport { useFloatingOnElement } from '../hooks/use-floating-on-element';\n\nexport const CANVAS_WRAPPER_ID = 'elementor-preview-responsive-wrapper';\n\ntype Props = {\n\telement: HTMLElement;\n\tisSelected: boolean;\n};\n\nconst OverlayBox = styled( Box, { shouldForwardProp: ( prop ) => prop !== 'isSelected' } )<\n\tPick< Props, 'isSelected' >\n>( ( { theme, isSelected } ) => ( {\n\toutline: `${ isSelected ? '2px' : '1px' } solid ${ theme.palette.primary.light }`,\n\toutlineOffset: isSelected ? '-2px' : '-1px',\n\tpointerEvents: 'none',\n} ) );\n\nexport function ElementOverlay( { element, isSelected }: Props ) {\n\tconst { context, floating, isVisible } = useFloatingOnElement( { element, isSelected } );\n\tconst { getFloatingProps, getReferenceProps } = useInteractions( [ useHover( context ) ] );\n\n\tuseBindReactPropsToElement( element, getReferenceProps );\n\n\treturn (\n\t\tisVisible && (\n\t\t\t<FloatingPortal id={ CANVAS_WRAPPER_ID }>\n\t\t\t\t<OverlayBox\n\t\t\t\t\tref={ floating.setRef }\n\t\t\t\t\tisSelected={ isSelected }\n\t\t\t\t\tstyle={ floating.styles }\n\t\t\t\t\tdata-element-overlay={ element.dataset.id }\n\t\t\t\t\trole=\"presentation\"\n\t\t\t\t\t{ ...getFloatingProps() }\n\t\t\t\t/>\n\t\t\t</FloatingPortal>\n\t\t)\n\t);\n}\n","import { useEffect } from 'react';\n\ntype Props = Record< string, unknown >;\n\nexport function useBindReactPropsToElement( element: HTMLElement, getProps: () => Props ) {\n\tuseEffect( () => {\n\t\tconst el = element;\n\n\t\tconst { events, attrs } = groupProps( getProps() );\n\n\t\tevents.forEach( ( [ eventName, listener ] ) => el.addEventListener( eventName, listener ) );\n\t\tattrs.forEach( ( [ attrName, attrValue ] ) => el.setAttribute( attrName, attrValue ) );\n\n\t\treturn () => {\n\t\t\tevents.forEach( ( [ eventName, listener ] ) => el.removeEventListener( eventName, listener ) );\n\t\t\tattrs.forEach( ( [ attrName ] ) => el.removeAttribute( attrName ) );\n\t\t};\n\t}, [ getProps, element ] );\n}\n\ntype GroupedProps = {\n\tevents: Array< [ string, () => void ] >;\n\tattrs: Array< [ string, string ] >;\n};\n\nfunction groupProps( props: Props ) {\n\tconst eventRegex = /^on(?=[A-Z])/;\n\n\treturn Object.entries( props ).reduce< GroupedProps >(\n\t\t( acc, [ propName, propValue ] ) => {\n\t\t\tif ( ! eventRegex.test( propName ) ) {\n\t\t\t\tacc.attrs.push( [ propName, propValue as string ] );\n\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tconst eventName = propName.replace( eventRegex, '' ).toLowerCase();\n\t\t\tconst listener = propValue as () => void;\n\n\t\t\tacc.events.push( [ eventName, listener ] );\n\n\t\t\treturn acc;\n\t\t},\n\t\t{\n\t\t\tevents: [],\n\t\t\tattrs: [],\n\t\t}\n\t);\n}\n","import { useState } from 'react';\nimport { autoUpdate, offset, size, useFloating } from '@floating-ui/react';\n\ntype Options = {\n\telement: HTMLElement;\n\tisSelected: boolean;\n};\n\nexport function useFloatingOnElement( { element, isSelected }: Options ) {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\n\tconst { refs, floatingStyles, context } = useFloating( {\n\t\t// Must be controlled for interactions (like hover) to work.\n\t\topen: isOpen || isSelected,\n\t\tonOpenChange: setIsOpen,\n\n\t\t// Add an animation frame to support scroll events (without it the floating element will stay in the same position).\n\t\twhileElementsMounted: ( ...args ) => autoUpdate( ...args, { animationFrame: true } ),\n\n\t\t// The first element in the canvas is `display: contents` so we need to use the first child.\n\t\telements: { reference: element.firstElementChild },\n\n\t\tmiddleware: [\n\t\t\t// Match the floating element's size to the reference element.\n\t\t\tsize( {\n\t\t\t\tapply( { elements, rects } ) {\n\t\t\t\t\tObject.assign( elements.floating.style, {\n\t\t\t\t\t\twidth: `${ rects.reference.width }px`,\n\t\t\t\t\t\theight: `${ rects.reference.height }px`,\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t} ),\n\n\t\t\t// Center the floating element on the reference element.\n\t\t\toffset( ( { rects } ) => -rects.reference.height / 2 - rects.floating.height / 2 ),\n\t\t],\n\t} );\n\n\treturn {\n\t\tisVisible: isOpen || isSelected,\n\t\tcontext,\n\t\tfloating: {\n\t\t\tsetRef: refs.setFloating,\n\t\t\tref: refs.floating,\n\t\t\tstyles: floatingStyles,\n\t\t},\n\t};\n}\n","import { getBreakpointsMap } from '@elementor/editor-responsive';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\n\nimport { render, transformers } from './styles-renderer';\nimport enqueueUsedFonts from './styles-renderer/enqueue-used-fonts';\nimport { getCanvasIframeBody } from './sync/get-canvas-iframe-body';\n\nconst WRAPPER_DATA_ATTR = 'data-styles-container';\n\nexport function initStylesRenderer() {\n\tstylesRepository.subscribe( () => {\n\t\tconst styleContainer = getStylesContainer();\n\t\tconst styles = stylesRepository.all();\n\t\tconst breakpoints = getBreakpointsMap();\n\n\t\tstyleContainer.innerHTML = render( { transformers, styles, breakpoints } );\n\n\t\tenqueueUsedFonts( styles );\n\t} );\n}\n\nfunction getStylesContainer() {\n\tconst preview = getCanvasIframeBody();\n\tconst stylesContainer = preview?.querySelector( `[${ WRAPPER_DATA_ATTR }]` );\n\n\tif ( stylesContainer ) {\n\t\treturn stylesContainer;\n\t}\n\n\tconst el = createStylesContainer();\n\n\tpreview?.prepend( el );\n\n\treturn el;\n}\n\nfunction createStylesContainer() {\n\tconst el = document.createElement( 'div' );\n\tel.style.display = 'none';\n\tel.setAttribute( WRAPPER_DATA_ATTR, '' );\n\n\treturn el;\n}\n","import { type BackgroundColorOverlayPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst backgroundColorOverlayTransformer: Transformer< BackgroundColorOverlayPropValue[ 'value' ] > = ( value ) => {\n\treturn `linear-gradient(${ value }, ${ value })`;\n};\n\nexport default backgroundColorOverlayTransformer;\n","import { type BackgroundPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst backgroundTransformer: Transformer< BackgroundPropValue[ 'value' ] > = ( value ) => {\n\tconst overlays = value[ 'background-overlay' ] ?? '';\n\tconst color = value.color ?? '';\n\n\treturn `${ overlays } ${ color }`.trim();\n};\n\nexport default backgroundTransformer;\n","import { type Transformer } from '../types';\n\ntype CreateCombineArrayTransformer = ( delimiter: string ) => Transformer< Array< string | number > >;\n\nconst createCombineArrayTransformer: CreateCombineArrayTransformer = ( delimiter ) => {\n\treturn ( value ) => value.filter( Boolean ).join( delimiter );\n};\n\nexport default createCombineArrayTransformer;\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nexport type MultiProps = {\n\t'$$multi-props': true;\n\tvalue: Props;\n};\n\nexport const isMultiProps = ( propValue: PropValue ): propValue is MultiProps => {\n\treturn (\n\t\t!! propValue &&\n\t\ttypeof propValue === 'object' &&\n\t\t'$$multi-props' in propValue &&\n\t\tpropValue[ '$$multi-props' ] === true\n\t);\n};\n\nexport const createMultiPropsValue = ( props: Props ): MultiProps => {\n\treturn {\n\t\t'$$multi-props': true,\n\t\tvalue: props,\n\t};\n};\n\nexport const getMultiPropsValue = ( multiProps: MultiProps ): Props => {\n\treturn multiProps.value;\n};\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nexport type CornerSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\nexport type CreateCornerSizesTransformer = (\n\tkeyGenerator: ( cornerKey: string ) => string\n) => Transformer< CornerSizes >;\n\nconst validCorners = [ 'top-left', 'top-right', 'bottom-left', 'bottom-right' ];\n\nconst createCornerSizesTransformer: CreateCornerSizesTransformer = ( keyGenerator ) => ( value ) => {\n\tconst props = Object.entries( value ).reduce< Props >( ( acc, [ corner, cornerValue ] ) => {\n\t\tif ( validCorners.includes( corner ) ) {\n\t\t\tconst key = keyGenerator( corner );\n\n\t\t\tacc[ key ] = cornerValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( props );\n};\n\nexport default createCornerSizesTransformer;\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nexport type EdgeSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\nexport type CreateEdgeSizesTransformer = ( keyGenerator: ( edgeKey: string ) => string ) => Transformer< EdgeSizes >;\n\nconst validEdges = [ 'top', 'right', 'bottom', 'left' ];\n\nconst createEdgeSizesTransformer: CreateEdgeSizesTransformer = ( keyGenerator ) => ( value ) => {\n\tconst props = Object.entries( value ).reduce< Props >( ( acc, [ edge, edgeValue ] ) => {\n\t\tif ( validEdges.includes( edge ) ) {\n\t\t\tconst key = keyGenerator( edge );\n\n\t\t\tacc[ key ] = edgeValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( props );\n};\n\nexport default createEdgeSizesTransformer;\n","import { type GapPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'row', 'column' ];\n\nconst gapTransformer: Transformer< GapPropValue[ 'value' ] > = ( value, key ) => {\n\tconst parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {\n\t\tif ( dimensionValue && validKeys.includes( dimensionKey ) ) {\n\t\t\tacc[ `${ dimensionKey }-${ key }` ] = dimensionValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default gapTransformer;\n","import { type LinkedDimensionsPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'top', 'right', 'bottom', 'left' ];\n\nconst linkedDimensionsTransformer: Transformer< LinkedDimensionsPropValue[ 'value' ] > = ( value, key ) => {\n\tconst parsed = Object.entries( value ).reduce< Props >( ( acc, [ dimensionKey, dimensionValue ] ) => {\n\t\tif ( dimensionValue && validKeys.includes( dimensionKey ) ) {\n\t\t\tacc[ `${ key }-${ dimensionKey }` ] = dimensionValue;\n\t\t}\n\n\t\treturn acc;\n\t}, {} );\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default linkedDimensionsTransformer;\n","import { type Transformer } from '../types';\n\ntype Primitive = string | number | boolean;\n\nexport const primitiveTransformer: Transformer< Primitive > = ( value ) => {\n\treturn value;\n};\n","import { type ShadowPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst shadowTransformer: Transformer< ShadowPropValue[ 'value' ] > = ( value ) => {\n\treturn [ value.hOffset, value.vOffset, value.blur, value.spread, value.color, value.position ]\n\t\t.filter( Boolean )\n\t\t.join( ' ' );\n};\n\nexport default shadowTransformer;\n","import { type SizePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst sizeTransformer: Transformer< SizePropValue[ 'value' ] > = ( value ) => {\n\treturn `${ value.size }${ value.unit }`;\n};\n\nexport default sizeTransformer;\n","import { type StrokePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst strokeTransformer: Transformer< StrokePropValue[ 'value' ] > = ( value ) => {\n\treturn `${ value.width } ${ value.color }`;\n};\n\nexport default strokeTransformer;\n","import { type TransformersMap } from '../types';\nimport backgroundColorOverlayTransformer from './background-color-overlay-transformer';\nimport { default as background } from './background-transformer';\nimport { default as createCombineArrayTransformer } from './create-combine-array-transformer';\nimport createCornerSizesTransformer from './create-corner-sizes-transformer';\nimport createEdgeSizesTransformer from './create-edge-sizes-transformer';\nimport { default as gap } from './gap-transformer';\nimport { default as linkedDimensions } from './linked-dimensions-transformer';\nimport { primitiveTransformer } from './primitive-transformer';\nimport { default as shadow } from './shadow-transformer';\nimport { default as size } from './size-transformer';\nimport { default as stroke } from './stroke-transformer';\n\nexport default {\n\tsize,\n\tshadow,\n\tstroke,\n\tgap,\n\tbackground,\n\n\tcolor: primitiveTransformer,\n\tnumber: primitiveTransformer,\n\tstring: primitiveTransformer,\n\n\t'linked-dimensions': linkedDimensions,\n\t'background-color-overlay': backgroundColorOverlayTransformer,\n\t'background-overlay': createCombineArrayTransformer( ',' ),\n\n\t'box-shadow': createCombineArrayTransformer( ',' ),\n\n\t'border-width': createEdgeSizesTransformer( ( edgeKey ) => `border-${ edgeKey }-width` ),\n\t'border-radius': createCornerSizesTransformer( ( cornerKey ) => `border-${ cornerKey }-radius` ),\n} satisfies TransformersMap;\n","import { type Props } from '@elementor/editor-props';\nimport { type Breakpoint, type BreakpointId, type BreakpointsMap } from '@elementor/editor-responsive';\nimport { type StyleDefinition, type StyleVariant } from '@elementor/editor-styles';\nimport { ensureError } from '@elementor/utils';\n\nimport { getStylesSchema } from './get-styles-schema';\nimport { resolve } from './resolve';\nimport { type TransformersMap } from './types';\n\ntype RenderParams = {\n\ttransformers: TransformersMap;\n\tstyles: StyleDefinition[];\n\tbreakpoints: BreakpointsMap;\n};\n\nexport default function render( { transformers, styles, breakpoints }: RenderParams ) {\n\tconst cssStyle: string[] = [];\n\n\ttry {\n\t\tstyles.forEach( ( styleDef ) => {\n\t\t\tconst style = renderStyle( styleDef, transformers, breakpoints );\n\n\t\t\tcssStyle.push( wrapWithStyleElement( styleDef.id, style ) );\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( `Cannot render style': ${ ensureError( error ).message }` );\n\t}\n\n\treturn cssStyle.join( '' );\n}\n\nfunction renderStyle( style: StyleDefinition, transformers: TransformersMap, breakpoints: BreakpointsMap ) {\n\tconst baseSelector = getBaseSelector( style );\n\n\tif ( ! baseSelector ) {\n\t\treturn '';\n\t}\n\n\tconst stylesheet: string[] = [];\n\n\tObject.values( style.variants ).forEach( ( variant ) => {\n\t\tconst styleDeclaration = variantToStyleDeclaration( baseSelector, variant, transformers, breakpoints );\n\n\t\tif ( styleDeclaration ) {\n\t\t\tstylesheet.push( styleDeclaration );\n\t\t}\n\t} );\n\n\treturn stylesheet.join( '' );\n}\n\nfunction getBaseSelector( styleDef: StyleDefinition ) {\n\tconst map = {\n\t\tclass: '.',\n\t};\n\n\treturn `${ map[ styleDef.type ] }${ styleDef.id }`;\n}\n\nfunction variantToStyleDeclaration(\n\tbaseSelector: string,\n\tvariant: StyleVariant,\n\ttransformers: TransformersMap,\n\tbreakpoints: BreakpointsMap\n) {\n\tconst css = propsToCss( variant.props, transformers );\n\n\tif ( ! css ) {\n\t\treturn '';\n\t}\n\n\tconst state = variant.meta.state ? `:${ variant.meta.state }` : '';\n\tconst selector = `${ baseSelector }${ state }`;\n\n\tlet styleDeclaration = `${ selector }{${ css }}`;\n\n\tif ( variant.meta.breakpoint ) {\n\t\tstyleDeclaration = wrapWithMediaQuery( breakpoints, variant.meta.breakpoint, styleDeclaration );\n\t}\n\n\treturn styleDeclaration;\n}\n\nfunction propsToCss( props: Props, transformers: TransformersMap ): string {\n\tconst schema = getStylesSchema();\n\n\tconst transformed = resolve( { props, schema, transformers } );\n\n\treturn Object.entries( transformed )\n\t\t.reduce< string[] >( ( acc, [ propName, propValue ] ) => {\n\t\t\tacc.push( propName + ':' + propValue + ';' );\n\n\t\t\treturn acc;\n\t\t}, [] )\n\t\t.join( '' );\n}\n\nfunction wrapWithMediaQuery( breakpoints: BreakpointsMap, breakpoint: BreakpointId, css: string ) {\n\tconst size = getBreakpointSize( breakpoints[ breakpoint ] );\n\treturn size ? `@media(${ size }){${ css }}` : css;\n}\n\nfunction getBreakpointSize( breakpoint: Breakpoint ) {\n\treturn breakpoint.type ? `${ breakpoint.type }:${ breakpoint.width }px` : null;\n}\n\nfunction wrapWithStyleElement( id: string, content: string ) {\n\treturn `<style data-style-id=\"${ id }\">${ content }</style>`;\n}\n","import { type PropKey, type PropType } from '@elementor/editor-props';\n\ntype ExtendedWindow = Window & {\n\telementor?: {\n\t\tconfig?: {\n\t\t\tatomic?: {\n\t\t\t\tstyles_schema?: Record< PropKey, PropType >;\n\t\t\t};\n\t\t};\n\t};\n};\n\nexport const getStylesSchema = () => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.config?.atomic?.styles_schema ?? {};\n};\n","import { type PropsSchema } from '@elementor/editor-elements';\nimport { isTransformable, type PropKey, type Props, type PropType, type PropValue } from '@elementor/editor-props';\n\nimport { getMultiPropsValue, isMultiProps } from './multi-props';\nimport { type TransformersMap } from './types';\n\nconst TRANSFORM_DEPTH_LIMIT = 3;\n\ntype ResolveArgs = {\n\tprops: Props;\n\tschema: PropsSchema;\n\ttransformers: TransformersMap;\n};\n\nexport function resolve( { props, schema, transformers }: ResolveArgs ) {\n\tconst resolved: Props = {};\n\n\tObject.entries( schema ).forEach( ( [ key, propType ] ) => {\n\t\tconst value = props[ key ] ?? propType.default;\n\n\t\tconst transformed = transform( value, key, propType, transformers );\n\n\t\tif ( transformed === null ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( isMultiProps( transformed ) ) {\n\t\t\tObject.assign( resolved, getMultiPropsValue( transformed ) );\n\t\t\treturn;\n\t\t}\n\n\t\tresolved[ key ] = transformed;\n\t} );\n\n\treturn resolved;\n}\n\nfunction transform(\n\tvalue: PropValue,\n\tpropKey: PropKey,\n\tpropType: PropType,\n\ttransformers: TransformersMap,\n\tdepth: number = 0\n) {\n\tif ( ! value && value !== 0 ) {\n\t\treturn null;\n\t}\n\n\tif ( ! isTransformable( value ) ) {\n\t\treturn value;\n\t}\n\n\tif ( depth > TRANSFORM_DEPTH_LIMIT ) {\n\t\treturn null;\n\t}\n\n\tif ( value.disabled === true ) {\n\t\treturn null;\n\t}\n\n\tif ( propType.kind === 'union' ) {\n\t\tpropType = propType.prop_types[ value.$$type ];\n\n\t\tif ( ! propType ) {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t// Warning: This variable is loosely-typed - use with caution.\n\tlet resolvedValue = value.value;\n\n\tif ( propType.kind === 'object' ) {\n\t\tresolvedValue = resolve( {\n\t\t\ttransformers,\n\t\t\tprops: resolvedValue,\n\t\t\tschema: propType.shape,\n\t\t} );\n\t}\n\n\tif ( propType.kind === 'array' ) {\n\t\tresolvedValue = resolvedValue.map( ( item: PropValue ) =>\n\t\t\ttransform( item, propKey, propType.item_prop_type, transformers, depth )\n\t\t);\n\t}\n\n\tconst transformer = transformers[ value.$$type ];\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\tconst transformed = transformer( resolvedValue, propKey );\n\n\t\treturn transform( transformed, propKey, propType, transformers, depth + 1 );\n\t} catch {\n\t\treturn null;\n\t}\n}\n","import { type StyleDefinition } from '@elementor/editor-styles';\nimport { ensureError } from '@elementor/utils';\n\nimport { enqueueFont } from '../sync/enqueue-font';\n\nexport default function enqueueUsedFonts( styles: StyleDefinition[] ) {\n\ttry {\n\t\tstyles.forEach( ( styleDef ) => {\n\t\t\tObject.values( styleDef.variants ).forEach( ( variant ) => {\n\t\t\t\tconst fontFamily = variant.props[ 'font-family' ] ?? null;\n\n\t\t\t\tif ( fontFamily && typeof fontFamily === 'string' ) {\n\t\t\t\t\tenqueueFont( fontFamily );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( `Cannot enqueue font': ${ ensureError( error ).message }` );\n\t}\n}\n","import { type CanvasExtendedWindow, type EnqueueFont } from './types';\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n","import type { CanvasExtendedWindow } from './types';\n\nexport function getCanvasIframeBody() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.$preview?.[ 0 ]?.contentDocument?.body;\n}\n","import { init } from './init';\n\ninit();\n"],"mappings":"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","names":["React","validKeys","size","ensureError","ensureError"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-canvas",
|
|
3
3
|
"description": "Elementor Editor Canvas",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"author": "Elementor Team",
|
|
7
7
|
"homepage": "https://elementor.com/",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@elementor/editor-props": "0.5.0",
|
|
45
45
|
"@elementor/schema": "0.1.2",
|
|
46
46
|
"@elementor/utils": "0.3.0",
|
|
47
|
-
"@elementor/editor-styles-repository": "0.
|
|
47
|
+
"@elementor/editor-styles-repository": "0.3.0",
|
|
48
48
|
"@elementor/editor-responsive": "0.12.4"
|
|
49
49
|
}
|
|
50
50
|
}
|
|
@@ -479,29 +479,81 @@ export const stylesSchemaMock = {
|
|
|
479
479
|
},
|
|
480
480
|
},
|
|
481
481
|
},
|
|
482
|
-
|
|
483
|
-
kind: '
|
|
484
|
-
key: 'background
|
|
482
|
+
background: {
|
|
483
|
+
kind: 'object',
|
|
484
|
+
key: 'background',
|
|
485
485
|
default: null,
|
|
486
486
|
meta: {},
|
|
487
487
|
settings: {},
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
kind: '
|
|
497
|
-
key: 'color',
|
|
488
|
+
shape: {
|
|
489
|
+
'background-overlay': {
|
|
490
|
+
kind: 'array',
|
|
491
|
+
key: 'background-overlay',
|
|
492
|
+
default: null,
|
|
493
|
+
meta: {},
|
|
494
|
+
settings: {},
|
|
495
|
+
item_prop_type: {
|
|
496
|
+
kind: 'union',
|
|
498
497
|
default: null,
|
|
499
498
|
meta: {},
|
|
500
|
-
settings: {
|
|
501
|
-
|
|
499
|
+
settings: {},
|
|
500
|
+
prop_types: {
|
|
501
|
+
'background-image-overlay': {
|
|
502
|
+
kind: 'object',
|
|
503
|
+
key: 'background-image-overlay',
|
|
504
|
+
default: null,
|
|
505
|
+
meta: {},
|
|
506
|
+
settings: {},
|
|
507
|
+
shape: {
|
|
508
|
+
url: {
|
|
509
|
+
kind: 'plain',
|
|
510
|
+
key: 'string',
|
|
511
|
+
default: null,
|
|
512
|
+
meta: {},
|
|
513
|
+
settings: {},
|
|
514
|
+
},
|
|
515
|
+
repeat: {
|
|
516
|
+
kind: 'plain',
|
|
517
|
+
key: 'string',
|
|
518
|
+
default: null,
|
|
519
|
+
meta: {},
|
|
520
|
+
settings: {},
|
|
521
|
+
},
|
|
522
|
+
},
|
|
523
|
+
},
|
|
524
|
+
'background-gradient-overlay': {
|
|
525
|
+
kind: 'object',
|
|
526
|
+
key: 'background-gradient-overlay',
|
|
527
|
+
default: null,
|
|
528
|
+
meta: {},
|
|
529
|
+
settings: {},
|
|
530
|
+
shape: {
|
|
531
|
+
color: {
|
|
532
|
+
kind: 'plain',
|
|
533
|
+
key: 'color',
|
|
534
|
+
default: null,
|
|
535
|
+
meta: {},
|
|
536
|
+
settings: {},
|
|
537
|
+
},
|
|
538
|
+
},
|
|
539
|
+
},
|
|
540
|
+
'background-color-overlay': {
|
|
541
|
+
kind: 'plain',
|
|
542
|
+
key: 'background-color-overlay',
|
|
543
|
+
default: null,
|
|
544
|
+
meta: {},
|
|
545
|
+
settings: {},
|
|
546
|
+
},
|
|
502
547
|
},
|
|
503
548
|
},
|
|
504
549
|
},
|
|
550
|
+
color: {
|
|
551
|
+
kind: 'plain',
|
|
552
|
+
key: 'color',
|
|
553
|
+
default: null,
|
|
554
|
+
meta: {},
|
|
555
|
+
settings: {},
|
|
556
|
+
},
|
|
505
557
|
},
|
|
506
558
|
},
|
|
507
559
|
'box-shadow': {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/* eslint-disable testing-library/render-result-naming-convention */
|
|
2
2
|
import { createMockStyleDefinition } from 'test-utils';
|
|
3
3
|
import {
|
|
4
|
-
|
|
4
|
+
backgroundColorOverlayPropTypeUtil,
|
|
5
5
|
backgroundOverlayPropTypeUtil,
|
|
6
|
+
backgroundPropTypeUtil,
|
|
6
7
|
borderRadiusPropTypeUtil,
|
|
7
8
|
borderWidthPropTypeUtil,
|
|
8
9
|
boxShadowPropTypeUtil,
|
|
@@ -19,6 +20,7 @@ import { type StyleDefinition } from '@elementor/editor-styles';
|
|
|
19
20
|
import { getStylesSchema } from '../get-styles-schema';
|
|
20
21
|
import render from '../render';
|
|
21
22
|
import transformers from '../transformers';
|
|
23
|
+
import backgroundTransformer from '../transformers/background-transformer';
|
|
22
24
|
import { stylesSchemaMock } from './__mocks__/styles-schema';
|
|
23
25
|
|
|
24
26
|
jest.mock( '../get-styles-schema' );
|
|
@@ -144,36 +146,6 @@ describe( 'styles-renderer', () => {
|
|
|
144
146
|
);
|
|
145
147
|
} );
|
|
146
148
|
|
|
147
|
-
it( 'should transform background-image (including also background-overlay & color)', () => {
|
|
148
|
-
// Arrange.
|
|
149
|
-
const styleDef = createMockStyleDefinition( {
|
|
150
|
-
id: 'test',
|
|
151
|
-
props: {
|
|
152
|
-
'background-image': backgroundImagePropTypeUtil.create( [
|
|
153
|
-
backgroundOverlayPropTypeUtil.create( {
|
|
154
|
-
color: colorPropTypeUtil.create( '#000' ),
|
|
155
|
-
} ),
|
|
156
|
-
|
|
157
|
-
backgroundOverlayPropTypeUtil.create( {
|
|
158
|
-
color: colorPropTypeUtil.create( '#FFF' ),
|
|
159
|
-
} ),
|
|
160
|
-
] ),
|
|
161
|
-
},
|
|
162
|
-
} );
|
|
163
|
-
|
|
164
|
-
// Act.
|
|
165
|
-
const cssString = render( {
|
|
166
|
-
styles: [ styleDef ],
|
|
167
|
-
transformers,
|
|
168
|
-
breakpoints: mockBreakpoints,
|
|
169
|
-
} );
|
|
170
|
-
|
|
171
|
-
// Assert.
|
|
172
|
-
expect( cssString ).toBe(
|
|
173
|
-
`<style data-style-id="test">.test{background-image:linear-gradient(#000,#000),linear-gradient(#FFF,#FFF);}</style>`
|
|
174
|
-
);
|
|
175
|
-
} );
|
|
176
|
-
|
|
177
149
|
it( 'should transform border-width (including also size, number & string)', () => {
|
|
178
150
|
// Arrange.
|
|
179
151
|
const styleDef = createMockStyleDefinition( {
|
|
@@ -581,6 +553,142 @@ describe( 'styles-renderer', () => {
|
|
|
581
553
|
} );
|
|
582
554
|
} );
|
|
583
555
|
|
|
556
|
+
const backgroundExpectationWrapper = ( id: string, bgShorthand: string ) => {
|
|
557
|
+
return `<style data-style-id="${ id }">.${ id }{background:${ bgShorthand };}</style>`;
|
|
558
|
+
};
|
|
559
|
+
|
|
560
|
+
describe( 'background-transformer', () => {
|
|
561
|
+
beforeEach( () => {
|
|
562
|
+
jest.mocked( getStylesSchema ).mockReturnValue( stylesSchemaMock );
|
|
563
|
+
} );
|
|
564
|
+
|
|
565
|
+
it( 'should transform background color', () => {
|
|
566
|
+
// Arrange.
|
|
567
|
+
const styleDef = createMockStyleDefinition( {
|
|
568
|
+
id: 'bg-color',
|
|
569
|
+
props: {
|
|
570
|
+
background: backgroundPropTypeUtil.create( {
|
|
571
|
+
color: colorPropTypeUtil.create( '#ee00ff' ),
|
|
572
|
+
} ),
|
|
573
|
+
},
|
|
574
|
+
} );
|
|
575
|
+
|
|
576
|
+
// Act.
|
|
577
|
+
const cssString = render( {
|
|
578
|
+
styles: [ styleDef ],
|
|
579
|
+
transformers,
|
|
580
|
+
breakpoints: mockBreakpoints,
|
|
581
|
+
} );
|
|
582
|
+
|
|
583
|
+
// Assert.
|
|
584
|
+
expect( cssString ).toBe( backgroundExpectationWrapper( 'bg-color', '#ee00ff' ) );
|
|
585
|
+
} );
|
|
586
|
+
|
|
587
|
+
it( 'should transform background overlay (repeater)', () => {
|
|
588
|
+
// Arrange.
|
|
589
|
+
const styleDef = createMockStyleDefinition( {
|
|
590
|
+
id: 'test',
|
|
591
|
+
props: {
|
|
592
|
+
background: backgroundPropTypeUtil.create( {
|
|
593
|
+
'background-overlay': backgroundOverlayPropTypeUtil.create( [
|
|
594
|
+
backgroundColorOverlayPropTypeUtil.create( 'blue' ),
|
|
595
|
+
backgroundColorOverlayPropTypeUtil.create( 'yellow' ),
|
|
596
|
+
] ),
|
|
597
|
+
} ),
|
|
598
|
+
},
|
|
599
|
+
} );
|
|
600
|
+
|
|
601
|
+
// Act.
|
|
602
|
+
const cssString = render( {
|
|
603
|
+
styles: [ styleDef ],
|
|
604
|
+
transformers,
|
|
605
|
+
breakpoints: mockBreakpoints,
|
|
606
|
+
} );
|
|
607
|
+
|
|
608
|
+
// Assert.
|
|
609
|
+
expect( cssString ).toBe(
|
|
610
|
+
backgroundExpectationWrapper( 'test', 'linear-gradient(blue, blue),linear-gradient(yellow, yellow)' )
|
|
611
|
+
);
|
|
612
|
+
} );
|
|
613
|
+
|
|
614
|
+
it( 'should transform background (including also background-overlay & color)', () => {
|
|
615
|
+
// Arrange.
|
|
616
|
+
const styleDef = createMockStyleDefinition( {
|
|
617
|
+
id: 'test',
|
|
618
|
+
props: {
|
|
619
|
+
background: backgroundPropTypeUtil.create( {
|
|
620
|
+
color: colorPropTypeUtil.create( '#000' ),
|
|
621
|
+
'background-overlay': backgroundOverlayPropTypeUtil.create( [
|
|
622
|
+
backgroundColorOverlayPropTypeUtil.create( '#FFFFFF' ),
|
|
623
|
+
backgroundColorOverlayPropTypeUtil.create( '#FF2222' ),
|
|
624
|
+
] ),
|
|
625
|
+
} ),
|
|
626
|
+
},
|
|
627
|
+
} );
|
|
628
|
+
|
|
629
|
+
// Act.
|
|
630
|
+
const cssString = render( {
|
|
631
|
+
styles: [ styleDef ],
|
|
632
|
+
transformers,
|
|
633
|
+
breakpoints: mockBreakpoints,
|
|
634
|
+
} );
|
|
635
|
+
|
|
636
|
+
// Assert.
|
|
637
|
+
expect( cssString ).toBe(
|
|
638
|
+
backgroundExpectationWrapper(
|
|
639
|
+
'test',
|
|
640
|
+
'linear-gradient(#FFFFFF, #FFFFFF),linear-gradient(#FF2222, #FF2222) #000'
|
|
641
|
+
)
|
|
642
|
+
);
|
|
643
|
+
} );
|
|
644
|
+
} );
|
|
645
|
+
|
|
646
|
+
describe( 'background-overlay-transformer', () => {
|
|
647
|
+
it( 'should return empty if background-overlay is invalid', () => {
|
|
648
|
+
// Arrange.
|
|
649
|
+
const initialData = {
|
|
650
|
+
'background-overlay': null,
|
|
651
|
+
};
|
|
652
|
+
|
|
653
|
+
// Act.
|
|
654
|
+
const result = backgroundTransformer( initialData, 'background-overlay' );
|
|
655
|
+
|
|
656
|
+
// Assert.
|
|
657
|
+
expect( result ).toBe( '' );
|
|
658
|
+
} );
|
|
659
|
+
|
|
660
|
+
it( 'should transform only valid background color', () => {
|
|
661
|
+
// Arrange.
|
|
662
|
+
const backgroundColor = 'rgba(255, 0, 255, 0.9)';
|
|
663
|
+
|
|
664
|
+
const initialData = {
|
|
665
|
+
color: backgroundColor,
|
|
666
|
+
};
|
|
667
|
+
|
|
668
|
+
// Act.
|
|
669
|
+
const result = backgroundTransformer( initialData, 'background-overlay' );
|
|
670
|
+
|
|
671
|
+
// Assert.
|
|
672
|
+
expect( result ).toBe( backgroundColor );
|
|
673
|
+
} );
|
|
674
|
+
|
|
675
|
+
it( 'should transform only background overlay color', () => {
|
|
676
|
+
// Arrange.
|
|
677
|
+
const backgroundOverlayColor = 'rgba(0, 0, 0, 0.5)';
|
|
678
|
+
const expected = `linear-gradient(${ backgroundOverlayColor }, ${ backgroundOverlayColor })`;
|
|
679
|
+
|
|
680
|
+
const initialData = {
|
|
681
|
+
'background-overlay': `linear-gradient(${ backgroundOverlayColor }, ${ backgroundOverlayColor })`,
|
|
682
|
+
};
|
|
683
|
+
|
|
684
|
+
// Act.
|
|
685
|
+
const result = backgroundTransformer( initialData, 'background-overlay' );
|
|
686
|
+
|
|
687
|
+
// Assert.
|
|
688
|
+
expect( result ).toBe( expected );
|
|
689
|
+
} );
|
|
690
|
+
} );
|
|
691
|
+
|
|
584
692
|
const mockBreakpoints = {
|
|
585
693
|
tablet: {
|
|
586
694
|
id: 'tablet',
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type BackgroundColorOverlayPropValue } from '@elementor/editor-props';
|
|
2
|
+
|
|
3
|
+
import { type Transformer } from '../types';
|
|
4
|
+
|
|
5
|
+
const backgroundColorOverlayTransformer: Transformer< BackgroundColorOverlayPropValue[ 'value' ] > = ( value ) => {
|
|
6
|
+
return `linear-gradient(${ value }, ${ value })`;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export default backgroundColorOverlayTransformer;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type BackgroundPropValue } from '@elementor/editor-props';
|
|
2
|
+
|
|
3
|
+
import { type Transformer } from '../types';
|
|
4
|
+
|
|
5
|
+
const backgroundTransformer: Transformer< BackgroundPropValue[ 'value' ] > = ( value ) => {
|
|
6
|
+
const overlays = value[ 'background-overlay' ] ?? '';
|
|
7
|
+
const color = value.color ?? '';
|
|
8
|
+
|
|
9
|
+
return `${ overlays } ${ color }`.trim();
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export default backgroundTransformer;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type TransformersMap } from '../types';
|
|
2
|
-
import
|
|
2
|
+
import backgroundColorOverlayTransformer from './background-color-overlay-transformer';
|
|
3
|
+
import { default as background } from './background-transformer';
|
|
3
4
|
import { default as createCombineArrayTransformer } from './create-combine-array-transformer';
|
|
4
5
|
import createCornerSizesTransformer from './create-corner-sizes-transformer';
|
|
5
6
|
import createEdgeSizesTransformer from './create-edge-sizes-transformer';
|
|
@@ -15,16 +16,17 @@ export default {
|
|
|
15
16
|
shadow,
|
|
16
17
|
stroke,
|
|
17
18
|
gap,
|
|
19
|
+
background,
|
|
18
20
|
|
|
19
21
|
color: primitiveTransformer,
|
|
20
22
|
number: primitiveTransformer,
|
|
21
23
|
string: primitiveTransformer,
|
|
22
24
|
|
|
23
25
|
'linked-dimensions': linkedDimensions,
|
|
24
|
-
'background-overlay':
|
|
26
|
+
'background-color-overlay': backgroundColorOverlayTransformer,
|
|
27
|
+
'background-overlay': createCombineArrayTransformer( ',' ),
|
|
25
28
|
|
|
26
29
|
'box-shadow': createCombineArrayTransformer( ',' ),
|
|
27
|
-
'background-image': createCombineArrayTransformer( ',' ),
|
|
28
30
|
|
|
29
31
|
'border-width': createEdgeSizesTransformer( ( edgeKey ) => `border-${ edgeKey }-width` ),
|
|
30
32
|
'border-radius': createCornerSizesTransformer( ( cornerKey ) => `border-${ cornerKey }-radius` ),
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type ColorGradientPropValue } from '@elementor/editor-props';
|
|
2
|
-
|
|
3
|
-
import { type Transformer } from '../types';
|
|
4
|
-
|
|
5
|
-
const backgroundOverlayTransformer: Transformer< ColorGradientPropValue[ 'value' ] > = ( value ) => {
|
|
6
|
-
return `linear-gradient(${ value.color },${ value.color })`;
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
export default backgroundOverlayTransformer;
|