@elementor/editor-canvas 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/.turbo/turbo-build.log +10 -10
  2. package/CHANGELOG.md +14 -0
  3. package/dist/index.d.mts +13 -1
  4. package/dist/index.d.ts +13 -1
  5. package/dist/index.js +203 -225
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +192 -227
  8. package/dist/index.mjs.map +1 -1
  9. package/package.json +5 -5
  10. package/src/{renderers/__tests__ → __tests__}/__mocks__/styles-schema.ts +7 -0
  11. package/src/__tests__/init-styles-renderer.test.ts +8 -3
  12. package/src/{renderers/__tests__/create-props-resolver.transformers.test.ts → __tests__/styles-prop-resolver.test.ts} +12 -18
  13. package/src/index.ts +2 -0
  14. package/src/init-style-transformers.ts +58 -0
  15. package/src/init-styles-renderer.ts +8 -6
  16. package/src/init.tsx +2 -0
  17. package/src/renderers/__tests__/create-props-resolver.test.ts +43 -34
  18. package/src/renderers/__tests__/render-styles.test.ts +3 -15
  19. package/src/renderers/create-props-resolver.ts +32 -31
  20. package/src/renderers/render-styles.ts +4 -7
  21. package/src/style-transformers-registry.ts +3 -0
  22. package/src/transformers/create-transformer.ts +6 -0
  23. package/src/transformers/create-transformers-registry.ts +16 -0
  24. package/src/transformers/styles/background-color-overlay-transformer.ts +5 -0
  25. package/src/transformers/styles/background-image-overlay-transformer.ts +28 -0
  26. package/src/transformers/styles/background-image-position-offset-transformer.ts +10 -0
  27. package/src/transformers/styles/background-image-size-scale-transformer.ts +10 -0
  28. package/src/transformers/styles/background-transformer.ts +13 -0
  29. package/src/transformers/styles/create-combine-array-transformer.ts +5 -0
  30. package/src/transformers/styles/create-multi-props-transformer.ts +14 -0
  31. package/src/transformers/styles/image-attachment-transformer.ts +15 -0
  32. package/src/transformers/styles/image-src-transformer.ts +11 -0
  33. package/src/transformers/styles/image-transformer.ts +34 -0
  34. package/src/transformers/styles/primitive-transformer.ts +3 -0
  35. package/src/transformers/styles/shadow-transformer.ts +16 -0
  36. package/src/transformers/styles/size-transformer.ts +10 -0
  37. package/src/transformers/styles/stroke-transformer.ts +17 -0
  38. package/src/transformers/types.ts +14 -0
  39. package/src/renderers/style-transformers/background-color-overlay-transformer.ts +0 -9
  40. package/src/renderers/style-transformers/background-image-overlay-transformer.ts +0 -24
  41. package/src/renderers/style-transformers/background-image-position-offset-transformer.ts +0 -10
  42. package/src/renderers/style-transformers/background-image-size-scale-transformer.ts +0 -10
  43. package/src/renderers/style-transformers/background-transformer.ts +0 -12
  44. package/src/renderers/style-transformers/create-combine-array-transformer.ts +0 -9
  45. package/src/renderers/style-transformers/create-corner-sizes-transformer.ts +0 -31
  46. package/src/renderers/style-transformers/create-edge-sizes-transformer.ts +0 -31
  47. package/src/renderers/style-transformers/dimensions.ts +0 -20
  48. package/src/renderers/style-transformers/image-attachment.ts +0 -14
  49. package/src/renderers/style-transformers/image-src.ts +0 -8
  50. package/src/renderers/style-transformers/image.ts +0 -25
  51. package/src/renderers/style-transformers/index.ts +0 -48
  52. package/src/renderers/style-transformers/layout-direction-transformer.ts +0 -20
  53. package/src/renderers/style-transformers/primitive-transformer.ts +0 -7
  54. package/src/renderers/style-transformers/shadow-transformer.ts +0 -11
  55. package/src/renderers/style-transformers/size-transformer.ts +0 -9
  56. package/src/renderers/style-transformers/stroke-transformer.ts +0 -16
  57. package/src/renderers/types.ts +0 -12
@@ -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/renderers/create-props-resolver.ts","../src/renderers/multi-props.ts","../src/renderers/errors.ts","../src/renderers/render-styles.ts","../src/renderers/style-transformers/background-color-overlay-transformer.ts","../src/renderers/style-transformers/background-image-overlay-transformer.ts","../src/renderers/style-transformers/background-image-position-offset-transformer.ts","../src/renderers/style-transformers/background-image-size-scale-transformer.ts","../src/renderers/style-transformers/background-transformer.ts","../src/renderers/style-transformers/create-combine-array-transformer.ts","../src/renderers/style-transformers/create-corner-sizes-transformer.ts","../src/renderers/style-transformers/create-edge-sizes-transformer.ts","../src/renderers/style-transformers/dimensions.ts","../src/renderers/style-transformers/image.ts","../src/renderers/style-transformers/image-attachment.ts","../src/renderers/style-transformers/image-src.ts","../src/renderers/style-transformers/layout-direction-transformer.ts","../src/renderers/style-transformers/primitive-transformer.ts","../src/renderers/style-transformers/shadow-transformer.ts","../src/renderers/style-transformers/size-transformer.ts","../src/renderers/style-transformers/stroke-transformer.ts","../src/renderers/style-transformers/index.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 { getStylesSchema } from '@elementor/editor-styles';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __privateListenTo as listenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';\n\nimport { createPropsResolver } from './renderers/create-props-resolver';\nimport renderStyles from './renderers/render-styles';\nimport { styleTransformers } from './renderers/style-transformers';\nimport { enqueueFont } from './sync/enqueue-font';\nimport { getCanvasIframeBody } from './sync/get-canvas-iframe-body';\n\nconst WRAPPER_DATA_ATTR = 'data-styles-container';\nconst SELECTOR_PREFIX = '.elementor';\n\nexport function initStylesRenderer() {\n\tlet abortController: AbortController | null = null;\n\n\tconst resolve = createPropsResolver( styleTransformers, { onPropResolve: enqueueUsedFonts } );\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tstylesRepository.subscribe( async () => {\n\t\t\tconst styleContainer = getStylesContainer();\n\n\t\t\t// Styles should be printed in a reversed order, so the high priority styles will be printed last.\n\t\t\tconst styles = stylesRepository.all().reverse();\n\t\t\tconst breakpoints = getBreakpointsMap();\n\t\t\tconst schema = getStylesSchema();\n\n\t\t\tif ( abortController ) {\n\t\t\t\tabortController.abort();\n\t\t\t}\n\n\t\t\tabortController = new AbortController();\n\n\t\t\tstyleContainer.innerHTML = await renderStyles( {\n\t\t\t\tstyles,\n\t\t\t\tresolve,\n\t\t\t\tbreakpoints,\n\t\t\t\tselectorPrefix: SELECTOR_PREFIX,\n\t\t\t\tsignal: abortController.signal,\n\t\t\t\tschema,\n\t\t\t} );\n\t\t} );\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\nfunction enqueueUsedFonts( { key, value }: { key: string; value: unknown } ) {\n\tif ( key !== 'font-family' || typeof value !== 'string' ) {\n\t\treturn;\n\t}\n\n\tenqueueFont( value );\n}\n","import {\n\tisTransformable,\n\ttype PropKey,\n\ttype Props,\n\ttype PropsSchema,\n\ttype PropType,\n\ttype PropValue,\n} from '@elementor/editor-props';\n\nimport { getMultiPropsValue, isMultiProps } from './multi-props';\nimport { type TransformersMap } from './types';\n\ntype CreatePropResolverOptions = {\n\tonPropResolve?: ( args: { key: string; value: unknown } ) => void;\n};\n\ntype ResolveArgs = {\n\tprops: Props;\n\tschema: PropsSchema;\n\tsignal?: AbortSignal;\n};\n\ntype TransformArgs = {\n\tvalue: unknown;\n\tkey: PropKey;\n\ttype: PropType;\n\tsignal?: AbortSignal;\n\tdepth?: number;\n};\n\nexport type PropsResolver = ReturnType< typeof createPropsResolver >;\n\nconst TRANSFORM_DEPTH_LIMIT = 3;\n\nexport function createPropsResolver(\n\ttransformers: TransformersMap,\n\t{ onPropResolve }: CreatePropResolverOptions = {}\n) {\n\tasync function transform( { value, key, type, signal, depth = 0 }: TransformArgs ) {\n\t\tif ( value === null || value === undefined ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( ! isTransformable( value ) ) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( depth > TRANSFORM_DEPTH_LIMIT ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( value.disabled === true ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type.kind === 'union' ) {\n\t\t\ttype = type.prop_types[ value.$$type ];\n\n\t\t\tif ( ! type ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Warning: This variable is loosely-typed - use with caution.\n\t\tlet resolvedValue = value.value;\n\n\t\tif ( type.kind === 'object' ) {\n\t\t\tresolvedValue = await resolve( {\n\t\t\t\tprops: resolvedValue,\n\t\t\t\tschema: type.shape,\n\t\t\t\tsignal,\n\t\t\t} );\n\t\t}\n\n\t\tif ( type.kind === 'array' ) {\n\t\t\tresolvedValue = await Promise.all(\n\t\t\t\tresolvedValue.map( ( item: PropValue ) =>\n\t\t\t\t\ttransform( { value: item, key, type: type.item_prop_type, depth, signal } )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tconst transformer = transformers[ value.$$type ];\n\n\t\tif ( ! transformer ) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst transformed = await transformer( resolvedValue, { key, signal } );\n\n\t\t\treturn transform( { value: transformed, key, type, signal, depth: depth + 1 } );\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tasync function resolve( { props, schema, signal }: ResolveArgs ) {\n\t\tconst promises = Promise.all(\n\t\t\tObject.entries( schema ).map( async ( [ key, type ] ) => {\n\t\t\t\tconst value = props[ key ] ?? type.default;\n\n\t\t\t\tconst transformed = await transform( { value, key, type, signal } );\n\n\t\t\t\tif ( transformed === null ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tonPropResolve?.( { key, value: transformed } );\n\n\t\t\t\tif ( isMultiProps( transformed ) ) {\n\t\t\t\t\treturn getMultiPropsValue( transformed );\n\t\t\t\t}\n\n\t\t\t\treturn { [ key ]: transformed };\n\t\t\t} )\n\t\t);\n\n\t\treturn Object.assign( {}, ...( await promises ).filter( Boolean ) );\n\t}\n\n\treturn resolve;\n}\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\ntype 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 { createError } from '@elementor/utils';\n\nexport const UnknownStyleTypeError = createError< { type: string } >( {\n\tcode: 'unknown_style_type',\n\tmessage: 'Unknown style type',\n} );\n","import { type Props, type PropsSchema } from '@elementor/editor-props';\nimport { type Breakpoint, type BreakpointsMap } from '@elementor/editor-responsive';\nimport { type StyleDefinition, type StyleDefinitionState, type StyleDefinitionType } from '@elementor/editor-styles';\n\nimport { type PropsResolver } from './create-props-resolver';\nimport { UnknownStyleTypeError } from './errors';\n\ntype RenderParams = {\n\tresolve: PropsResolver;\n\tstyles: StyleDefinition[];\n\tschema: PropsSchema;\n\tbreakpoints: BreakpointsMap;\n\tselectorPrefix?: string;\n\tsignal?: AbortSignal;\n};\n\ntype PropsToCssArgs = {\n\tprops: Props;\n\tschema: PropsSchema;\n\tresolve: PropsResolver;\n\tsignal?: AbortSignal;\n};\n\nconst SELECTORS_MAP: Record< StyleDefinitionType, string > = {\n\tclass: '.',\n};\n\nexport default async function renderStyles( {\n\tresolve,\n\tstyles,\n\tschema,\n\tbreakpoints,\n\tselectorPrefix = '',\n\tsignal,\n}: RenderParams ) {\n\tconst stylesCssPromises = styles.map( async ( style ) => {\n\t\tconst variantCssPromises = Object.values( style.variants ).map( async ( variant ) => {\n\t\t\tconst css = await propsToCss( { props: variant.props, schema, resolve, signal } );\n\n\t\t\treturn createStyleWrapper()\n\t\t\t\t.forStyle( style )\n\t\t\t\t.withPrefix( selectorPrefix )\n\t\t\t\t.withState( variant.meta.state )\n\t\t\t\t.withMediaQuery( variant.meta.breakpoint ? breakpoints[ variant.meta.breakpoint ] : null )\n\t\t\t\t.wrap( css );\n\t\t} );\n\n\t\tconst variantsCss = await Promise.all( variantCssPromises );\n\n\t\treturn wrapCssWithStyleElement( style.id, variantsCss.join( '' ) );\n\t} );\n\n\tconst stylesCss = await Promise.all( stylesCssPromises );\n\n\treturn stylesCss.join( '' );\n}\n\nfunction createStyleWrapper( value: string = '', wrapper?: ( css: string ) => string ) {\n\treturn {\n\t\tforStyle: ( { id, type }: StyleDefinition ) => {\n\t\t\tconst symbol = SELECTORS_MAP[ type ];\n\n\t\t\tif ( ! symbol ) {\n\t\t\t\tthrow new UnknownStyleTypeError( { context: { type } } );\n\t\t\t}\n\n\t\t\treturn createStyleWrapper( `${ value }${ symbol }${ id }`, wrapper );\n\t\t},\n\n\t\twithPrefix: ( prefix: string ) =>\n\t\t\tcreateStyleWrapper( [ prefix, value ].filter( Boolean ).join( ' ' ), wrapper ),\n\n\t\twithState: ( state: StyleDefinitionState ) =>\n\t\t\tcreateStyleWrapper( state ? `${ value }:${ state }` : value, wrapper ),\n\n\t\twithMediaQuery: ( breakpoint: Breakpoint | null ) => {\n\t\t\tif ( ! breakpoint?.type ) {\n\t\t\t\treturn createStyleWrapper( value, wrapper );\n\t\t\t}\n\n\t\t\tconst size = `${ breakpoint.type }:${ breakpoint.width }px`;\n\n\t\t\treturn createStyleWrapper( value, ( css ) => `@media(${ size }){${ css }}` );\n\t\t},\n\n\t\twrap: ( css: string ) => {\n\t\t\tconst res = `${ value }{${ css }}`;\n\n\t\t\tif ( ! wrapper ) {\n\t\t\t\treturn res;\n\t\t\t}\n\n\t\t\treturn wrapper( res );\n\t\t},\n\t};\n}\n\nasync function propsToCss( { props, resolve, signal, schema }: PropsToCssArgs ) {\n\tconst transformed = await resolve( { props, schema, signal } );\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 wrapCssWithStyleElement( id: string, css: string ) {\n\treturn `<style data-style-id=\"${ id }\">${ css }</style>`;\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 BackgroundImageOverlayPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst DEFAULT_POSITION_VALUE = '0% 0%';\n\nconst backgroundImageOverlayTransformer: Transformer< BackgroundImageOverlayPropValue[ 'value' ] > = ( value ) => {\n\tconst { image: imageSrc, size = null, position = null, repeat = null, attachment = null } = value;\n\n\tif ( ! imageSrc ) {\n\t\treturn null;\n\t}\n\n\tconst backgroundStyles = [\n\t\timageSrc,\n\t\trepeat,\n\t\tattachment,\n\t\tsize ? `${ position || DEFAULT_POSITION_VALUE } / ${ size }` : position,\n\t].filter( Boolean );\n\n\treturn backgroundStyles.join( ' ' );\n};\n\nexport default backgroundImageOverlayTransformer;\n","import type { BackgroundImagePositionOffsetPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst backgroundImagePositionOffsetTransformer: Transformer< BackgroundImagePositionOffsetPropValue[ 'value' ] > = ( {\n\tx = '0px',\n\ty = '0px',\n} ) => `${ x } ${ y }`;\n\nexport default backgroundImagePositionOffsetTransformer;\n","import type { BackgroundImageSizeScalePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nconst backgroundImageSizeScaleTransformer: Transformer< BackgroundImageSizeScalePropValue[ 'value' ] > = ( {\n\twidth = 'auto',\n\theight = 'auto',\n} ) => `${ width } ${ height }`;\n\nexport default backgroundImageSizeScaleTransformer;\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\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\ntype CornerSizes = {\n\t'start-start'?: PropValue;\n\t'start-end'?: PropValue;\n\t'end-start'?: PropValue;\n\t'end-end'?: PropValue;\n};\n\ntype CreateCornerSizesTransformer = ( keyGenerator: ( cornerKey: string ) => string ) => Transformer< CornerSizes >;\n\nconst validCorners = [ 'start-start', 'start-end', 'end-start', 'end-end' ];\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\ntype EdgeSizes = {\n\ttop?: PropValue;\n\tright?: PropValue;\n\tbottom?: PropValue;\n\tleft?: PropValue;\n};\n\ntype 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 DimensionsPropValue, 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 dimensions: Transformer< DimensionsPropValue[ '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 dimensions;\n","import { type ImagePropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nexport const imageTransformer: Transformer< ImagePropValue[ 'value' ] > = ( value ) => {\n\tconst { src, size } = value;\n\n\tif ( src.url ) {\n\t\treturn `url(${ src.url })`;\n\t}\n\n\tconst sizeUrl = src.attachment?.sizes[ size ]?.url;\n\n\tif ( sizeUrl ) {\n\t\treturn `url(${ sizeUrl })`;\n\t}\n\n\tconst attachmentUrl = src.attachment?.url;\n\n\tif ( attachmentUrl ) {\n\t\treturn `url(${ attachmentUrl })`;\n\t}\n\n\treturn null;\n};\n","import { type ImageSrcPropValue } from '@elementor/editor-props';\nimport { getMediaAttachment } from '@elementor/wp-media';\n\nimport { type Transformer } from '../types';\n\nexport const imageAttachmentTransformer: Transformer< ImageSrcPropValue[ 'value' ][ 'id' ] > = async ( value ) => {\n\tconst attachment = await getMediaAttachment( { id: value } );\n\n\tif ( ! attachment ) {\n\t\treturn null;\n\t}\n\n\treturn attachment;\n};\n","import { type ImageSrcPropValue } from '@elementor/editor-props';\n\nimport { type Transformer } from '../types';\n\nexport const imageSrcTransformer: Transformer< ImageSrcPropValue[ 'value' ] > = ( value ) => ( {\n\tattachment: value.id,\n\turl: value.url,\n} );\n","import { type LayoutDirectionPropValue, type Props } from '@elementor/editor-props';\n\nimport { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst validKeys = [ 'row', 'column' ];\n\nconst layoutDirectionTransformer: Transformer< LayoutDirectionPropValue[ '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 layoutDirectionTransformer;\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 { createMultiPropsValue } from '../multi-props';\nimport { type Transformer } from '../types';\n\nconst strokeTransformer: Transformer< StrokePropValue[ 'value' ] > = ( value ) => {\n\tconst parsed = {\n\t\t'-webkit-text-stroke': `${ value.width } ${ value.color }`,\n\t\tstroke: `${ value.color }`,\n\t\t'stroke-width': `${ value.width }`,\n\t};\n\n\treturn createMultiPropsValue( parsed );\n};\n\nexport default strokeTransformer;\n","import { type TransformersMap } from '../types';\nimport backgroundColorOverlayTransformer from './background-color-overlay-transformer';\nimport backgroundImageOverlayTransformer from './background-image-overlay-transformer';\nimport backgroundImagePositionOffsetTransformer from './background-image-position-offset-transformer';\nimport backgroundImageSizeScaleTransformer from './background-image-size-scale-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 dimensions } from './dimensions';\nimport { imageTransformer } from './image';\nimport { imageAttachmentTransformer } from './image-attachment';\nimport { imageSrcTransformer } from './image-src';\nimport { default as layoutDirection } from './layout-direction-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 const styleTransformers: TransformersMap = {\n\tsize,\n\tshadow,\n\tstroke,\n\tbackground,\n\n\tcolor: primitiveTransformer,\n\tnumber: primitiveTransformer,\n\tstring: primitiveTransformer,\n\turl: primitiveTransformer,\n\n\tdimensions,\n\t'background-color-overlay': backgroundColorOverlayTransformer,\n\t'background-image-overlay': backgroundImageOverlayTransformer,\n\t'background-image-position-offset': backgroundImagePositionOffsetTransformer,\n\t'background-image-size-scale': backgroundImageSizeScaleTransformer,\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\n\t'image-attachment-id': imageAttachmentTransformer,\n\t'image-src': imageSrcTransformer,\n\timage: imageTransformer,\n\n\t'layout-direction': layoutDirection,\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,SAAS,qBAAqB;;;ACA9B,YAAYA,YAAW;AACvB,SAAS,mBAAmB,0BAA0B;AACtD;AAAA,EACC,6BAA6B;AAAA,EAC7B,6BAA6B;AAAA,OACvB;;;ACLP,YAAY,WAAW;AACvB,SAAS,KAAK,cAAc;AAC5B,SAAS,gBAAgB,UAAU,uBAAuB;;;ACF1D,SAAS,iBAAiB;AAInB,SAAS,2BAA4B,SAAsB,UAAwB;AACzF,YAAW,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,SAAS,gBAAgB;AACzB,SAAS,YAAY,QAAQ,MAAM,mBAAmB;AAO/C,SAAS,qBAAsB,EAAE,SAAS,WAAW,GAAa;AACxE,QAAM,CAAE,QAAQ,SAAU,IAAI,SAAU,KAAM;AAE9C,QAAM,EAAE,MAAM,gBAAgB,QAAQ,IAAI,YAAa;AAAA;AAAA,IAEtD,MAAM,UAAU;AAAA,IAChB,cAAc;AAAA;AAAA,IAGd,sBAAsB,IAAK,SAAU,WAAY,GAAG,MAAM,EAAE,gBAAgB,KAAK,CAAE;AAAA;AAAA,IAGnF,UAAU,EAAE,WAAW,QAAQ,kBAAkB;AAAA,IAEjD,YAAY;AAAA;AAAA,MAEX,KAAM;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,MAGF,OAAQ,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,aAAa,OAAQ,KAAK,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,IAAI,gBAAiB,CAAE,SAAU,OAAQ,CAAE,CAAE;AAEzF,6BAA4B,SAAS,iBAAkB;AAEvD,SACC,aACC,oCAAC,kBAAe,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,WAAW,mBAAmB;AACpC,QAAM,cAAc,kBAAkB;AAEtC,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,mBAAmB,iBAAkB,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,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAChC,SAAS,wBAAwB;AACjC,SAAS,qBAAqB,UAAU,oBAAoB;;;ACH5D;AAAA,EACC;AAAA,OAMM;;;ACAA,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;;;ADOA,IAAM,wBAAwB;AAEvB,SAAS,oBACf,cACA,EAAE,cAAc,IAA+B,CAAC,GAC/C;AACD,iBAAe,UAAW,EAAE,OAAO,KAAK,MAAM,QAAQ,QAAQ,EAAE,GAAmB;AAClF,QAAK,UAAU,QAAQ,UAAU,QAAY;AAC5C,aAAO;AAAA,IACR;AAEA,QAAK,CAAE,gBAAiB,KAAM,GAAI;AACjC,aAAO;AAAA,IACR;AAEA,QAAK,QAAQ,uBAAwB;AACpC,aAAO;AAAA,IACR;AAEA,QAAK,MAAM,aAAa,MAAO;AAC9B,aAAO;AAAA,IACR;AAEA,QAAK,KAAK,SAAS,SAAU;AAC5B,aAAO,KAAK,WAAY,MAAM,MAAO;AAErC,UAAK,CAAE,MAAO;AACb,eAAO;AAAA,MACR;AAAA,IACD;AAGA,QAAI,gBAAgB,MAAM;AAE1B,QAAK,KAAK,SAAS,UAAW;AAC7B,sBAAgB,MAAM,QAAS;AAAA,QAC9B,OAAO;AAAA,QACP,QAAQ,KAAK;AAAA,QACb;AAAA,MACD,CAAE;AAAA,IACH;AAEA,QAAK,KAAK,SAAS,SAAU;AAC5B,sBAAgB,MAAM,QAAQ;AAAA,QAC7B,cAAc;AAAA,UAAK,CAAE,SACpB,UAAW,EAAE,OAAO,MAAM,KAAK,MAAM,KAAK,gBAAgB,OAAO,OAAO,CAAE;AAAA,QAC3E;AAAA,MACD;AAAA,IACD;AAEA,UAAM,cAAc,aAAc,MAAM,MAAO;AAE/C,QAAK,CAAE,aAAc;AACpB,aAAO;AAAA,IACR;AAEA,QAAI;AACH,YAAM,cAAc,MAAM,YAAa,eAAe,EAAE,KAAK,OAAO,CAAE;AAEtE,aAAO,UAAW,EAAE,OAAO,aAAa,KAAK,MAAM,QAAQ,OAAO,QAAQ,EAAE,CAAE;AAAA,IAC/E,QAAQ;AACP,aAAO;AAAA,IACR;AAAA,EACD;AAEA,iBAAe,QAAS,EAAE,OAAO,QAAQ,OAAO,GAAiB;AAChE,UAAM,WAAW,QAAQ;AAAA,MACxB,OAAO,QAAS,MAAO,EAAE,IAAK,OAAQ,CAAE,KAAK,IAAK,MAAO;AACxD,cAAM,QAAQ,MAAO,GAAI,KAAK,KAAK;AAEnC,cAAM,cAAc,MAAM,UAAW,EAAE,OAAO,KAAK,MAAM,OAAO,CAAE;AAElE,YAAK,gBAAgB,MAAO;AAC3B;AAAA,QACD;AAEA,wBAAiB,EAAE,KAAK,OAAO,YAAY,CAAE;AAE7C,YAAK,aAAc,WAAY,GAAI;AAClC,iBAAO,mBAAoB,WAAY;AAAA,QACxC;AAEA,eAAO,EAAE,CAAE,GAAI,GAAG,YAAY;AAAA,MAC/B,CAAE;AAAA,IACH;AAEA,WAAO,OAAO,OAAQ,CAAC,GAAG,IAAK,MAAM,UAAW,OAAQ,OAAQ,CAAE;AAAA,EACnE;AAEA,SAAO;AACR;;;AE1HA,SAAS,mBAAmB;AAErB,IAAM,wBAAwB,YAAiC;AAAA,EACrE,MAAM;AAAA,EACN,SAAS;AACV,CAAE;;;ACkBF,IAAM,gBAAuD;AAAA,EAC5D,OAAO;AACR;AAEA,eAAO,aAAqC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB;AACD,GAAkB;AACjB,QAAM,oBAAoB,OAAO,IAAK,OAAQ,UAAW;AACxD,UAAM,qBAAqB,OAAO,OAAQ,MAAM,QAAS,EAAE,IAAK,OAAQ,YAAa;AACpF,YAAM,MAAM,MAAM,WAAY,EAAE,OAAO,QAAQ,OAAO,QAAQ,SAAS,OAAO,CAAE;AAEhF,aAAO,mBAAmB,EACxB,SAAU,KAAM,EAChB,WAAY,cAAe,EAC3B,UAAW,QAAQ,KAAK,KAAM,EAC9B,eAAgB,QAAQ,KAAK,aAAa,YAAa,QAAQ,KAAK,UAAW,IAAI,IAAK,EACxF,KAAM,GAAI;AAAA,IACb,CAAE;AAEF,UAAM,cAAc,MAAM,QAAQ,IAAK,kBAAmB;AAE1D,WAAO,wBAAyB,MAAM,IAAI,YAAY,KAAM,EAAG,CAAE;AAAA,EAClE,CAAE;AAEF,QAAM,YAAY,MAAM,QAAQ,IAAK,iBAAkB;AAEvD,SAAO,UAAU,KAAM,EAAG;AAC3B;AAEA,SAAS,mBAAoB,QAAgB,IAAI,SAAsC;AACtF,SAAO;AAAA,IACN,UAAU,CAAE,EAAE,IAAI,KAAK,MAAwB;AAC9C,YAAM,SAAS,cAAe,IAAK;AAEnC,UAAK,CAAE,QAAS;AACf,cAAM,IAAI,sBAAuB,EAAE,SAAS,EAAE,KAAK,EAAE,CAAE;AAAA,MACxD;AAEA,aAAO,mBAAoB,GAAI,KAAM,GAAI,MAAO,GAAI,EAAG,IAAI,OAAQ;AAAA,IACpE;AAAA,IAEA,YAAY,CAAE,WACb,mBAAoB,CAAE,QAAQ,KAAM,EAAE,OAAQ,OAAQ,EAAE,KAAM,GAAI,GAAG,OAAQ;AAAA,IAE9E,WAAW,CAAE,UACZ,mBAAoB,QAAQ,GAAI,KAAM,IAAK,KAAM,KAAK,OAAO,OAAQ;AAAA,IAEtE,gBAAgB,CAAE,eAAmC;AACpD,UAAK,CAAE,YAAY,MAAO;AACzB,eAAO,mBAAoB,OAAO,OAAQ;AAAA,MAC3C;AAEA,YAAMC,QAAO,GAAI,WAAW,IAAK,IAAK,WAAW,KAAM;AAEvD,aAAO,mBAAoB,OAAO,CAAE,QAAS,UAAWA,KAAK,KAAM,GAAI,GAAI;AAAA,IAC5E;AAAA,IAEA,MAAM,CAAE,QAAiB;AACxB,YAAM,MAAM,GAAI,KAAM,IAAK,GAAI;AAE/B,UAAK,CAAE,SAAU;AAChB,eAAO;AAAA,MACR;AAEA,aAAO,QAAS,GAAI;AAAA,IACrB;AAAA,EACD;AACD;AAEA,eAAe,WAAY,EAAE,OAAO,SAAS,QAAQ,OAAO,GAAoB;AAC/E,QAAM,cAAc,MAAM,QAAS,EAAE,OAAO,QAAQ,OAAO,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,wBAAyB,IAAY,KAAc;AAC3D,SAAO,yBAA0B,EAAG,KAAM,GAAI;AAC/C;;;AC3GA,IAAM,oCAA+F,CAAE,UAAW;AACjH,SAAO,mBAAoB,KAAM,KAAM,KAAM;AAC9C;AAEA,IAAO,+CAAQ;;;ACJf,IAAM,yBAAyB;AAE/B,IAAM,oCAA+F,CAAE,UAAW;AACjH,QAAM,EAAE,OAAO,UAAU,MAAAC,QAAO,MAAM,WAAW,MAAM,SAAS,MAAM,aAAa,KAAK,IAAI;AAE5F,MAAK,CAAE,UAAW;AACjB,WAAO;AAAA,EACR;AAEA,QAAM,mBAAmB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACAA,QAAO,GAAI,YAAY,sBAAuB,MAAOA,KAAK,KAAK;AAAA,EAChE,EAAE,OAAQ,OAAQ;AAElB,SAAO,iBAAiB,KAAM,GAAI;AACnC;AAEA,IAAO,+CAAQ;;;ACnBf,IAAM,2CAA6G,CAAE;AAAA,EACpH,IAAI;AAAA,EACJ,IAAI;AACL,MAAO,GAAI,CAAE,IAAK,CAAE;AAEpB,IAAO,uDAAQ;;;ACLf,IAAM,sCAAmG,CAAE;AAAA,EAC1G,QAAQ;AAAA,EACR,SAAS;AACV,MAAO,GAAI,KAAM,IAAK,MAAO;AAE7B,IAAO,kDAAQ;;;ACLf,IAAM,wBAAuE,CAAE,UAAW;AACzF,QAAM,WAAW,MAAO,oBAAqB,KAAK;AAClD,QAAM,QAAQ,MAAM,SAAS;AAE7B,SAAO,GAAI,QAAS,IAAK,KAAM,GAAG,KAAK;AACxC;AAEA,IAAO,iCAAQ;;;ACPf,IAAM,gCAA+D,CAAE,cAAe;AACrF,SAAO,CAAE,UAAW,MAAM,OAAQ,OAAQ,EAAE,KAAM,SAAU;AAC7D;AAEA,IAAO,2CAAQ;;;ACMf,IAAM,eAAe,CAAE,eAAe,aAAa,aAAa,SAAU;AAE1E,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;;;AChBf,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,SAAS,UAAU,MAAO;AAErD,IAAM,aAA4D,CAAE,OAAO,EAAE,IAAI,MAAO;AACvF,QAAM,SAAS,OAAO,QAAS,KAAM,EAAE,OAAiB,CAAE,KAAK,CAAE,cAAc,cAAe,MAAO;AACpG,QAAK,kBAAkB,UAAU,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,qBAAQ;;;ACfR,IAAM,mBAA6D,CAAE,UAAW;AACtF,QAAM,EAAE,KAAK,MAAAC,MAAK,IAAI;AAEtB,MAAK,IAAI,KAAM;AACd,WAAO,OAAQ,IAAI,GAAI;AAAA,EACxB;AAEA,QAAM,UAAU,IAAI,YAAY,MAAOA,KAAK,GAAG;AAE/C,MAAK,SAAU;AACd,WAAO,OAAQ,OAAQ;AAAA,EACxB;AAEA,QAAM,gBAAgB,IAAI,YAAY;AAEtC,MAAK,eAAgB;AACpB,WAAO,OAAQ,aAAc;AAAA,EAC9B;AAEA,SAAO;AACR;;;ACvBA,SAAS,0BAA0B;AAI5B,IAAM,6BAAkF,OAAQ,UAAW;AACjH,QAAM,aAAa,MAAM,mBAAoB,EAAE,IAAI,MAAM,CAAE;AAE3D,MAAK,CAAE,YAAa;AACnB,WAAO;AAAA,EACR;AAEA,SAAO;AACR;;;ACTO,IAAM,sBAAmE,CAAE,WAAa;AAAA,EAC9F,YAAY,MAAM;AAAA,EAClB,KAAK,MAAM;AACZ;;;ACFA,IAAMC,aAAY,CAAE,OAAO,QAAS;AAEpC,IAAM,6BAAiF,CAAE,OAAO,EAAE,IAAI,MAAO;AAC5G,QAAM,SAAS,OAAO,QAAS,KAAM,EAAE,OAAiB,CAAE,KAAK,CAAE,cAAc,cAAe,MAAO;AACpG,QAAK,kBAAkBA,WAAU,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,uCAAQ;;;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;;;ACHf,IAAM,oBAA+D,CAAE,UAAW;AACjF,QAAM,SAAS;AAAA,IACd,uBAAuB,GAAI,MAAM,KAAM,IAAK,MAAM,KAAM;AAAA,IACxD,QAAQ,GAAI,MAAM,KAAM;AAAA,IACxB,gBAAgB,GAAI,MAAM,KAAM;AAAA,EACjC;AAEA,SAAO,sBAAuB,MAAO;AACtC;AAEA,IAAO,6BAAQ;;;ACIR,IAAM,oBAAqC;AAAA,EACjD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,KAAK;AAAA,EAEL;AAAA,EACA,4BAA4B;AAAA,EAC5B,4BAA4B;AAAA,EAC5B,oCAAoC;AAAA,EACpC,+BAA+B;AAAA,EAC/B,sBAAsB,yCAA+B,GAAI;AAAA,EAEzD,cAAc,yCAA+B,GAAI;AAAA,EAEjD,gBAAgB,sCAA4B,CAAE,YAAa,UAAW,OAAQ,QAAS;AAAA,EACvF,iBAAiB,wCAA8B,CAAE,cAAe,UAAW,SAAU,SAAU;AAAA,EAE/F,uBAAuB;AAAA,EACvB,aAAa;AAAA,EACb,OAAO;AAAA,EAEP,oBAAoB;AACrB;;;AC7CO,IAAM,cAA2B,CAAE,YAAY,UAAU,cAAe;AAC9E,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,SAAS,cAAe,YAAY,OAAQ,KAAK;AACnF;;;ACJO,SAAS,sBAAsB;AACrC,QAAM,iBAAiB;AAEvB,SAAO,eAAe,WAAW,WAAY,CAAE,GAAG,iBAAiB;AACpE;;;AxBKA,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB;AAEjB,SAAS,qBAAqB;AACpC,MAAI,kBAA0C;AAE9C,QAAM,UAAU,oBAAqB,mBAAmB,EAAE,eAAe,iBAAiB,CAAE;AAE5F,WAAU,aAAa,GAAG,MAAM;AAC/B,qBAAiB,UAAW,YAAY;AACvC,YAAM,iBAAiB,mBAAmB;AAG1C,YAAM,SAAS,iBAAiB,IAAI,EAAE,QAAQ;AAC9C,YAAM,cAAc,kBAAkB;AACtC,YAAM,SAAS,gBAAgB;AAE/B,UAAK,iBAAkB;AACtB,wBAAgB,MAAM;AAAA,MACvB;AAEA,wBAAkB,IAAI,gBAAgB;AAEtC,qBAAe,YAAY,MAAM,aAAc;AAAA,QAC9C;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,QAChB,QAAQ,gBAAgB;AAAA,QACxB;AAAA,MACD,CAAE;AAAA,IACH,CAAE;AAAA,EACH,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;AAEA,SAAS,iBAAkB,EAAE,KAAK,MAAM,GAAqC;AAC5E,MAAK,QAAQ,iBAAiB,OAAO,UAAU,UAAW;AACzD;AAAA,EACD;AAEA,cAAa,KAAM;AACpB;;;ALtEO,SAAS,OAAO;AACtB,qBAAmB;AAEnB,gBAAe;AAAA,IACd,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AACH;;;A8BVA,KAAK;","names":["React","size","size","size","validKeys"]}
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/transformers/create-transformers-registry.ts","../src/style-transformers-registry.ts","../src/transformers/create-transformer.ts","../src/transformers/styles/background-color-overlay-transformer.ts","../src/transformers/styles/background-image-overlay-transformer.ts","../src/transformers/styles/background-image-position-offset-transformer.ts","../src/transformers/styles/background-image-size-scale-transformer.ts","../src/transformers/styles/background-transformer.ts","../src/transformers/styles/create-combine-array-transformer.ts","../src/renderers/multi-props.ts","../src/transformers/styles/create-multi-props-transformer.ts","../src/transformers/styles/image-attachment-transformer.ts","../src/transformers/styles/image-src-transformer.ts","../src/transformers/styles/image-transformer.ts","../src/transformers/styles/primitive-transformer.ts","../src/transformers/styles/shadow-transformer.ts","../src/transformers/styles/size-transformer.ts","../src/transformers/styles/stroke-transformer.ts","../src/init-style-transformers.ts","../src/init-styles-renderer.ts","../src/renderers/create-props-resolver.ts","../src/renderers/errors.ts","../src/renderers/render-styles.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 { initStyleTransformers } from './init-style-transformers';\nimport { initStylesRenderer } from './init-styles-renderer';\n\nexport function init() {\n\tinitStyleTransformers();\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 { type AnyTransformer, type TransformerName, type TransformersMap } from './types';\n\nexport function createTransformersRegistry() {\n\tconst transformers: TransformersMap = {};\n\n\treturn {\n\t\tregister( name: TransformerName, transformer: AnyTransformer ) {\n\t\t\ttransformers[ name ] = transformer;\n\n\t\t\treturn this;\n\t\t},\n\t\tall() {\n\t\t\treturn transformers;\n\t\t},\n\t};\n}\n","import { createTransformersRegistry } from './transformers/create-transformers-registry';\n\nexport const styleTransformersRegistry = createTransformersRegistry();\n","import { type Transformer } from './types';\n\n// Wrap transformer for better DX (types) + it will allow us to add more features in the future.\nexport function createTransformer< TValue >( cb: Transformer< TValue > ): Transformer< TValue > {\n\treturn cb;\n}\n","import { createTransformer } from '../create-transformer';\n\nexport const backgroundColorOverlayTransformer = createTransformer(\n\t( value: string ) => `linear-gradient(${ value }, ${ value })`\n);\n","import { createTransformer } from '../create-transformer';\n\nconst DEFAULT_POSITION_VALUE = '0% 0%';\n\ntype BackgroundImageOverlay = {\n\timage?: string;\n\tsize?: string;\n\tposition?: string;\n\trepeat?: string;\n\tattachment?: string;\n};\n\nexport const backgroundImageOverlayTransformer = createTransformer( ( value: BackgroundImageOverlay ) => {\n\tconst { image, size = null, position = null, repeat = null, attachment = null } = value;\n\n\tif ( ! image ) {\n\t\treturn null;\n\t}\n\n\tconst backgroundStyles = [\n\t\timage,\n\t\trepeat,\n\t\tattachment,\n\t\tsize ? `${ position || DEFAULT_POSITION_VALUE } / ${ size }` : position,\n\t].filter( Boolean );\n\n\treturn backgroundStyles.join( ' ' );\n} );\n","import { createTransformer } from '../create-transformer';\n\ntype BackgroundImagePositionOffset = {\n\tx?: string;\n\ty?: string;\n};\n\nexport const backgroundImagePositionOffsetTransformer = createTransformer(\n\t( { x = '0px', y = '0px' }: BackgroundImagePositionOffset ) => `${ x } ${ y }`\n);\n","import { createTransformer } from '../create-transformer';\n\ntype BackgroundImageSizeScale = {\n\twidth?: string;\n\theight?: string;\n};\n\nexport const backgroundImageSizeScaleTransformer = createTransformer(\n\t( { width = 'auto', height = 'auto' }: BackgroundImageSizeScale ) => `${ width } ${ height }`\n);\n","import { createTransformer } from '../create-transformer';\n\ntype Background = {\n\t'background-overlay'?: string;\n\tcolor?: string;\n};\n\nexport const backgroundTransformer = createTransformer( ( value: Background ) => {\n\tconst overlays = value[ 'background-overlay' ] ?? '';\n\tconst color = value.color ?? '';\n\n\treturn `${ overlays } ${ color }`.trim();\n} );\n","import { createTransformer } from '../create-transformer';\n\nexport const createCombineArrayTransformer = ( delimiter: string ) => {\n\treturn createTransformer( ( value: Array< string | number > ) => value.filter( Boolean ).join( delimiter ) );\n};\n","import { type Props, type PropValue } from '@elementor/editor-props';\n\ntype 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 { createMultiPropsValue } from '../../renderers/multi-props';\nimport { createTransformer } from '../create-transformer';\n\ntype KeyGenerator = ( { propKey, key }: { propKey: string; key: string } ) => string;\n\nexport const createMultiPropsTransformer = ( keys: string[], keyGenerator: KeyGenerator ) => {\n\treturn createTransformer( ( value: Record< string, string >, { key: propKey } ) => {\n\t\tconst entries = keys\n\t\t\t.filter( ( key ) => value[ key ] )\n\t\t\t.map( ( key ) => [ keyGenerator( { propKey, key } ), value[ key ] ] );\n\n\t\treturn createMultiPropsValue( Object.fromEntries( entries ) );\n\t} );\n};\n","import { getMediaAttachment } from '@elementor/wp-media';\n\nimport { createTransformer } from '../create-transformer';\n\ntype ImageAttachmentId = number;\n\nexport const imageAttachmentTransformer = createTransformer( async ( value: ImageAttachmentId ) => {\n\tconst attachment = await getMediaAttachment( { id: value } );\n\n\tif ( ! attachment ) {\n\t\treturn null;\n\t}\n\n\treturn attachment;\n} );\n","import { createTransformer } from '../create-transformer';\n\ntype ImageSrc = {\n\tid?: unknown;\n\turl?: unknown;\n};\n\nexport const imageSrcTransformer = createTransformer( ( value: ImageSrc ) => ( {\n\tattachment: value.id,\n\turl: value.url,\n} ) );\n","import { createTransformer } from '../create-transformer';\n\ntype Image = {\n\tsrc?: {\n\t\turl?: string;\n\t\tattachment?: {\n\t\t\turl?: string;\n\t\t\tsizes?: Record< string, { url: string } >;\n\t\t};\n\t};\n\tsize?: string;\n};\n\nexport const imageTransformer = createTransformer( ( value: Image ) => {\n\tconst { src, size } = value;\n\n\tif ( src?.url ) {\n\t\treturn `url(${ src.url })`;\n\t}\n\n\tconst sizeUrl = src?.attachment?.sizes?.[ size ?? '' ]?.url;\n\n\tif ( sizeUrl ) {\n\t\treturn `url(${ sizeUrl })`;\n\t}\n\n\tconst attachmentUrl = src?.attachment?.url;\n\n\tif ( attachmentUrl ) {\n\t\treturn `url(${ attachmentUrl })`;\n\t}\n\n\treturn null;\n} );\n","import { createTransformer } from '../create-transformer';\n\nexport const primitiveTransformer = createTransformer( ( value: unknown ) => value );\n","import { createTransformer } from '../create-transformer';\n\ntype Shadow = {\n\thOffset?: string;\n\tvOffset?: string;\n\tblur?: string;\n\tspread?: string;\n\tcolor?: string;\n\tposition?: string;\n};\n\nexport const shadowTransformer = createTransformer( ( value: Shadow ) => {\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","import { createTransformer } from '../create-transformer';\n\ntype Size = {\n\tsize?: number;\n\tunit?: string;\n};\n\nexport const sizeTransformer = createTransformer( ( value: Size ) => {\n\treturn `${ value.size }${ value.unit }`;\n} );\n","import { createMultiPropsValue } from '../../renderers/multi-props';\nimport { createTransformer } from '../create-transformer';\n\ntype Stroke = {\n\twidth?: string;\n\tcolor?: string;\n};\n\nexport const strokeTransformer = createTransformer( ( value: Stroke ) => {\n\tconst parsed = {\n\t\t'-webkit-text-stroke': `${ value.width } ${ value.color }`,\n\t\tstroke: `${ value.color }`,\n\t\t'stroke-width': `${ value.width }`,\n\t};\n\n\treturn createMultiPropsValue( parsed );\n} );\n","import { styleTransformersRegistry } from './style-transformers-registry';\nimport { backgroundColorOverlayTransformer } from './transformers/styles/background-color-overlay-transformer';\nimport { backgroundImageOverlayTransformer } from './transformers/styles/background-image-overlay-transformer';\nimport { backgroundImagePositionOffsetTransformer } from './transformers/styles/background-image-position-offset-transformer';\nimport { backgroundImageSizeScaleTransformer } from './transformers/styles/background-image-size-scale-transformer';\nimport { backgroundTransformer } from './transformers/styles/background-transformer';\nimport { createCombineArrayTransformer } from './transformers/styles/create-combine-array-transformer';\nimport { createMultiPropsTransformer } from './transformers/styles/create-multi-props-transformer';\nimport { imageAttachmentTransformer } from './transformers/styles/image-attachment-transformer';\nimport { imageSrcTransformer } from './transformers/styles/image-src-transformer';\nimport { imageTransformer } from './transformers/styles/image-transformer';\nimport { primitiveTransformer } from './transformers/styles/primitive-transformer';\nimport { shadowTransformer } from './transformers/styles/shadow-transformer';\nimport { sizeTransformer } from './transformers/styles/size-transformer';\nimport { strokeTransformer } from './transformers/styles/stroke-transformer';\n\nexport function initStyleTransformers() {\n\tstyleTransformersRegistry\n\t\t.register( 'size', sizeTransformer )\n\t\t.register( 'shadow', shadowTransformer )\n\t\t.register( 'stroke', strokeTransformer )\n\t\t.register(\n\t\t\t'dimensions',\n\t\t\tcreateMultiPropsTransformer(\n\t\t\t\t[ 'top', 'right', 'bottom', 'left' ],\n\t\t\t\t( { propKey, key } ) => `${ propKey }-${ key }`\n\t\t\t)\n\t\t)\n\t\t.register( 'color', primitiveTransformer )\n\t\t.register( 'number', primitiveTransformer )\n\t\t.register( 'string', primitiveTransformer )\n\t\t.register( 'url', primitiveTransformer )\n\t\t.register( 'box-shadow', createCombineArrayTransformer( ',' ) )\n\t\t.register( 'background', backgroundTransformer )\n\t\t.register( 'background-overlay', createCombineArrayTransformer( ',' ) )\n\t\t.register( 'background-color-overlay', backgroundColorOverlayTransformer )\n\t\t.register( 'background-image-overlay', backgroundImageOverlayTransformer )\n\t\t.register( 'background-image-position-offset', backgroundImagePositionOffsetTransformer )\n\t\t.register( 'background-image-size-scale', backgroundImageSizeScaleTransformer )\n\t\t.register( 'image-attachment-id', imageAttachmentTransformer )\n\t\t.register( 'image-src', imageSrcTransformer )\n\t\t.register( 'image', imageTransformer )\n\t\t.register(\n\t\t\t'layout-direction',\n\t\t\tcreateMultiPropsTransformer( [ 'row', 'column' ], ( { propKey, key } ) => `${ key }-${ propKey }` )\n\t\t)\n\t\t.register(\n\t\t\t'border-width',\n\t\t\tcreateMultiPropsTransformer( [ 'top', 'right', 'bottom', 'left' ], ( { key } ) => `border-${ key }-width` )\n\t\t)\n\t\t.register(\n\t\t\t'border-radius',\n\t\t\tcreateMultiPropsTransformer(\n\t\t\t\t[ 'start-start', 'start-end', 'end-start', 'end-end' ],\n\t\t\t\t( { key } ) => `border-${ key }-radius`\n\t\t\t)\n\t\t);\n}\n","import { getBreakpointsMap } from '@elementor/editor-responsive';\nimport { getStylesSchema } from '@elementor/editor-styles';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __privateListenTo as listenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';\n\nimport { createPropsResolver } from './renderers/create-props-resolver';\nimport renderStyles from './renderers/render-styles';\nimport { styleTransformersRegistry } from './style-transformers-registry';\nimport { enqueueFont } from './sync/enqueue-font';\nimport { getCanvasIframeBody } from './sync/get-canvas-iframe-body';\n\nconst WRAPPER_DATA_ATTR = 'data-styles-container';\nconst SELECTOR_PREFIX = '.elementor';\n\nexport function initStylesRenderer() {\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tlet abortController: AbortController | null = null;\n\n\t\tconst resolve = createPropsResolver( {\n\t\t\ttransformers: styleTransformersRegistry.all(),\n\t\t\tschema: getStylesSchema(),\n\t\t\tonPropResolve: enqueueUsedFonts,\n\t\t} );\n\n\t\tstylesRepository.subscribe( async () => {\n\t\t\tconst styleContainer = getStylesContainer();\n\n\t\t\t// Styles should be printed in a reversed order, so the high priority styles will be printed last.\n\t\t\tconst styles = stylesRepository.all().reverse();\n\t\t\tconst breakpoints = getBreakpointsMap();\n\n\t\t\tif ( abortController ) {\n\t\t\t\tabortController.abort();\n\t\t\t}\n\n\t\t\tabortController = new AbortController();\n\n\t\t\tstyleContainer.innerHTML = await renderStyles( {\n\t\t\t\tstyles,\n\t\t\t\tresolve,\n\t\t\t\tbreakpoints,\n\t\t\t\tselectorPrefix: SELECTOR_PREFIX,\n\t\t\t\tsignal: abortController.signal,\n\t\t\t} );\n\t\t} );\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\nfunction enqueueUsedFonts( { key, value }: { key: string; value: unknown } ) {\n\tif ( key !== 'font-family' || typeof value !== 'string' ) {\n\t\treturn;\n\t}\n\n\tenqueueFont( value );\n}\n","import {\n\tisTransformable,\n\ttype PropKey,\n\ttype Props,\n\ttype PropsSchema,\n\ttype PropType,\n\ttype PropValue,\n} from '@elementor/editor-props';\n\nimport { type TransformersMap } from '../transformers/types';\nimport { getMultiPropsValue, isMultiProps } from './multi-props';\n\ntype CreatePropResolverArgs = {\n\ttransformers: TransformersMap;\n\tschema: PropsSchema;\n\tonPropResolve?: ( args: { key: string; value: unknown } ) => void;\n};\n\ntype ResolveArgs = {\n\tprops: Props;\n\tschema?: PropsSchema;\n\tsignal?: AbortSignal;\n};\n\ntype TransformArgs = {\n\tvalue: unknown;\n\tkey: PropKey;\n\ttype: PropType;\n\tsignal?: AbortSignal;\n\tdepth?: number;\n};\n\nexport type PropsResolver = ReturnType< typeof createPropsResolver >;\n\nconst TRANSFORM_DEPTH_LIMIT = 3;\n\nexport function createPropsResolver( { transformers, schema: initialSchema, onPropResolve }: CreatePropResolverArgs ) {\n\tasync function resolve( { props, schema, signal }: ResolveArgs ) {\n\t\tschema = schema ?? initialSchema;\n\n\t\tconst promises = Promise.all(\n\t\t\tObject.entries( schema ).map( async ( [ key, type ] ) => {\n\t\t\t\tconst value = props[ key ] ?? type.default;\n\n\t\t\t\tconst transformed = await transform( { value, key, type, signal } );\n\n\t\t\t\tif ( transformed === null ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tonPropResolve?.( { key, value: transformed } );\n\n\t\t\t\tif ( isMultiProps( transformed ) ) {\n\t\t\t\t\treturn getMultiPropsValue( transformed );\n\t\t\t\t}\n\n\t\t\t\treturn { [ key ]: transformed };\n\t\t\t} )\n\t\t);\n\n\t\treturn Object.assign( {}, ...( await promises ).filter( Boolean ) );\n\t}\n\n\tasync function transform( { value, key, type, signal, depth = 0 }: TransformArgs ) {\n\t\tif ( value === null || value === undefined ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( ! isTransformable( value ) ) {\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( depth > TRANSFORM_DEPTH_LIMIT ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( value.disabled === true ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif ( type.kind === 'union' ) {\n\t\t\ttype = type.prop_types[ value.$$type ];\n\n\t\t\tif ( ! type ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\t// Warning: This variable is loosely-typed - use with caution.\n\t\tlet resolvedValue = value.value;\n\n\t\tif ( type.kind === 'object' ) {\n\t\t\tresolvedValue = await resolve( {\n\t\t\t\tprops: resolvedValue,\n\t\t\t\tschema: type.shape,\n\t\t\t\tsignal,\n\t\t\t} );\n\t\t}\n\n\t\tif ( type.kind === 'array' ) {\n\t\t\tresolvedValue = await Promise.all(\n\t\t\t\tresolvedValue.map( ( item: PropValue ) =>\n\t\t\t\t\ttransform( { value: item, key, type: type.item_prop_type, depth, signal } )\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tconst transformer = transformers[ value.$$type ];\n\n\t\tif ( ! transformer ) {\n\t\t\treturn null;\n\t\t}\n\n\t\ttry {\n\t\t\tconst transformed = await transformer( resolvedValue, { key, signal } );\n\n\t\t\treturn transform( { value: transformed, key, type, signal, depth: depth + 1 } );\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\treturn resolve;\n}\n","import { createError } from '@elementor/utils';\n\nexport const UnknownStyleTypeError = createError< { type: string } >( {\n\tcode: 'unknown_style_type',\n\tmessage: 'Unknown style type',\n} );\n","import { type Props } from '@elementor/editor-props';\nimport { type Breakpoint, type BreakpointsMap } from '@elementor/editor-responsive';\nimport { type StyleDefinition, type StyleDefinitionState, type StyleDefinitionType } from '@elementor/editor-styles';\n\nimport { type PropsResolver } from './create-props-resolver';\nimport { UnknownStyleTypeError } from './errors';\n\ntype RenderParams = {\n\tresolve: PropsResolver;\n\tstyles: StyleDefinition[];\n\tbreakpoints: BreakpointsMap;\n\tselectorPrefix?: string;\n\tsignal?: AbortSignal;\n};\n\ntype PropsToCssArgs = {\n\tprops: Props;\n\tresolve: PropsResolver;\n\tsignal?: AbortSignal;\n};\n\nconst SELECTORS_MAP: Record< StyleDefinitionType, string > = {\n\tclass: '.',\n};\n\nexport default async function renderStyles( {\n\tresolve,\n\tstyles,\n\tbreakpoints,\n\tselectorPrefix = '',\n\tsignal,\n}: RenderParams ) {\n\tconst stylesCssPromises = styles.map( async ( style ) => {\n\t\tconst variantCssPromises = Object.values( style.variants ).map( async ( variant ) => {\n\t\t\tconst css = await propsToCss( { props: variant.props, resolve, signal } );\n\n\t\t\treturn createStyleWrapper()\n\t\t\t\t.forStyle( style )\n\t\t\t\t.withPrefix( selectorPrefix )\n\t\t\t\t.withState( variant.meta.state )\n\t\t\t\t.withMediaQuery( variant.meta.breakpoint ? breakpoints[ variant.meta.breakpoint ] : null )\n\t\t\t\t.wrap( css );\n\t\t} );\n\n\t\tconst variantsCss = await Promise.all( variantCssPromises );\n\n\t\treturn wrapCssWithStyleElement( style.id, variantsCss.join( '' ) );\n\t} );\n\n\tconst stylesCss = await Promise.all( stylesCssPromises );\n\n\treturn stylesCss.join( '' );\n}\n\nfunction createStyleWrapper( value: string = '', wrapper?: ( css: string ) => string ) {\n\treturn {\n\t\tforStyle: ( { id, type }: StyleDefinition ) => {\n\t\t\tconst symbol = SELECTORS_MAP[ type ];\n\n\t\t\tif ( ! symbol ) {\n\t\t\t\tthrow new UnknownStyleTypeError( { context: { type } } );\n\t\t\t}\n\n\t\t\treturn createStyleWrapper( `${ value }${ symbol }${ id }`, wrapper );\n\t\t},\n\n\t\twithPrefix: ( prefix: string ) =>\n\t\t\tcreateStyleWrapper( [ prefix, value ].filter( Boolean ).join( ' ' ), wrapper ),\n\n\t\twithState: ( state: StyleDefinitionState ) =>\n\t\t\tcreateStyleWrapper( state ? `${ value }:${ state }` : value, wrapper ),\n\n\t\twithMediaQuery: ( breakpoint: Breakpoint | null ) => {\n\t\t\tif ( ! breakpoint?.type ) {\n\t\t\t\treturn createStyleWrapper( value, wrapper );\n\t\t\t}\n\n\t\t\tconst size = `${ breakpoint.type }:${ breakpoint.width }px`;\n\n\t\t\treturn createStyleWrapper( value, ( css ) => `@media(${ size }){${ css }}` );\n\t\t},\n\n\t\twrap: ( css: string ) => {\n\t\t\tconst res = `${ value }{${ css }}`;\n\n\t\t\tif ( ! wrapper ) {\n\t\t\t\treturn res;\n\t\t\t}\n\n\t\t\treturn wrapper( res );\n\t\t},\n\t};\n}\n\nasync function propsToCss( { props, resolve, signal }: PropsToCssArgs ) {\n\tconst transformed = await resolve( { props, signal } );\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 wrapCssWithStyleElement( id: string, css: string ) {\n\treturn `<style data-style-id=\"${ id }\">${ css }</style>`;\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\nexport { styleTransformersRegistry } from './style-transformers-registry';\n\ninit();\n"],"mappings":"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","names":["React","size","size","size"]}
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.9.0",
4
+ "version": "0.10.0",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -37,11 +37,11 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "@elementor/editor": "0.18.0",
40
- "@elementor/editor-elements": "0.5.3",
41
- "@elementor/editor-props": "0.9.1",
40
+ "@elementor/editor-elements": "0.5.4",
41
+ "@elementor/editor-props": "0.9.2",
42
42
  "@elementor/editor-responsive": "0.13.0",
43
- "@elementor/editor-styles": "0.5.6",
44
- "@elementor/editor-styles-repository": "0.7.1",
43
+ "@elementor/editor-styles": "0.5.7",
44
+ "@elementor/editor-styles-repository": "0.7.2",
45
45
  "@elementor/editor-v1-adapters": "0.10.0",
46
46
  "@elementor/ui": "1.26.0",
47
47
  "@elementor/utils": "0.3.1",
@@ -29,6 +29,13 @@ export const stylesSchemaMock = {
29
29
  },
30
30
  },
31
31
  },
32
+ 'font-style': {
33
+ kind: 'plain',
34
+ key: 'string',
35
+ default: null,
36
+ meta: {},
37
+ settings: {},
38
+ },
32
39
  'text-stroke': {
33
40
  kind: 'object',
34
41
  key: 'stroke',
@@ -1,16 +1,17 @@
1
- import { createDOMElement, createMockStyleDefinition, dispatchV1ReadyEvent } from 'test-utils';
1
+ import { createDOMElement, createMockPropType, createMockStyleDefinition, dispatchV1ReadyEvent } from 'test-utils';
2
2
  import { type BreakpointsMap, getBreakpointsMap } from '@elementor/editor-responsive';
3
+ import { getStylesSchema } from '@elementor/editor-styles';
3
4
  import { stylesRepository } from '@elementor/editor-styles-repository';
4
5
  import { waitFor } from '@testing-library/react';
5
6
 
6
7
  import { initStylesRenderer as initStylesRendererBase } from '../init-styles-renderer';
7
8
  import { createPropsResolver } from '../renderers/create-props-resolver';
8
9
  import renderStyles from '../renderers/render-styles';
9
- import { styleTransformers } from '../renderers/style-transformers';
10
10
  import { getCanvasIframeBody } from '../sync/get-canvas-iframe-body';
11
11
 
12
12
  jest.mock( '@elementor/editor-styles-repository' );
13
13
  jest.mock( '@elementor/editor-responsive' );
14
+ jest.mock( '@elementor/editor-styles' );
14
15
  jest.mock( '../renderers/render-styles' );
15
16
  jest.mock( '../renderers/create-props-resolver' );
16
17
  jest.mock( '../sync/get-canvas-iframe-body' );
@@ -25,9 +26,11 @@ describe( 'initStylesRenderer', () => {
25
26
  // Arrange.
26
27
  let triggerStylesChange = () => {};
27
28
  const mockStyleDef = createMockStyleDefinition();
29
+ const mockSchema = { test: createMockPropType( { key: 'test', kind: 'plain' } ) };
28
30
 
29
31
  const mockedResolveProps = jest.fn();
30
32
 
33
+ jest.mocked( getStylesSchema ).mockReturnValue( mockSchema );
31
34
  jest.mocked( createPropsResolver ).mockReturnValue( mockedResolveProps );
32
35
  jest.mocked( stylesRepository.subscribe ).mockImplementation( ( cb ) => ( triggerStylesChange = cb ) );
33
36
  jest.mocked( stylesRepository.all ).mockReturnValue( [ mockStyleDef ] );
@@ -43,7 +46,9 @@ describe( 'initStylesRenderer', () => {
43
46
 
44
47
  // Assert.
45
48
  expect( createPropsResolver ).toHaveBeenCalledTimes( 1 );
46
- expect( createPropsResolver ).toHaveBeenCalledWith( styleTransformers, {
49
+ expect( createPropsResolver ).toHaveBeenCalledWith( {
50
+ transformers: expect.any( Object ),
51
+ schema: mockSchema,
47
52
  onPropResolve: expect.any( Function ),
48
53
  } );
49
54
 
@@ -1,3 +1,4 @@
1
+ import { styleTransformersRegistry } from '@elementor/editor-canvas';
1
2
  import {
2
3
  backgroundColorOverlayPropTypeUtil,
3
4
  backgroundImageOverlayPropTypeUtil,
@@ -15,15 +16,14 @@ import {
15
16
  imageSrcPropTypeUtil,
16
17
  layoutDirectionPropTypeUtil,
17
18
  type Props,
18
- type PropsSchema,
19
19
  shadowPropTypeUtil,
20
20
  sizePropTypeUtil,
21
21
  strokePropTypeUtil,
22
22
  } from '@elementor/editor-props';
23
23
  import { getMediaAttachment } from '@elementor/wp-media';
24
24
 
25
- import { createPropsResolver } from '../create-props-resolver';
26
- import { styleTransformers } from '../style-transformers';
25
+ import { initStyleTransformers } from '../init-style-transformers';
26
+ import { createPropsResolver } from '../renderers/create-props-resolver';
27
27
  import { stylesSchemaMock } from './__mocks__/styles-schema';
28
28
 
29
29
  jest.mock( '@elementor/wp-media' );
@@ -32,11 +32,10 @@ type Payload = {
32
32
  name: string;
33
33
  prepare?: () => void;
34
34
  props: Props;
35
- schema: PropsSchema;
36
35
  expected: Record< string, unknown >;
37
36
  };
38
37
 
39
- describe( 'createPropsResolver - transformers', () => {
38
+ describe( 'styles prop resolver', () => {
40
39
  it.each< Payload >( [
41
40
  {
42
41
  name: 'text-stroke',
@@ -49,7 +48,6 @@ describe( 'createPropsResolver - transformers', () => {
49
48
  color: colorPropTypeUtil.create( '#000000' ),
50
49
  } ),
51
50
  },
52
- schema: stylesSchemaMock,
53
51
  expected: {
54
52
  '-webkit-text-stroke': '1px #000000',
55
53
  stroke: '#000000',
@@ -77,7 +75,6 @@ describe( 'createPropsResolver - transformers', () => {
77
75
  } ),
78
76
  ] ),
79
77
  },
80
- schema: stylesSchemaMock,
81
78
  expected: {
82
79
  'box-shadow': '1px 1px 1px 1px #000000,1px 1px 1px 1px #000000 inset',
83
80
  },
@@ -104,7 +101,6 @@ describe( 'createPropsResolver - transformers', () => {
104
101
  } ),
105
102
  } ),
106
103
  },
107
- schema: stylesSchemaMock,
108
104
  expected: {
109
105
  'padding-top': '10px',
110
106
  'padding-right': '20px',
@@ -122,7 +118,6 @@ describe( 'createPropsResolver - transformers', () => {
122
118
  left: sizePropTypeUtil.create( { size: 40, unit: 'px' } ),
123
119
  } ),
124
120
  },
125
- schema: stylesSchemaMock,
126
121
  expected: {
127
122
  'border-top-width': '10px',
128
123
  'border-right-width': '20px',
@@ -140,7 +135,6 @@ describe( 'createPropsResolver - transformers', () => {
140
135
  'end-end': sizePropTypeUtil.create( { size: 40, unit: 'px' } ),
141
136
  } ),
142
137
  },
143
- schema: stylesSchemaMock,
144
138
  expected: {
145
139
  'border-start-start-radius': '10px',
146
140
  'border-start-end-radius': '20px',
@@ -156,7 +150,6 @@ describe( 'createPropsResolver - transformers', () => {
156
150
  column: sizePropTypeUtil.create( { size: 20, unit: 'px' } ),
157
151
  } ),
158
152
  },
159
- schema: stylesSchemaMock,
160
153
  expected: {
161
154
  'column-gap': '20px',
162
155
  'row-gap': '10px',
@@ -169,7 +162,6 @@ describe( 'createPropsResolver - transformers', () => {
169
162
  color: colorPropTypeUtil.create( '#ee00ff' ),
170
163
  } ),
171
164
  },
172
- schema: stylesSchemaMock,
173
165
  expected: {
174
166
  background: '#ee00ff',
175
167
  },
@@ -191,7 +183,6 @@ describe( 'createPropsResolver - transformers', () => {
191
183
  ] ),
192
184
  } ),
193
185
  },
194
- schema: stylesSchemaMock,
195
186
  expected: {
196
187
  background: 'url(https://localhost.test/test-image.png)',
197
188
  },
@@ -249,7 +240,6 @@ describe( 'createPropsResolver - transformers', () => {
249
240
  ] ),
250
241
  } ),
251
242
  },
252
- schema: stylesSchemaMock,
253
243
  expected: {
254
244
  background:
255
245
  'linear-gradient(blue, blue),linear-gradient(yellow, yellow),' +
@@ -291,19 +281,23 @@ describe( 'createPropsResolver - transformers', () => {
291
281
  ] ),
292
282
  } ),
293
283
  },
294
- schema: stylesSchemaMock,
295
284
  expected: {
296
285
  background: 'url(medium_large-image-url-123) repeat-x,url(thumbnail-image-url-123) fixed',
297
286
  },
298
287
  },
299
- ] )( 'it should resolve props for `$name`', async ( { prepare, props, schema, expected } ) => {
288
+ ] )( 'it should resolve props for `$name`', async ( { prepare, props, expected } ) => {
300
289
  // Arrange.
301
290
  prepare?.();
302
291
 
303
- const resolve = createPropsResolver( styleTransformers );
292
+ initStyleTransformers();
293
+
294
+ const resolve = createPropsResolver( {
295
+ transformers: styleTransformersRegistry.all(),
296
+ schema: stylesSchemaMock,
297
+ } );
304
298
 
305
299
  // Act.
306
- const result = await resolve( { props, schema } );
300
+ const result = await resolve( { props } );
307
301
 
308
302
  // Assert.
309
303
  expect( result ).toStrictEqual( expected );
package/src/index.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  import { init } from './init';
2
2
 
3
+ export { styleTransformersRegistry } from './style-transformers-registry';
4
+
3
5
  init();
@@ -0,0 +1,58 @@
1
+ import { styleTransformersRegistry } from './style-transformers-registry';
2
+ import { backgroundColorOverlayTransformer } from './transformers/styles/background-color-overlay-transformer';
3
+ import { backgroundImageOverlayTransformer } from './transformers/styles/background-image-overlay-transformer';
4
+ import { backgroundImagePositionOffsetTransformer } from './transformers/styles/background-image-position-offset-transformer';
5
+ import { backgroundImageSizeScaleTransformer } from './transformers/styles/background-image-size-scale-transformer';
6
+ import { backgroundTransformer } from './transformers/styles/background-transformer';
7
+ import { createCombineArrayTransformer } from './transformers/styles/create-combine-array-transformer';
8
+ import { createMultiPropsTransformer } from './transformers/styles/create-multi-props-transformer';
9
+ import { imageAttachmentTransformer } from './transformers/styles/image-attachment-transformer';
10
+ import { imageSrcTransformer } from './transformers/styles/image-src-transformer';
11
+ import { imageTransformer } from './transformers/styles/image-transformer';
12
+ import { primitiveTransformer } from './transformers/styles/primitive-transformer';
13
+ import { shadowTransformer } from './transformers/styles/shadow-transformer';
14
+ import { sizeTransformer } from './transformers/styles/size-transformer';
15
+ import { strokeTransformer } from './transformers/styles/stroke-transformer';
16
+
17
+ export function initStyleTransformers() {
18
+ styleTransformersRegistry
19
+ .register( 'size', sizeTransformer )
20
+ .register( 'shadow', shadowTransformer )
21
+ .register( 'stroke', strokeTransformer )
22
+ .register(
23
+ 'dimensions',
24
+ createMultiPropsTransformer(
25
+ [ 'top', 'right', 'bottom', 'left' ],
26
+ ( { propKey, key } ) => `${ propKey }-${ key }`
27
+ )
28
+ )
29
+ .register( 'color', primitiveTransformer )
30
+ .register( 'number', primitiveTransformer )
31
+ .register( 'string', primitiveTransformer )
32
+ .register( 'url', primitiveTransformer )
33
+ .register( 'box-shadow', createCombineArrayTransformer( ',' ) )
34
+ .register( 'background', backgroundTransformer )
35
+ .register( 'background-overlay', createCombineArrayTransformer( ',' ) )
36
+ .register( 'background-color-overlay', backgroundColorOverlayTransformer )
37
+ .register( 'background-image-overlay', backgroundImageOverlayTransformer )
38
+ .register( 'background-image-position-offset', backgroundImagePositionOffsetTransformer )
39
+ .register( 'background-image-size-scale', backgroundImageSizeScaleTransformer )
40
+ .register( 'image-attachment-id', imageAttachmentTransformer )
41
+ .register( 'image-src', imageSrcTransformer )
42
+ .register( 'image', imageTransformer )
43
+ .register(
44
+ 'layout-direction',
45
+ createMultiPropsTransformer( [ 'row', 'column' ], ( { propKey, key } ) => `${ key }-${ propKey }` )
46
+ )
47
+ .register(
48
+ 'border-width',
49
+ createMultiPropsTransformer( [ 'top', 'right', 'bottom', 'left' ], ( { key } ) => `border-${ key }-width` )
50
+ )
51
+ .register(
52
+ 'border-radius',
53
+ createMultiPropsTransformer(
54
+ [ 'start-start', 'start-end', 'end-start', 'end-end' ],
55
+ ( { key } ) => `border-${ key }-radius`
56
+ )
57
+ );
58
+ }
@@ -5,7 +5,7 @@ import { __privateListenTo as listenTo, v1ReadyEvent } from '@elementor/editor-v
5
5
 
6
6
  import { createPropsResolver } from './renderers/create-props-resolver';
7
7
  import renderStyles from './renderers/render-styles';
8
- import { styleTransformers } from './renderers/style-transformers';
8
+ import { styleTransformersRegistry } from './style-transformers-registry';
9
9
  import { enqueueFont } from './sync/enqueue-font';
10
10
  import { getCanvasIframeBody } from './sync/get-canvas-iframe-body';
11
11
 
@@ -13,18 +13,21 @@ const WRAPPER_DATA_ATTR = 'data-styles-container';
13
13
  const SELECTOR_PREFIX = '.elementor';
14
14
 
15
15
  export function initStylesRenderer() {
16
- let abortController: AbortController | null = null;
16
+ listenTo( v1ReadyEvent(), () => {
17
+ let abortController: AbortController | null = null;
17
18
 
18
- const resolve = createPropsResolver( styleTransformers, { onPropResolve: enqueueUsedFonts } );
19
+ const resolve = createPropsResolver( {
20
+ transformers: styleTransformersRegistry.all(),
21
+ schema: getStylesSchema(),
22
+ onPropResolve: enqueueUsedFonts,
23
+ } );
19
24
 
20
- listenTo( v1ReadyEvent(), () => {
21
25
  stylesRepository.subscribe( async () => {
22
26
  const styleContainer = getStylesContainer();
23
27
 
24
28
  // Styles should be printed in a reversed order, so the high priority styles will be printed last.
25
29
  const styles = stylesRepository.all().reverse();
26
30
  const breakpoints = getBreakpointsMap();
27
- const schema = getStylesSchema();
28
31
 
29
32
  if ( abortController ) {
30
33
  abortController.abort();
@@ -38,7 +41,6 @@ export function initStylesRenderer() {
38
41
  breakpoints,
39
42
  selectorPrefix: SELECTOR_PREFIX,
40
43
  signal: abortController.signal,
41
- schema,
42
44
  } );
43
45
  } );
44
46
  } );
package/src/init.tsx CHANGED
@@ -1,9 +1,11 @@
1
1
  import { injectIntoTop } from '@elementor/editor';
2
2
 
3
3
  import { ElementsOverlays } from './components/elements-overlays';
4
+ import { initStyleTransformers } from './init-style-transformers';
4
5
  import { initStylesRenderer } from './init-styles-renderer';
5
6
 
6
7
  export function init() {
8
+ initStyleTransformers();
7
9
  initStylesRenderer();
8
10
 
9
11
  injectIntoTop( {