@elementor/editor-canvas 0.10.0 → 0.11.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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @elementor/editor-canvas@0.10.0 build
2
+ > @elementor/editor-canvas@0.11.0 build
3
3
  > tsup --config=../../tsup.build.ts
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -10,13 +10,13 @@
10
10
  CLI Cleaning output folder
11
11
  ESM Build start
12
12
  CJS Build start
13
- CJS dist/index.js 19.31 KB
14
- CJS dist/index.js.map 37.41 KB
15
- CJS ⚡️ Build success in 145ms
16
13
  ESM dist/index.mjs 17.23 KB
17
- ESM dist/index.mjs.map 37.36 KB
18
- ESM ⚡️ Build success in 149ms
14
+ ESM dist/index.mjs.map 37.61 KB
15
+ ESM ⚡️ Build success in 134ms
16
+ CJS dist/index.js 19.31 KB
17
+ CJS dist/index.js.map 37.66 KB
18
+ CJS ⚡️ Build success in 139ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 19410ms
21
- DTS dist/index.d.mts 434.00 B
22
- DTS dist/index.d.ts 434.00 B
20
+ DTS ⚡️ Build success in 19626ms
21
+ DTS dist/index.d.mts 561.00 B
22
+ DTS dist/index.d.ts 561.00 B
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @elementor/editor-canvas
2
2
 
3
+ ## 0.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 1a1e998: Add auto size unit to size controls
8
+
9
+ ### Patch Changes
10
+
11
+ - c654f89: Improve `createTransformer` types
12
+ - Updated dependencies [bcf4254]
13
+ - Updated dependencies [c654f89]
14
+ - Updated dependencies [571ff75]
15
+ - @elementor/editor-elements@0.6.0
16
+ - @elementor/editor-styles@0.6.0
17
+ - @elementor/editor-props@0.9.3
18
+ - @elementor/utils@0.4.0
19
+ - @elementor/editor-styles-repository@0.7.3
20
+ - @elementor/editor-v1-adapters@0.10.1
21
+ - @elementor/wp-media@0.4.2
22
+ - @elementor/editor@0.18.1
23
+ - @elementor/editor-responsive@0.13.1
24
+
3
25
  ## 0.10.0
4
26
 
5
27
  ### Minor Changes
package/dist/index.d.mts CHANGED
@@ -1,7 +1,11 @@
1
- type Transformer<TValue> = (value: TValue, options: {
1
+ type UnbrandedTransformer<TValue> = (value: TValue, options: {
2
2
  key: string;
3
3
  signal?: AbortSignal;
4
4
  }) => unknown;
5
+ declare const brand: unique symbol;
6
+ type Transformer<TValue> = UnbrandedTransformer<TValue> & {
7
+ [brand]: true;
8
+ };
5
9
  type TransformerName = string;
6
10
  type AnyTransformer = Transformer<any>;
7
11
  type TransformersMap = Record<string, AnyTransformer>;
package/dist/index.d.ts CHANGED
@@ -1,7 +1,11 @@
1
- type Transformer<TValue> = (value: TValue, options: {
1
+ type UnbrandedTransformer<TValue> = (value: TValue, options: {
2
2
  key: string;
3
3
  signal?: AbortSignal;
4
4
  }) => unknown;
5
+ declare const brand: unique symbol;
6
+ type Transformer<TValue> = UnbrandedTransformer<TValue> & {
7
+ [brand]: true;
8
+ };
5
9
  type TransformerName = string;
6
10
  type AnyTransformer = Transformer<any>;
7
11
  type TransformersMap = Record<string, AnyTransformer>;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../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"],"sourcesContent":["import { init } from './init';\n\nexport { styleTransformersRegistry } from './style-transformers-registry';\n\ninit();\n","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"],"mappings":"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","names":["React","import_react","import_react","useIsPreviewMode","useIsRouteActive","size","size","import_editor_v1_adapters","size","listenTo"]}
1
+ {"version":3,"sources":["../src/index.ts","../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"],"sourcesContent":["import { init } from './init';\n\nexport { styleTransformersRegistry } from './style-transformers-registry';\n\ninit();\n","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 AnyTransformable } from '@elementor/editor-props';\n\nimport { type Transformer, type UnbrandedTransformer } from './types';\n\n// Wrap transformer for better DX (types).\n// Inspired by: https://tkdodo.eu/blog/the-query-options-api\nexport function createTransformer< TValue = never >(\n\tcb: TValue extends AnyTransformable\n\t\t? 'Transformable values are invalid, use the actual value instead.'\n\t\t: UnbrandedTransformer< TValue >\n): Transformer< NoInfer< TValue > > {\n\treturn cb as never;\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< Record< string, string > >( ( value, { 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"],"mappings":"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","names":["React","import_react","import_react","useIsPreviewMode","useIsRouteActive","size","size","import_editor_v1_adapters","size","listenTo"]}
@@ -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/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"]}
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 AnyTransformable } from '@elementor/editor-props';\n\nimport { type Transformer, type UnbrandedTransformer } from './types';\n\n// Wrap transformer for better DX (types).\n// Inspired by: https://tkdodo.eu/blog/the-query-options-api\nexport function createTransformer< TValue = never >(\n\tcb: TValue extends AnyTransformable\n\t\t? 'Transformable values are invalid, use the actual value instead.'\n\t\t: UnbrandedTransformer< TValue >\n): Transformer< NoInfer< TValue > > {\n\treturn cb as never;\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< Record< string, string > >( ( value, { 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.10.0",
4
+ "version": "0.11.0",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -36,16 +36,16 @@
36
36
  "react": "^18.3.1"
37
37
  },
38
38
  "dependencies": {
39
- "@elementor/editor": "0.18.0",
40
- "@elementor/editor-elements": "0.5.4",
41
- "@elementor/editor-props": "0.9.2",
42
- "@elementor/editor-responsive": "0.13.0",
43
- "@elementor/editor-styles": "0.5.7",
44
- "@elementor/editor-styles-repository": "0.7.2",
45
- "@elementor/editor-v1-adapters": "0.10.0",
39
+ "@elementor/editor": "0.18.1",
40
+ "@elementor/editor-elements": "0.6.0",
41
+ "@elementor/editor-props": "0.9.3",
42
+ "@elementor/editor-responsive": "0.13.1",
43
+ "@elementor/editor-styles": "0.6.0",
44
+ "@elementor/editor-styles-repository": "0.7.3",
45
+ "@elementor/editor-v1-adapters": "0.10.1",
46
46
  "@elementor/ui": "1.26.0",
47
- "@elementor/utils": "0.3.1",
48
- "@elementor/wp-media": "0.4.1",
47
+ "@elementor/utils": "0.4.0",
48
+ "@elementor/wp-media": "0.4.2",
49
49
  "@floating-ui/react": "^0.26.28"
50
50
  },
51
51
  "devDependencies": {
@@ -80,7 +80,7 @@ export const stylesSchemaMock = {
80
80
  },
81
81
  },
82
82
  },
83
- padding: {
83
+ margin: {
84
84
  kind: 'object',
85
85
  key: 'linked-dimensions',
86
86
  default: null,
@@ -95,113 +95,181 @@ export const stylesSchemaMock = {
95
95
  settings: {},
96
96
  },
97
97
  top: {
98
- kind: 'object',
99
- key: 'size',
98
+ kind: 'union',
100
99
  default: null,
101
100
  meta: {},
102
101
  settings: {},
103
- shape: {
102
+ prop_types: {
104
103
  size: {
105
- kind: 'plain',
106
- key: 'number',
104
+ kind: 'object',
105
+ key: 'size',
107
106
  default: null,
108
107
  meta: {},
109
- settings: {
110
- required: true,
108
+ settings: {},
109
+ shape: {
110
+ size: {
111
+ kind: 'plain',
112
+ key: 'number',
113
+ default: null,
114
+ meta: {},
115
+ settings: {
116
+ required: true,
117
+ },
118
+ },
119
+ unit: {
120
+ kind: 'plain',
121
+ key: 'string',
122
+ default: null,
123
+ meta: {},
124
+ settings: {
125
+ enum: [ 'px', 'em', 'rem', '%', 'vh', 'vw', 'auto', 'vmin', 'vmax' ],
126
+ required: true,
127
+ },
128
+ },
111
129
  },
112
130
  },
113
- unit: {
131
+ string: {
114
132
  kind: 'plain',
115
133
  key: 'string',
116
134
  default: null,
117
135
  meta: {},
118
136
  settings: {
119
- enum: [ 'px', 'em', 'rem', '%', 'vh', 'vw', 'vmin', 'vmax' ],
120
- required: true,
137
+ enum: [ 'auto' ],
121
138
  },
122
139
  },
123
140
  },
124
141
  },
125
142
  right: {
126
- kind: 'object',
127
- key: 'size',
143
+ kind: 'union',
128
144
  default: null,
129
145
  meta: {},
130
146
  settings: {},
131
- shape: {
147
+ prop_types: {
132
148
  size: {
133
- kind: 'plain',
134
- key: 'number',
149
+ kind: 'object',
150
+ key: 'size',
135
151
  default: null,
136
152
  meta: {},
137
- settings: {
138
- required: true,
153
+ settings: {},
154
+ shape: {
155
+ size: {
156
+ kind: 'plain',
157
+ key: 'number',
158
+ default: null,
159
+ meta: {},
160
+ settings: {
161
+ required: true,
162
+ },
163
+ },
164
+ unit: {
165
+ kind: 'plain',
166
+ key: 'string',
167
+ default: null,
168
+ meta: {},
169
+ settings: {
170
+ enum: [ 'px', 'em', 'rem', '%', 'vh', 'vw', 'auto', 'vmin', 'vmax' ],
171
+ required: true,
172
+ },
173
+ },
139
174
  },
140
175
  },
141
- unit: {
176
+ string: {
142
177
  kind: 'plain',
143
178
  key: 'string',
144
179
  default: null,
145
180
  meta: {},
146
181
  settings: {
147
- enum: [ 'px', 'em', 'rem', '%', 'vh', 'vw', 'vmin', 'vmax' ],
148
- required: true,
182
+ enum: [ 'auto' ],
149
183
  },
150
184
  },
151
185
  },
152
186
  },
153
187
  bottom: {
154
- kind: 'object',
155
- key: 'size',
188
+ kind: 'union',
156
189
  default: null,
157
190
  meta: {},
158
191
  settings: {},
159
- shape: {
192
+ prop_types: {
160
193
  size: {
161
- kind: 'plain',
162
- key: 'number',
194
+ kind: 'object',
195
+ key: 'size',
163
196
  default: null,
164
197
  meta: {},
165
- settings: {
166
- required: true,
198
+ settings: {},
199
+ shape: {
200
+ size: {
201
+ kind: 'plain',
202
+ key: 'number',
203
+ default: null,
204
+ meta: {},
205
+ settings: {
206
+ required: true,
207
+ },
208
+ },
209
+ unit: {
210
+ kind: 'plain',
211
+ key: 'string',
212
+ default: null,
213
+ meta: {},
214
+ settings: {
215
+ enum: [ 'px', 'em', 'rem', '%', 'vh', 'vw', 'auto', 'vmin', 'vmax' ],
216
+ required: true,
217
+ },
218
+ },
167
219
  },
168
220
  },
169
- unit: {
221
+ string: {
170
222
  kind: 'plain',
171
223
  key: 'string',
172
224
  default: null,
173
225
  meta: {},
174
226
  settings: {
175
- enum: [ 'px', 'em', 'rem', '%', 'vh', 'vw', 'vmin', 'vmax' ],
176
- required: true,
227
+ enum: [ 'auto' ],
177
228
  },
178
229
  },
179
230
  },
180
231
  },
181
232
  left: {
182
- kind: 'object',
183
- key: 'size',
233
+ kind: 'union',
184
234
  default: null,
185
235
  meta: {},
186
236
  settings: {},
187
- shape: {
237
+ prop_types: {
188
238
  size: {
189
- kind: 'plain',
190
- key: 'number',
239
+ kind: 'object',
240
+ key: 'size',
191
241
  default: null,
192
242
  meta: {},
193
- settings: {
194
- required: true,
243
+ settings: {},
244
+ shape: {
245
+ size: {
246
+ kind: 'plain',
247
+ key: 'number',
248
+ default: null,
249
+ meta: {},
250
+ settings: {
251
+ required: true,
252
+ },
253
+ },
254
+ unit: {
255
+ kind: 'plain',
256
+ key: 'string',
257
+ default: null,
258
+ meta: {},
259
+ settings: {
260
+ enum: [ 'px', 'em', 'rem', '%', 'vh', 'vw', 'auto', 'vmin', 'vmax' ],
261
+ required: true,
262
+ },
263
+ },
195
264
  },
196
265
  },
197
- unit: {
266
+ string: {
198
267
  kind: 'plain',
199
268
  key: 'string',
200
269
  default: null,
201
270
  meta: {},
202
271
  settings: {
203
- enum: [ 'px', 'em', 'rem', '%', 'vh', 'vw', 'vmin', 'vmax' ],
204
- required: true,
272
+ enum: [ 'auto' ],
205
273
  },
206
274
  },
207
275
  },
@@ -574,75 +642,111 @@ export const stylesSchemaMock = {
574
642
  settings: {},
575
643
  shape: {
576
644
  width: {
577
- kind: 'object',
578
- key: 'size',
645
+ kind: 'union',
579
646
  default: null,
580
647
  meta: {},
581
648
  settings: {},
582
- shape: {
649
+ prop_types: {
583
650
  size: {
584
- kind: 'plain',
585
- key: 'number',
651
+ kind: 'object',
652
+ key: 'size',
586
653
  default: null,
587
654
  meta: {},
588
- settings: {
589
- required: true,
655
+ settings: {},
656
+ shape: {
657
+ size: {
658
+ kind: 'plain',
659
+ key: 'number',
660
+ default: null,
661
+ meta: {},
662
+ settings: {
663
+ required: true,
664
+ },
665
+ },
666
+ unit: {
667
+ kind: 'plain',
668
+ key: 'string',
669
+ default: null,
670
+ meta: {},
671
+ settings: {
672
+ enum: [
673
+ 'px',
674
+ 'em',
675
+ 'rem',
676
+ '%',
677
+ 'vh',
678
+ 'vw',
679
+ 'auto',
680
+ 'vmin',
681
+ 'vmax',
682
+ ],
683
+ required: true,
684
+ },
685
+ },
590
686
  },
591
687
  },
592
- unit: {
688
+ string: {
593
689
  kind: 'plain',
594
690
  key: 'string',
595
691
  default: null,
596
692
  meta: {},
597
693
  settings: {
598
- enum: [
599
- 'px',
600
- 'em',
601
- 'rem',
602
- '%',
603
- 'vh',
604
- 'vw',
605
- 'vmin',
606
- 'vmax',
607
- ],
608
- required: true,
694
+ enum: [ 'auto' ],
609
695
  },
610
696
  },
611
697
  },
612
698
  },
613
699
  height: {
614
- kind: 'object',
615
- key: 'size',
700
+ kind: 'union',
616
701
  default: null,
617
702
  meta: {},
618
703
  settings: {},
619
- shape: {
704
+ prop_types: {
620
705
  size: {
621
- kind: 'plain',
622
- key: 'number',
706
+ kind: 'object',
707
+ key: 'size',
623
708
  default: null,
624
709
  meta: {},
625
- settings: {
626
- required: true,
710
+ settings: {},
711
+ shape: {
712
+ size: {
713
+ kind: 'plain',
714
+ key: 'number',
715
+ default: null,
716
+ meta: {},
717
+ settings: {
718
+ required: true,
719
+ },
720
+ },
721
+ unit: {
722
+ kind: 'plain',
723
+ key: 'string',
724
+ default: null,
725
+ meta: {},
726
+ settings: {
727
+ enum: [
728
+ 'px',
729
+ 'em',
730
+ 'rem',
731
+ '%',
732
+ 'vh',
733
+ 'vw',
734
+ 'auto',
735
+ 'vmin',
736
+ 'vmax',
737
+ ],
738
+ required: true,
739
+ },
740
+ },
627
741
  },
628
742
  },
629
- unit: {
743
+ string: {
630
744
  kind: 'plain',
631
745
  key: 'string',
632
746
  default: null,
633
747
  meta: {},
634
748
  settings: {
635
- enum: [
636
- 'px',
637
- 'em',
638
- 'rem',
639
- '%',
640
- 'vh',
641
- 'vw',
642
- 'vmin',
643
- 'vmax',
644
- ],
645
- required: true,
749
+ enum: [ 'auto' ],
646
750
  },
647
751
  },
648
752
  },
@@ -683,75 +787,91 @@ export const stylesSchemaMock = {
683
787
  settings: {},
684
788
  shape: {
685
789
  x: {
686
- kind: 'object',
687
- key: 'size',
790
+ kind: 'union',
688
791
  default: null,
689
792
  meta: {},
690
793
  settings: {},
691
- shape: {
794
+ prop_types: {
692
795
  size: {
693
- kind: 'plain',
694
- key: 'number',
796
+ kind: 'object',
797
+ key: 'size',
695
798
  default: null,
696
799
  meta: {},
697
- settings: {
698
- required: true,
699
- },
700
- },
701
- unit: {
702
- kind: 'plain',
703
- key: 'string',
704
- default: null,
705
- meta: {},
706
- settings: {
707
- enum: [
708
- 'px',
709
- 'em',
710
- 'rem',
711
- '%',
712
- 'vh',
713
- 'vw',
714
- 'vmin',
715
- 'vmax',
716
- ],
717
- required: true,
800
+ settings: {},
801
+ shape: {
802
+ size: {
803
+ kind: 'plain',
804
+ key: 'number',
805
+ default: null,
806
+ meta: {},
807
+ settings: {
808
+ required: true,
809
+ },
810
+ },
811
+ unit: {
812
+ kind: 'plain',
813
+ key: 'string',
814
+ default: null,
815
+ meta: {},
816
+ settings: {
817
+ enum: [
818
+ 'px',
819
+ 'em',
820
+ 'rem',
821
+ '%',
822
+ 'vh',
823
+ 'vw',
824
+ 'vmin',
825
+ 'vmax',
826
+ ],
827
+ required: true,
828
+ },
829
+ },
718
830
  },
719
831
  },
720
832
  },
721
833
  },
722
834
  y: {
723
- kind: 'object',
724
- key: 'size',
835
+ kind: 'union',
725
836
  default: null,
726
837
  meta: {},
727
838
  settings: {},
728
- shape: {
839
+ prop_types: {
729
840
  size: {
730
- kind: 'plain',
731
- key: 'number',
841
+ kind: 'object',
842
+ key: 'size',
732
843
  default: null,
733
844
  meta: {},
734
- settings: {
735
- required: true,
736
- },
737
- },
738
- unit: {
739
- kind: 'plain',
740
- key: 'string',
741
- default: null,
742
- meta: {},
743
- settings: {
744
- enum: [
745
- 'px',
746
- 'em',
747
- 'rem',
748
- '%',
749
- 'vh',
750
- 'vw',
751
- 'vmin',
752
- 'vmax',
753
- ],
754
- required: true,
845
+ settings: {},
846
+ shape: {
847
+ size: {
848
+ kind: 'plain',
849
+ key: 'number',
850
+ default: null,
851
+ meta: {},
852
+ settings: {
853
+ required: true,
854
+ },
855
+ },
856
+ unit: {
857
+ kind: 'plain',
858
+ key: 'string',
859
+ default: null,
860
+ meta: {},
861
+ settings: {
862
+ enum: [
863
+ 'px',
864
+ 'em',
865
+ 'rem',
866
+ '%',
867
+ 'vh',
868
+ 'vw',
869
+ 'vmin',
870
+ 'vmax',
871
+ ],
872
+ required: true,
873
+ },
874
+ },
755
875
  },
756
876
  },
757
877
  },
@@ -18,6 +18,7 @@ import {
18
18
  type Props,
19
19
  shadowPropTypeUtil,
20
20
  sizePropTypeUtil,
21
+ stringPropTypeUtil,
21
22
  strokePropTypeUtil,
22
23
  } from '@elementor/editor-props';
23
24
  import { getMediaAttachment } from '@elementor/wp-media';
@@ -82,7 +83,7 @@ describe( 'styles prop resolver', () => {
82
83
  {
83
84
  name: 'linked-dimensional',
84
85
  props: {
85
- padding: dimensionsPropTypeUtil.create( {
86
+ margin: dimensionsPropTypeUtil.create( {
86
87
  top: sizePropTypeUtil.create( {
87
88
  size: 10,
88
89
  unit: 'px',
@@ -95,17 +96,14 @@ describe( 'styles prop resolver', () => {
95
96
  size: 30,
96
97
  unit: 'px',
97
98
  } ),
98
- left: sizePropTypeUtil.create( {
99
- size: 40,
100
- unit: 'px',
101
- } ),
99
+ left: stringPropTypeUtil.create( 'auto' ),
102
100
  } ),
103
101
  },
104
102
  expected: {
105
- 'padding-top': '10px',
106
- 'padding-right': '20px',
107
- 'padding-bottom': '30px',
108
- 'padding-left': '40px',
103
+ 'margin-top': '10px',
104
+ 'margin-right': '20px',
105
+ 'margin-bottom': '30px',
106
+ 'margin-left': 'auto',
109
107
  },
110
108
  },
111
109
  {
@@ -1,12 +1,13 @@
1
1
  import { createMockPropType } from 'test-utils';
2
2
 
3
+ import { createTransformer } from '../../transformers/create-transformer';
3
4
  import { createPropsResolver } from '../create-props-resolver';
4
5
 
5
6
  describe( 'createPropsResolver', () => {
6
7
  it( 'should resolve simple props', async () => {
7
8
  // Arrange.
8
9
  const resolve = createPropsResolver( {
9
- transformers: { int: ( value ) => value + 1 },
10
+ transformers: { int: createTransformer( ( value: number ) => value + 1 ) },
10
11
  schema: { int: createMockPropType( { kind: 'plain', key: 'int' } ) },
11
12
  } );
12
13
 
@@ -24,7 +25,7 @@ describe( 'createPropsResolver', () => {
24
25
  it( 'should skip disabled props', async () => {
25
26
  // Arrange.
26
27
  const resolve = createPropsResolver( {
27
- transformers: { int: ( value ) => value + 1 },
28
+ transformers: { int: createTransformer( ( value: number ) => value + 1 ) },
28
29
  schema: { int: createMockPropType( { kind: 'plain', key: 'int' } ) },
29
30
  } );
30
31
 
@@ -46,7 +47,7 @@ describe( 'createPropsResolver', () => {
46
47
  it( 'should fallback to default value when there is no value', async () => {
47
48
  // Arrange.
48
49
  const resolve = createPropsResolver( {
49
- transformers: { int: ( value ) => value + 1 },
50
+ transformers: { int: createTransformer( ( value: number ) => value + 1 ) },
50
51
  schema: {
51
52
  int: createMockPropType( {
52
53
  kind: 'plain',
@@ -66,7 +67,7 @@ describe( 'createPropsResolver', () => {
66
67
  it( 'should skip props that are not in the schema', async () => {
67
68
  // Arrange.
68
69
  const resolve = createPropsResolver( {
69
- transformers: { int: ( value ) => value + 1 },
70
+ transformers: { int: createTransformer( ( value: number ) => value + 1 ) },
70
71
  schema: {
71
72
  int: createMockPropType( { kind: 'plain', key: 'int' } ),
72
73
  },
@@ -93,7 +94,7 @@ describe( 'createPropsResolver', () => {
93
94
  it( "should skip props that don't have a transformer", async () => {
94
95
  // Arrange.
95
96
  const resolve = createPropsResolver( {
96
- transformers: { int: ( value ) => value + 1 },
97
+ transformers: { int: createTransformer( ( value: number ) => value + 1 ) },
97
98
  schema: {
98
99
  int: createMockPropType( { kind: 'plain', key: 'int' } ),
99
100
  invalid: createMockPropType( { kind: 'plain', key: 'invalid' } ),
@@ -121,10 +122,10 @@ describe( 'createPropsResolver', () => {
121
122
  it( 'should skip props when their transformer throws an error', async () => {
122
123
  const resolve = createPropsResolver( {
123
124
  transformers: {
124
- int: ( value ) => value + 1,
125
- throws: () => {
125
+ int: createTransformer( ( value: number ) => value + 1 ),
126
+ throws: createTransformer< number >( () => {
126
127
  throw new Error( 'Not Working!' );
127
- },
128
+ } ),
128
129
  },
129
130
  schema: {
130
131
  int: createMockPropType( { kind: 'plain', key: 'int' } ),
@@ -154,7 +155,7 @@ describe( 'createPropsResolver', () => {
154
155
  const onResolve = jest.fn();
155
156
 
156
157
  const resolve = createPropsResolver( {
157
- transformers: { int: ( value ) => value + 1 },
158
+ transformers: { int: createTransformer( ( value: number ) => value + 1 ) },
158
159
  schema: {
159
160
  int: createMockPropType( { kind: 'plain', key: 'int' } ),
160
161
  int2: createMockPropType( { kind: 'plain', key: 'int' } ),
@@ -1,6 +1,13 @@
1
- import { type Transformer } from './types';
1
+ import { type AnyTransformable } from '@elementor/editor-props';
2
2
 
3
- // Wrap transformer for better DX (types) + it will allow us to add more features in the future.
4
- export function createTransformer< TValue >( cb: Transformer< TValue > ): Transformer< TValue > {
5
- return cb;
3
+ import { type Transformer, type UnbrandedTransformer } from './types';
4
+
5
+ // Wrap transformer for better DX (types).
6
+ // Inspired by: https://tkdodo.eu/blog/the-query-options-api
7
+ export function createTransformer< TValue = never >(
8
+ cb: TValue extends AnyTransformable
9
+ ? 'Transformable values are invalid, use the actual value instead.'
10
+ : UnbrandedTransformer< TValue >
11
+ ): Transformer< NoInfer< TValue > > {
12
+ return cb as never;
6
13
  }
@@ -4,7 +4,7 @@ import { createTransformer } from '../create-transformer';
4
4
  type KeyGenerator = ( { propKey, key }: { propKey: string; key: string } ) => string;
5
5
 
6
6
  export const createMultiPropsTransformer = ( keys: string[], keyGenerator: KeyGenerator ) => {
7
- return createTransformer( ( value: Record< string, string >, { key: propKey } ) => {
7
+ return createTransformer< Record< string, string > >( ( value, { key: propKey } ) => {
8
8
  const entries = keys
9
9
  .filter( ( key ) => value[ key ] )
10
10
  .map( ( key ) => [ keyGenerator( { propKey, key } ), value[ key ] ] );
@@ -1,4 +1,4 @@
1
- export type Transformer< TValue > = (
1
+ export type UnbrandedTransformer< TValue > = (
2
2
  value: TValue,
3
3
  options: {
4
4
  key: string;
@@ -6,6 +6,12 @@ export type Transformer< TValue > = (
6
6
  }
7
7
  ) => unknown;
8
8
 
9
+ const brand = Symbol( 'transformer-brand' );
10
+
11
+ export type Transformer< TValue > = UnbrandedTransformer< TValue > & {
12
+ [ brand ]: true;
13
+ };
14
+
9
15
  export type TransformerName = string;
10
16
 
11
17
  // eslint-disable-next-line @typescript-eslint/no-explicit-any