@elementor/editor-canvas 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -65,8 +65,8 @@ function useFloatingOnElement({ element, isSelected }) {
65
65
  size({
66
66
  apply({ elements, rects }) {
67
67
  Object.assign(elements.floating.style, {
68
- width: `${rects.reference.width}px`,
69
- height: `${rects.reference.height}px`
68
+ width: `${rects.reference.width + 2}px`,
69
+ height: `${rects.reference.height + 2}px`
70
70
  });
71
71
  }
72
72
  }),
@@ -438,10 +438,10 @@ function useStyleItems() {
438
438
  }
439
439
  function createProviderSubscriber({ provider, renderStyles, setStyleItems }) {
440
440
  return abortPreviousRuns(
441
- (abortController) => signalizedProcess(abortController.signal).then((_, signal) => renderStyles({ styles: provider.actions.get(), signal })).then((items) => {
441
+ (abortController) => signalizedProcess(abortController.signal).then((_, signal) => renderStyles({ styles: provider.actions.all(), signal })).then((items) => {
442
442
  setStyleItems((prev) => ({
443
443
  ...prev,
444
- [provider.key]: { provider, items }
444
+ [provider.getKey()]: { provider, items }
445
445
  }));
446
446
  }).execute()
447
447
  );
@@ -460,7 +460,7 @@ function StyleRenderer() {
460
460
  if (!container) {
461
461
  return null;
462
462
  }
463
- return /* @__PURE__ */ React3.createElement(Portal, { container }, /* @__PURE__ */ React3.createElement(React3.Fragment, null, styleItems.map((item) => /* @__PURE__ */ React3.createElement("style", { "data-e-style-id": item.id, key: item.id }, item.value))));
463
+ return /* @__PURE__ */ React3.createElement(Portal, { container }, styleItems.map((item) => /* @__PURE__ */ React3.createElement("style", { "data-e-style-id": item.id, key: item.id }, item.value)));
464
464
  }
465
465
  function usePortalContainer() {
466
466
  return useListenTo2(commandEndEvent("editor/documents/attach-preview"), () => getCanvasIframeHead());
@@ -965,7 +965,7 @@ import {
965
965
  getElementStyles,
966
966
  updateElementStyle
967
967
  } from "@elementor/editor-elements";
968
- import { LOCAL_STYLES_RESERVED_LABEL } from "@elementor/editor-styles-repository";
968
+ import { ELEMENTS_STYLES_RESERVED_LABEL } from "@elementor/editor-styles-repository";
969
969
  import { undoable } from "@elementor/editor-v1-adapters";
970
970
  import { __ as __3 } from "@wordpress/i18n";
971
971
 
@@ -1043,7 +1043,7 @@ var undoablePasteElementStyle = () => undoable(
1043
1043
  revertData.styleId = createElementStyle({
1044
1044
  elementId,
1045
1045
  classesProp,
1046
- label: LOCAL_STYLES_RESERVED_LABEL,
1046
+ label: ELEMENTS_STYLES_RESERVED_LABEL,
1047
1047
  ...firstVariant,
1048
1048
  additionalVariants
1049
1049
  });
@@ -1070,7 +1070,7 @@ var undoablePasteElementStyle = () => undoable(
1070
1070
  createElementStyle({
1071
1071
  elementId: container.id,
1072
1072
  classesProp,
1073
- label: LOCAL_STYLES_RESERVED_LABEL,
1073
+ label: ELEMENTS_STYLES_RESERVED_LABEL,
1074
1074
  styleId: revertData.styleId,
1075
1075
  ...firstVariant,
1076
1076
  additionalVariants
@@ -1124,7 +1124,7 @@ import {
1124
1124
 
1125
1125
  // src/style-commands/undoable-actions/reset-element-style.ts
1126
1126
  import { createElementStyle as createElementStyle2, deleteElementStyle as deleteElementStyle2, getElementStyles as getElementStyles2 } from "@elementor/editor-elements";
1127
- import { LOCAL_STYLES_RESERVED_LABEL as LOCAL_STYLES_RESERVED_LABEL2 } from "@elementor/editor-styles-repository";
1127
+ import { ELEMENTS_STYLES_RESERVED_LABEL as ELEMENTS_STYLES_RESERVED_LABEL2 } from "@elementor/editor-styles-repository";
1128
1128
  import { undoable as undoable2 } from "@elementor/editor-v1-adapters";
1129
1129
  import { __ as __4 } from "@wordpress/i18n";
1130
1130
  var undoableResetElementStyle = () => undoable2(
@@ -1154,7 +1154,7 @@ var undoableResetElementStyle = () => undoable2(
1154
1154
  elementId,
1155
1155
  classesProp,
1156
1156
  styleId,
1157
- label: LOCAL_STYLES_RESERVED_LABEL2,
1157
+ label: ELEMENTS_STYLES_RESERVED_LABEL2,
1158
1158
  ...firstVariant,
1159
1159
  additionalVariants
1160
1160
  });
@@ -1211,11 +1211,9 @@ function init() {
1211
1211
  component: StyleRenderer
1212
1212
  });
1213
1213
  }
1214
-
1215
- // src/index.ts
1216
- init();
1217
1214
  export {
1218
1215
  createTransformer,
1216
+ init,
1219
1217
  settingsTransformersRegistry,
1220
1218
  styleTransformersRegistry
1221
1219
  };
@@ -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/components/style-renderer.tsx","../src/hooks/use-style-items.ts","../src/utils/abort-previous-runs.ts","../src/utils/signalized-process.ts","../src/hooks/use-on-mount.ts","../src/hooks/use-style-prop-resolver.ts","../src/renderers/create-props-resolver.ts","../src/renderers/multi-props.ts","../src/transformers/create-transformers-registry.ts","../src/style-transformers-registry.ts","../src/sync/enqueue-font.ts","../src/hooks/use-style-renderer.ts","../src/renderers/errors.ts","../src/renderers/create-styles-renderer.ts","../src/sync/get-canvas-iframe-head.ts","../src/settings-transformers-registry.ts","../src/transformers/create-transformer.ts","../src/transformers/settings/array-transformer.ts","../src/transformers/settings/link-transformer.ts","../src/transformers/shared/image-src-transformer.ts","../src/transformers/shared/image-transformer.ts","../src/transformers/shared/plain-transformer.ts","../src/init-settings-transformers.ts","../src/transformers/styles/background-color-overlay-transformer.ts","../src/transformers/styles/background-gradient-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/color-stop-transformer.ts","../src/transformers/styles/create-combine-array-transformer.ts","../src/transformers/styles/create-multi-props-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/legacy/init-legacy-views.ts","../src/renderers/create-dom-renderer.ts","../src/legacy/create-element-type.ts","../src/legacy/create-templated-element-type.ts","../src/prevent-link-in-link-commands.ts","../src/style-commands/paste-style.ts","../src/style-commands/undoable-actions/paste-element-style.ts","../src/style-commands/utils.ts","../src/style-commands/reset-style.ts","../src/style-commands/undoable-actions/reset-element-style.ts","../src/style-commands/init-style-commands.ts","../src/index.ts"],"sourcesContent":["import { injectIntoTop } from '@elementor/editor';\n\nimport { ElementsOverlays } from './components/elements-overlays';\nimport { StyleRenderer } from './components/style-renderer';\nimport { initSettingsTransformers } from './init-settings-transformers';\nimport { initStyleTransformers } from './init-style-transformers';\nimport { initLegacyViews } from './legacy/init-legacy-views';\nimport { initLinkInLinkPrevention } from './prevent-link-in-link-commands';\nimport { initStyleCommands } from './style-commands/init-style-commands';\n\nexport function init() {\n\tinitStyleTransformers();\n\tinitStyleCommands();\n\n\tinitLinkInLinkPrevention();\n\n\tinitLegacyViews();\n\n\tinitSettingsTransformers();\n\n\tinjectIntoTop( {\n\t\tid: 'elements-overlays',\n\t\tcomponent: ElementsOverlays,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'canvas-style-render',\n\t\tcomponent: StyleRenderer,\n\t} );\n}\n","import * as React from 'react';\nimport { getElements, useSelectedElement } from '@elementor/editor-elements';\nimport {\n\t__privateUseIsRouteActive as useIsRouteActive,\n\t__privateUseListenTo as useListenTo,\n\tuseEditMode,\n\twindowEvent,\n} from '@elementor/editor-v1-adapters';\n\nimport { ElementOverlay } from './element-overlay';\n\nexport function ElementsOverlays() {\n\tconst selected = useSelectedElement();\n\tconst elements = useElementsDom();\n\tconst currentEditMode = useEditMode();\n\n\tconst isEditMode = currentEditMode === 'edit';\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\n\tconst isActive = isEditMode && ! isKitRouteActive;\n\n\treturn (\n\t\tisActive &&\n\t\telements.map( ( [ id, element ] ) => (\n\t\t\t<ElementOverlay key={ id } id={ id } element={ element } isSelected={ selected.element?.id === id } />\n\t\t) )\n\t);\n}\n\nconst ELEMENTS_DATA_ATTR = 'atomic';\n\ntype IdElementTuple = [ string, HTMLElement ];\n\nfunction useElementsDom() {\n\treturn useListenTo(\n\t\t[ windowEvent( 'elementor/editor/element-rendered' ), windowEvent( 'elementor/editor/element-destroyed' ) ],\n\t\t() => {\n\t\t\treturn getElements()\n\t\t\t\t.filter( ( el ) => ELEMENTS_DATA_ATTR in ( el.view?.el?.dataset ?? {} ) )\n\t\t\t\t.map( ( element ) => [ element.id, element.view?.getDomElement?.()?.get?.( 0 ) ] )\n\t\t\t\t.filter( ( item ): item is IdElementTuple => !! item[ 1 ] );\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\tid: string;\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, id }: 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={ 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 { useEffect, 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\twhileElementsMounted: autoUpdate,\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\tuseEffect( () => {\n\t\t// Update the reference manually because Floating UI does not recalculate\n\t\t// the reference element when it is being used in `option.elements.reference`.\n\t\t// @link https://github.com/floating-ui/floating-ui/blob/master/packages/react/src/hooks/useFloatingRootContext.ts\n\t\trefs.setReference( element );\n\t}, [ element, refs ] );\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 * as React from 'react';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { Portal } from '@elementor/ui';\n\nimport { useStyleItems } from '../hooks/use-style-items';\nimport { getCanvasIframeHead } from '../sync/get-canvas-iframe-head';\n\nexport function StyleRenderer() {\n\tconst container = usePortalContainer();\n\n\tconst styleItems = useStyleItems();\n\n\tif ( ! container ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Portal container={ container }>\n\t\t\t<>\n\t\t\t\t{ styleItems.map( ( item ) => (\n\t\t\t\t\t<style data-e-style-id={ item.id } key={ item.id }>\n\t\t\t\t\t\t{ item.value }\n\t\t\t\t\t</style>\n\t\t\t\t) ) }\n\t\t\t</>\n\t\t</Portal>\n\t);\n}\n\nfunction usePortalContainer() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeHead() );\n}\n","import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react';\nimport { type StylesProvider, stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport { type StyleItem, type StyleRenderer } from '../renderers/create-styles-renderer';\nimport { abortPreviousRuns } from '../utils/abort-previous-runs';\nimport { signalizedProcess } from '../utils/signalized-process';\nimport { useOnMount } from './use-on-mount';\nimport { useStylePropResolver } from './use-style-prop-resolver';\nimport { useStyleRenderer } from './use-style-renderer';\n\ntype ProviderAndStyleItems = { provider: StylesProvider; items: StyleItem[] };\n\ntype ProviderAndSubscriber = { provider: StylesProvider; subscriber: () => Promise< void > };\n\ntype ProviderAndStyleItemsMap = Record< string, ProviderAndStyleItems >;\n\nexport function useStyleItems() {\n\tconst resolve = useStylePropResolver();\n\tconst renderStyles = useStyleRenderer( resolve );\n\n\tconst [ styleItems, setStyleItems ] = useState< ProviderAndStyleItemsMap >( {} );\n\n\tconst providerAndSubscribers = useMemo( () => {\n\t\treturn stylesRepository.getProviders().map( ( provider ): ProviderAndSubscriber => {\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\tsubscriber: createProviderSubscriber( {\n\t\t\t\t\tprovider,\n\t\t\t\t\trenderStyles,\n\t\t\t\t\tsetStyleItems,\n\t\t\t\t} ),\n\t\t\t};\n\t\t} );\n\t}, [ renderStyles ] );\n\n\tuseEffect( () => {\n\t\tconst unsubscribes = providerAndSubscribers.map( ( { provider, subscriber } ) =>\n\t\t\tprovider.subscribe( subscriber )\n\t\t);\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t}, [ providerAndSubscribers ] );\n\n\tuseOnMount( () => {\n\t\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\t\tconst promises = providerAndSubscribers.map( async ( { subscriber } ) => subscriber() );\n\n\t\t\tawait Promise.all( promises );\n\t\t} );\n\t} );\n\n\treturn Object.values( styleItems )\n\t\t.sort( ( { provider: providerA }, { provider: providerB } ) => providerA.priority - providerB.priority )\n\t\t.flatMap( ( { items } ) => items );\n}\n\ntype CreateProviderSubscriberArgs = {\n\tprovider: StylesProvider;\n\trenderStyles: StyleRenderer;\n\tsetStyleItems: Dispatch< SetStateAction< ProviderAndStyleItemsMap > >;\n};\n\nfunction createProviderSubscriber( { provider, renderStyles, setStyleItems }: CreateProviderSubscriberArgs ) {\n\treturn abortPreviousRuns( ( abortController ) =>\n\t\tsignalizedProcess( abortController.signal )\n\t\t\t.then( ( _, signal ) => renderStyles( { styles: provider.actions.get(), signal } ) )\n\t\t\t.then( ( items ) => {\n\t\t\t\tsetStyleItems( ( prev ) => ( {\n\t\t\t\t\t...prev,\n\t\t\t\t\t[ provider.key ]: { provider, items },\n\t\t\t\t} ) );\n\t\t\t} )\n\t\t\t.execute()\n\t);\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function abortPreviousRuns< TArgs extends any[], TReturn >(\n\tcb: ( abortController: AbortController, ...args: TArgs ) => TReturn\n): ( ...args: TArgs ) => TReturn {\n\tlet abortController: AbortController | null = null;\n\n\treturn ( ...args: TArgs ) => {\n\t\tif ( abortController ) {\n\t\t\tabortController.abort();\n\t\t}\n\n\t\tabortController = new AbortController();\n\n\t\treturn cb( abortController, ...args );\n\t};\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFn = ( ...args: any[] ) => any;\n\ntype SignalizedProcess< TNextArg = never > = {\n\tthen: < TReturn >(\n\t\tcb: ( arg: TNextArg, signal: AbortSignal ) => TReturn\n\t) => SignalizedProcess< Awaited< TReturn > >;\n\n\texecute: () => Promise< void >;\n};\n\nexport function signalizedProcess< TNextArg = never >(\n\tsignal: AbortSignal,\n\tsteps: AnyFn[] = []\n): SignalizedProcess< TNextArg > {\n\treturn {\n\t\tthen: ( cb ) => {\n\t\t\tsteps.push( cb );\n\n\t\t\treturn signalizedProcess( signal, steps );\n\t\t},\n\n\t\texecute: async () => {\n\t\t\tlet lastResult: TNextArg | undefined;\n\n\t\t\tfor ( const step of steps ) {\n\t\t\t\tif ( signal.aborted ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tlastResult = await step( lastResult, signal );\n\t\t\t}\n\t\t},\n\t};\n}\n","import { useEffect, useRef } from 'react';\n\nexport function useOnMount( cb: () => void ) {\n\tconst mounted = useRef( false );\n\n\tuseEffect( () => {\n\t\tif ( ! mounted.current ) {\n\t\t\tmounted.current = true;\n\n\t\t\tcb();\n\t\t}\n\t}, [] ); // eslint-disable-line react-hooks/exhaustive-deps\n}\n","import { useMemo } from 'react';\nimport { getStylesSchema } from '@elementor/editor-styles';\n\nimport { createPropsResolver } from '../renderers/create-props-resolver';\nimport { styleTransformersRegistry } from '../style-transformers-registry';\nimport { enqueueFont } from '../sync/enqueue-font';\n\nexport function useStylePropResolver() {\n\treturn useMemo( () => {\n\t\treturn createPropsResolver( {\n\t\t\ttransformers: styleTransformersRegistry,\n\t\t\tschema: getStylesSchema(),\n\t\t\tonPropResolve: ( { key, value } ) => {\n\t\t\t\tif ( key !== 'font-family' || typeof value !== 'string' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tenqueueFont( value );\n\t\t\t},\n\t\t} );\n\t}, [] );\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 TransformersRegistry } from '../transformers/create-transformers-registry';\nimport { getMultiPropsValue, isMultiProps } from './multi-props';\n\ntype CreatePropResolverArgs = {\n\ttransformers: TransformersRegistry;\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\ntype ResolvedProps = Record< string, unknown >;\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 ): Promise< ResolvedProps > {\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\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\tif ( value.$$type !== type.key ) {\n\t\t\treturn null;\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.get( 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 { 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 { type PropTypeKey } from '@elementor/editor-props';\n\nimport { type AnyTransformer, type TransformersMap } from './types';\n\nexport type TransformersRegistry = ReturnType< typeof createTransformersRegistry >;\n\nexport function createTransformersRegistry() {\n\tconst transformers: TransformersMap = {};\n\n\tlet fallbackTransformer: AnyTransformer | null = null;\n\n\treturn {\n\t\tregister( type: PropTypeKey, transformer: AnyTransformer ) {\n\t\t\ttransformers[ type ] = transformer;\n\n\t\t\treturn this;\n\t\t},\n\t\tregisterFallback( transformer: AnyTransformer ) {\n\t\t\tfallbackTransformer = transformer;\n\n\t\t\treturn this;\n\t\t},\n\t\tget( type: PropTypeKey ): AnyTransformer | null {\n\t\t\treturn transformers[ type ] ?? fallbackTransformer;\n\t\t},\n\t};\n}\n","import { createTransformersRegistry } from './transformers/create-transformers-registry';\n\nexport const styleTransformersRegistry = createTransformersRegistry();\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 { useMemo } from 'react';\nimport { useBreakpointsMap } from '@elementor/editor-responsive';\n\nimport { type PropsResolver } from '../renderers/create-props-resolver';\nimport { createStylesRenderer } from '../renderers/create-styles-renderer';\n\nconst SELECTOR_PREFIX = '.elementor';\n\nexport function useStyleRenderer( resolve: PropsResolver ) {\n\tconst breakpoints = useBreakpointsMap();\n\n\treturn useMemo( () => {\n\t\treturn createStylesRenderer( {\n\t\t\tselectorPrefix: SELECTOR_PREFIX,\n\t\t\tbreakpoints,\n\t\t\tresolve,\n\t\t} );\n\t}, [ resolve, breakpoints ] );\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\nexport type StyleItem = {\n\tid: string;\n\tvalue: string;\n};\n\nexport type StyleRenderer = ReturnType< typeof createStylesRenderer >;\n\ntype CreateStyleRendererArgs = {\n\tresolve: PropsResolver;\n\tbreakpoints: BreakpointsMap;\n\tselectorPrefix?: string;\n};\n\ntype StyleRendererArgs = {\n\tstyles: StyleDefinition[];\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 function createStylesRenderer( { resolve, breakpoints, selectorPrefix = '' }: CreateStyleRendererArgs ) {\n\treturn async ( { styles, signal }: StyleRendererArgs ): Promise< StyleItem[] > => {\n\t\tconst stylesCssPromises = styles.map( async ( style ) => {\n\t\t\tconst variantCssPromises = Object.values( style.variants ).map( async ( variant ) => {\n\t\t\t\tconst css = await propsToCss( { props: variant.props, resolve, signal } );\n\n\t\t\t\treturn createStyleWrapper()\n\t\t\t\t\t.forStyle( style )\n\t\t\t\t\t.withPrefix( selectorPrefix )\n\t\t\t\t\t.withState( variant.meta.state )\n\t\t\t\t\t.withMediaQuery( variant.meta.breakpoint ? breakpoints[ variant.meta.breakpoint ] : null )\n\t\t\t\t\t.wrap( css );\n\t\t\t} );\n\n\t\t\tconst variantsCss = await Promise.all( variantCssPromises );\n\n\t\t\treturn {\n\t\t\t\tid: style.id,\n\t\t\t\tvalue: variantsCss.join( '' ),\n\t\t\t};\n\t\t} );\n\n\t\treturn await Promise.all( stylesCssPromises );\n\t};\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\tif ( propValue === null ) {\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tacc.push( propName + ':' + propValue + ';' );\n\n\t\t\treturn acc;\n\t\t}, [] )\n\t\t.join( '' );\n}\n","import type { CanvasExtendedWindow } from './types';\n\nexport function getCanvasIframeHead() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.$preview?.[ 0 ]?.contentDocument?.head;\n}\n","import { createTransformersRegistry } from './transformers/create-transformers-registry';\n\nexport const settingsTransformersRegistry = 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 arrayTransformer = createTransformer( ( value: unknown[] ) => {\n\treturn value.filter( Boolean );\n} );\n","import { createTransformer } from '../create-transformer';\n\ntype Link = {\n\tdestination: string | number;\n\tisTargetBlank: boolean;\n};\n\nexport const linkTransformer = createTransformer( ( { destination, isTargetBlank }: Link ) => {\n\treturn {\n\t\t// The real post URL is not relevant in the Editor.\n\t\thref: typeof destination === 'number' ? '#post-id-' + destination : destination,\n\t\ttarget: isTargetBlank ? '_blank' : '_self',\n\t};\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\tid: value.id ?? null,\n\turl: value.url ?? null,\n} ) );\n","import { getMediaAttachment } from '@elementor/wp-media';\n\nimport { createTransformer } from '../create-transformer';\n\ntype Image = {\n\tsrc?: {\n\t\tid: number | null;\n\t\turl: string | null;\n\t};\n\tsize?: string;\n};\n\nexport const imageTransformer = createTransformer( async ( value: Image ) => {\n\tconst { src, size } = value;\n\n\tif ( ! src?.id ) {\n\t\treturn src?.url ? { src: src.url } : null;\n\t}\n\n\tconst attachment = await getMediaAttachment( { id: src.id } );\n\n\tconst sizedAttachment = attachment?.sizes?.[ size ?? '' ];\n\n\tif ( sizedAttachment ) {\n\t\treturn {\n\t\t\tsrc: sizedAttachment.url,\n\t\t\theight: sizedAttachment.height,\n\t\t\twidth: sizedAttachment.width,\n\t\t};\n\t}\n\n\tif ( attachment ) {\n\t\treturn {\n\t\t\tsrc: attachment.url,\n\t\t\theight: attachment.height,\n\t\t\twidth: attachment.width,\n\t\t};\n\t}\n\n\treturn null;\n} );\n","import { createTransformer } from '../create-transformer';\n\nexport const plainTransformer = createTransformer( ( value: unknown ) => {\n\treturn value;\n} );\n","import { settingsTransformersRegistry } from './settings-transformers-registry';\nimport { arrayTransformer } from './transformers/settings/array-transformer';\nimport { linkTransformer } from './transformers/settings/link-transformer';\nimport { imageSrcTransformer } from './transformers/shared/image-src-transformer';\nimport { imageTransformer } from './transformers/shared/image-transformer';\nimport { plainTransformer } from './transformers/shared/plain-transformer';\n\nexport function initSettingsTransformers() {\n\tsettingsTransformersRegistry\n\t\t.register( 'classes', arrayTransformer )\n\t\t.register( 'link', linkTransformer )\n\t\t.register( 'image', imageTransformer )\n\t\t.register( 'image-src', imageSrcTransformer )\n\t\t.registerFallback( plainTransformer );\n}\n","import { createTransformer } from '../create-transformer';\n\ntype BackgroundColorOverlay = {\n\tcolor?: string;\n};\n\nexport const backgroundColorOverlayTransformer = createTransformer( ( value: BackgroundColorOverlay ) => {\n\tconst { color = null } = value;\n\n\tif ( ! color ) {\n\t\treturn null;\n\t}\n\n\treturn `linear-gradient(${ color }, ${ color })`;\n} );\n","import { createTransformer } from '../create-transformer';\n\ntype BackgroundGradientOverlay = {\n\ttype?: 'linear' | 'radial';\n\tangle?: string;\n\tstops?: string;\n\tpositions?: string;\n};\n\nexport const backgroundGradientOverlayTransformer = createTransformer( ( value: BackgroundGradientOverlay ) => {\n\tif ( value.type === 'radial' ) {\n\t\treturn `radial-gradient(circle at ${ value.positions }, ${ value.stops })`;\n\t}\n\n\treturn `linear-gradient(${ value.angle }deg, ${ value.stops })`;\n} );\n","import { createTransformer } from '../create-transformer';\n\nconst DEFAULT_POSITION_VALUE = '0% 0%';\n\ntype BackgroundImageOverlay = {\n\timage?: {\n\t\tsrc?: string;\n\t};\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 src = image.src ? `url(${ image.src })` : null;\n\n\tconst backgroundStyles = [\n\t\tsrc,\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, y }: BackgroundImagePositionOffset ) => `${ x ?? '0px' } ${ y ?? '0px' }`\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, height }: BackgroundImageSizeScale ) => `${ width ?? 'auto' } ${ height ?? 'auto' }`\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\ntype ColorStop = {\n\tcolor?: string;\n\toffset?: number;\n};\n\nexport const colorStopTransformer = createTransformer(\n\t( value: ColorStop ) => `${ value?.color } ${ value?.offset ?? 0 }%`\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 { 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 { 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 { imageSrcTransformer } from './transformers/shared/image-src-transformer';\nimport { imageTransformer } from './transformers/shared/image-transformer';\nimport { plainTransformer } from './transformers/shared/plain-transformer';\nimport { backgroundColorOverlayTransformer } from './transformers/styles/background-color-overlay-transformer';\nimport { backgroundGradientOverlayTransformer } from './transformers/styles/background-gradient-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 { colorStopTransformer } from './transformers/styles/color-stop-transformer';\nimport { createCombineArrayTransformer } from './transformers/styles/create-combine-array-transformer';\nimport { createMultiPropsTransformer } from './transformers/styles/create-multi-props-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[ 'block-start', 'block-end', 'inline-start', 'inline-end' ],\n\t\t\t\t( { propKey, key } ) => `${ propKey }-${ key }`\n\t\t\t)\n\t\t)\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-gradient-overlay', backgroundGradientOverlayTransformer )\n\t\t.register( 'gradient-color-stop', createCombineArrayTransformer( ',' ) )\n\t\t.register( 'color-stop', colorStopTransformer )\n\t\t.register( 'background-image-position-offset', backgroundImagePositionOffsetTransformer )\n\t\t.register( 'background-image-size-scale', backgroundImageSizeScaleTransformer )\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(\n\t\t\t\t[ 'block-start', 'block-end', 'inline-start', 'inline-end' ],\n\t\t\t\t( { key } ) => `border-${ key }-width`\n\t\t\t)\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\t\t.registerFallback( plainTransformer );\n}\n","import { getWidgetsCache } from '@elementor/editor-elements';\nimport { __privateListenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';\n\nimport { createDomRenderer } from '../renderers/create-dom-renderer';\nimport { createElementType } from './create-element-type';\nimport { canBeTemplated, createTemplatedElementType } from './create-templated-element-type';\nimport type { LegacyWindow } from './types';\n\nexport function initLegacyViews() {\n\t__privateListenTo( v1ReadyEvent(), () => {\n\t\tconst config = getWidgetsCache() ?? {};\n\t\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\t\tconst renderer = createDomRenderer();\n\n\t\tObject.entries( config ).forEach( ( [ type, element ] ) => {\n\t\t\tif ( ! element.atomic ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst ElementType = canBeTemplated( element )\n\t\t\t\t? createTemplatedElementType( { type, renderer, element } )\n\t\t\t\t: createElementType( type );\n\n\t\t\tlegacyWindow.elementor.elementsManager.registerElementType( new ElementType() );\n\t\t} );\n\t} );\n}\n","import { createArrayLoader, createEnvironment, type TwingArrayLoader, type TwingEnvironment } from '@elementor/twing';\n\nexport type DomRenderer = {\n\tregister: TwingArrayLoader[ 'setTemplate' ];\n\trender: TwingEnvironment[ 'render' ];\n};\n\nexport function createDomRenderer(): DomRenderer {\n\tconst loader = createArrayLoader( {} );\n\tconst environment = createEnvironment( loader );\n\n\tenvironment.registerEscapingStrategy( escapeHtmlTag, 'html_tag' );\n\tenvironment.registerEscapingStrategy( escapeURL, 'full_url' );\n\n\treturn {\n\t\tregister: loader.setTemplate,\n\t\trender: environment.render,\n\t};\n}\n\nfunction escapeHtmlTag( value: string ) {\n\tconst allowedTags = [\n\t\t'a',\n\t\t'article',\n\t\t'aside',\n\t\t'button',\n\t\t'div',\n\t\t'footer',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t\t'header',\n\t\t'main',\n\t\t'nav',\n\t\t'p',\n\t\t'section',\n\t\t'span',\n\t];\n\n\treturn allowedTags.includes( value ) ? value : 'div';\n}\n\nfunction escapeURL( value: string ) {\n\tconst allowedProtocols = [ 'http:', 'https:', 'mailto:', 'tel:' ];\n\n\ttry {\n\t\tconst parsed = new URL( value );\n\n\t\treturn allowedProtocols.includes( parsed.protocol ) ? value : '';\n\t} catch {\n\t\treturn '';\n\t}\n}\n","import { type ElementType, type ElementView, type LegacyWindow } from './types';\n\n// Technically it shouldn't have a return type annotation, but for some\n// reason TypeScript can't infer the types properly when emitting DTS.\n//\n// See: https://github.com/microsoft/TypeScript/issues/9944#issuecomment-244448079\nexport function createElementType( type: string ): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createElementViewClassDeclaration();\n\t\t}\n\t};\n}\n\nexport function createElementViewClassDeclaration(): typeof ElementView {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.views.Widget {\n\t\t// Dispatch `render` event so the overlay layer will be updated\n\t\tonRender( ...args: unknown[] ) {\n\t\t\tsuper.onRender( ...args );\n\n\t\t\tthis.#dispatchEvent( 'elementor/preview/atomic-widget/render' );\n\t\t\tthis.#dispatchPreviewEvent( 'elementor/element/render' );\n\t\t}\n\n\t\t// Dispatch `destroy` event so the overlay layer will be updated\n\t\tonDestroy( ...args: unknown[] ) {\n\t\t\tsuper.onDestroy( ...args );\n\n\t\t\tthis.#dispatchEvent( 'elementor/preview/atomic-widget/destroy' );\n\t\t\tthis.#dispatchPreviewEvent( 'elementor/element/destroy' );\n\t\t}\n\n\t\tattributes() {\n\t\t\treturn {\n\t\t\t\t...super.attributes(),\n\n\t\t\t\t// Mark the widget as atomic, so external APIs (such as the overlay layer) can reference it.\n\t\t\t\t'data-atomic': '',\n\n\t\t\t\t// Make the wrapper is non-existent in terms of CSS to mimic the frontend DOM tree.\n\t\t\t\tstyle: 'display: contents !important;',\n\t\t\t};\n\t\t}\n\n\t\t// Removes behaviors that are not needed for atomic widgets (that are implemented in the overlay layer).\n\t\tbehaviors() {\n\t\t\tconst disabledBehaviors = [ 'InlineEditing', 'Draggable', 'Resizable' ];\n\n\t\t\tconst behaviorsAsEntries = Object.entries( super.behaviors() ).filter(\n\t\t\t\t( [ key ] ) => ! disabledBehaviors.includes( key )\n\t\t\t);\n\n\t\t\treturn Object.fromEntries( behaviorsAsEntries );\n\t\t}\n\n\t\t// Change the drag handle because the $el is not the draggable element (`display: contents`).\n\t\tgetDomElement() {\n\t\t\treturn this.$el.find( ':first-child' );\n\t\t}\n\n\t\t// Remove the overlay, so we can use the new overlay layer.\n\t\tgetHandlesOverlay() {\n\t\t\treturn null;\n\t\t}\n\n\t\t#dispatchEvent( eventType: string ) {\n\t\t\twindow.top?.dispatchEvent(\n\t\t\t\tnew CustomEvent( eventType, {\n\t\t\t\t\tdetail: { id: this.model.get( 'id' ) },\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\t#dispatchPreviewEvent( eventType: string ) {\n\t\t\tlegacyWindow.elementor?.$preview?.[ 0 ]?.contentWindow.dispatchEvent(\n\t\t\t\tnew CustomEvent( eventType, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tid: this.model.get( 'id' ),\n\t\t\t\t\t\ttype: this.model.get( 'widgetType' ),\n\t\t\t\t\t\telement: this.getDomElement().get( 0 ),\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tgetContextMenuGroups() {\n\t\t\treturn super.getContextMenuGroups().filter( ( group ) => group.name !== 'save' );\n\t\t}\n\t};\n}\n","import type { V1ElementConfig } from '@elementor/editor-elements';\n\nimport { type DomRenderer } from '../renderers/create-dom-renderer';\nimport { createPropsResolver, type PropsResolver } from '../renderers/create-props-resolver';\nimport { settingsTransformersRegistry } from '../settings-transformers-registry';\nimport { signalizedProcess } from '../utils/signalized-process';\nimport { createElementViewClassDeclaration } from './create-element-type';\nimport { type ElementType, type ElementView, type LegacyWindow } from './types';\n\ntype CreateTypeOptions = {\n\ttype: string;\n\trenderer: DomRenderer;\n\telement: TemplatedElementConfig;\n};\n\ntype TemplatedElementConfig = Required<\n\tPick< V1ElementConfig, 'twig_templates' | 'twig_main_template' | 'atomic_props_schema' | 'base_styles_dictionary' >\n>;\n\nexport function createTemplatedElementType( { type, renderer, element }: CreateTypeOptions ): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\tObject.entries( element.twig_templates ).forEach( ( [ key, template ] ) => {\n\t\trenderer.register( key, template );\n\t} );\n\n\tconst propsResolver = createPropsResolver( {\n\t\ttransformers: settingsTransformersRegistry,\n\t\tschema: element.atomic_props_schema,\n\t} );\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createTemplatedElementViewClassDeclaration( {\n\t\t\t\ttype,\n\t\t\t\trenderer,\n\t\t\t\tpropsResolver,\n\t\t\t\tbaseStylesDictionary: element.base_styles_dictionary,\n\t\t\t\ttemplateKey: element.twig_main_template,\n\t\t\t} );\n\t\t}\n\t};\n}\n\nexport function canBeTemplated( element: Partial< TemplatedElementConfig > ): element is TemplatedElementConfig {\n\treturn !! (\n\t\telement.atomic_props_schema &&\n\t\telement.twig_templates &&\n\t\telement.twig_main_template &&\n\t\telement.base_styles_dictionary\n\t);\n}\n\ntype CreateViewOptions = {\n\ttype: string;\n\trenderer: DomRenderer;\n\tpropsResolver: PropsResolver;\n\ttemplateKey: string;\n\tbaseStylesDictionary: Record< string, string >;\n};\n\nfunction createTemplatedElementViewClassDeclaration( {\n\ttype,\n\trenderer,\n\tpropsResolver: resolveProps,\n\ttemplateKey,\n\tbaseStylesDictionary,\n}: CreateViewOptions ): typeof ElementView {\n\tconst BaseView = createElementViewClassDeclaration();\n\n\treturn class extends BaseView {\n\t\t#abortController: AbortController | null = null;\n\n\t\tgetTemplateType() {\n\t\t\treturn 'twig';\n\t\t}\n\n\t\trenderOnChange() {\n\t\t\tthis.render();\n\t\t}\n\n\t\t// Overriding Marionette original render method to inject our renderer.\n\t\tasync _renderTemplate() {\n\t\t\tthis.#beforeRenderTemplate();\n\n\t\t\tthis.#abortController?.abort();\n\t\t\tthis.#abortController = new AbortController();\n\n\t\t\tconst process = signalizedProcess( this.#abortController.signal )\n\t\t\t\t.then( ( _, signal ) => {\n\t\t\t\t\tconst settings = this.model.get( 'settings' ).toJSON();\n\n\t\t\t\t\treturn resolveProps( {\n\t\t\t\t\t\tprops: settings,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.then( ( resolvedSettings ) => {\n\t\t\t\t\t// Same as the Backend.\n\t\t\t\t\tconst context = {\n\t\t\t\t\t\tid: this.model.get( 'id' ),\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tsettings: resolvedSettings,\n\t\t\t\t\t\tbase_styles: baseStylesDictionary,\n\t\t\t\t\t};\n\n\t\t\t\t\treturn renderer.render( templateKey, context );\n\t\t\t\t} )\n\t\t\t\t.then( ( html ) => this.$el.html( html ) );\n\n\t\t\tawait process.execute();\n\n\t\t\tthis.#afterRenderTemplate();\n\t\t}\n\n\t\t// Emulating the original Marionette behavior.\n\t\t#beforeRenderTemplate() {\n\t\t\tthis.triggerMethod( 'before:render:template' );\n\t\t}\n\n\t\t#afterRenderTemplate() {\n\t\t\tthis.bindUIElements();\n\n\t\t\tthis.triggerMethod( 'render:template' );\n\t\t}\n\t};\n}\n","import {\n\tgetAnchoredAncestorId,\n\tgetAnchoredDescendantId,\n\tisElementAnchored,\n\ttype V1Element,\n} from '@elementor/editor-elements';\nimport { type NotificationData, notify } from '@elementor/editor-notifications';\nimport { blockCommand } from '@elementor/editor-v1-adapters';\nimport { type ButtonProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type CanvasExtendedWindow } from './sync/types';\n\nexport function initLinkInLinkPrevention() {\n\tblockCommand( {\n\t\tcommand: 'document/elements/paste',\n\t\tcondition: blockLinkInLinkPaste,\n\t} );\n\n\tblockCommand( {\n\t\tcommand: 'document/elements/move',\n\t\tcondition: blockLinkInLinkMove,\n\t} );\n}\n\ntype PasteArgs = {\n\tcontainers?: V1Element[];\n\tcontainer?: V1Element;\n\tstorageType?: string;\n};\n\ntype MoveArgs = {\n\tcontainers?: V1Element[];\n\tcontainer?: V1Element;\n\ttarget?: V1Element;\n};\n\nexport type StorageContent = {\n\tclipboard?: {\n\t\telements?: { id?: string }[];\n\t};\n};\n\nconst learnMoreActionProps: Partial< ButtonProps > = {\n\thref: 'https://go.elementor.com/element-link-inside-link-infotip',\n\ttarget: '_blank',\n\tcolor: 'inherit',\n\tvariant: 'text',\n\tsx: {\n\t\tmarginInlineStart: '20px',\n\t},\n\tchildren: 'Learn more',\n};\n\nfunction blockLinkInLinkPaste( args: PasteArgs ): boolean {\n\tconst { containers = [ args.container ], storageType } = args;\n\tconst targetElements = containers;\n\n\tif ( storageType !== 'localstorage' ) {\n\t\treturn false;\n\t}\n\n\tconst data = ( window as CanvasExtendedWindow )?.elementorCommon?.storage?.get();\n\n\tif ( ! data?.clipboard?.elements ) {\n\t\treturn false;\n\t}\n\n\tconst sourceElements = data.clipboard.elements;\n\n\tconst notification: NotificationData = {\n\t\ttype: 'default',\n\t\tmessage: __(\n\t\t\t\"To paste a link to this element, first remove the link from it's parent container.\",\n\t\t\t'elementor'\n\t\t),\n\t\tid: 'paste-in-link-blocked',\n\t\tadditionalActionProps: [ learnMoreActionProps ],\n\t};\n\n\tconst blocked = shouldBlock( sourceElements, targetElements );\n\n\tif ( blocked ) {\n\t\tnotify( notification );\n\t}\n\n\treturn blocked;\n}\n\nfunction blockLinkInLinkMove( args: MoveArgs ): boolean {\n\tconst { containers = [ args.container ], target } = args;\n\tconst sourceElements = containers;\n\tconst targetElement = target;\n\n\tconst notification: NotificationData = {\n\t\ttype: 'default',\n\t\tmessage: __( \"To drag a link to this element, first remove the link from it's parent container.\", 'elementor' ),\n\t\tid: 'move-in-link-blocked',\n\t\tadditionalActionProps: [ learnMoreActionProps ],\n\t};\n\n\tconst isBlocked = shouldBlock( sourceElements, [ targetElement ] );\n\n\tif ( isBlocked ) {\n\t\tnotify( notification );\n\t}\n\n\treturn isBlocked;\n}\n\nfunction shouldBlock(\n\tsourceElements?: ( { id?: string } | undefined )[],\n\ttargetElements?: ( V1Element | undefined )[]\n): boolean {\n\tif ( ! sourceElements?.length || ! targetElements?.length ) {\n\t\treturn false;\n\t}\n\n\tconst isSourceContainsAnAnchor = sourceElements.some( ( src ) => {\n\t\treturn src?.id ? isElementAnchored( src.id ) || !! getAnchoredDescendantId( src.id ) : false;\n\t} );\n\n\tif ( ! isSourceContainsAnAnchor ) {\n\t\treturn false;\n\t}\n\n\tconst isTargetContainsAnAnchor = targetElements.some( ( target ) => {\n\t\treturn target?.id ? isElementAnchored( target.id ) || !! getAnchoredAncestorId( target.id ) : false;\n\t} );\n\n\treturn isTargetContainsAnAnchor;\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport {\n\t__privateListenTo as listenTo,\n\tblockCommand,\n\ttype CommandEvent,\n\tcommandStartEvent,\n} from '@elementor/editor-v1-adapters';\n\nimport { undoablePasteElementStyle } from './undoable-actions/paste-element-style';\nimport { type ContainerArgs, getClipboardElements, hasAtomicWidgets, isAtomicWidget } from './utils';\n\ntype PasteStylesCommandArgs = ContainerArgs & {\n\tstorageKey?: string;\n};\n\nexport function initPasteStyleCommand() {\n\tconst pasteElementStyleCommand = undoablePasteElementStyle();\n\n\tblockCommand( {\n\t\tcommand: 'document/elements/paste-style',\n\t\tcondition: hasAtomicWidgets,\n\t} );\n\n\tlistenTo( commandStartEvent( 'document/elements/paste-style' ), ( e ) =>\n\t\tpasteStyles( ( e as CommandEvent ).args, pasteElementStyleCommand )\n\t);\n}\n\nfunction pasteStyles( args: PasteStylesCommandArgs, pasteCallback: ReturnType< typeof undoablePasteElementStyle > ) {\n\tconst { containers = [ args.container ], storageKey } = args;\n\n\tconst clipboardElements = getClipboardElements( storageKey );\n\tconst [ clipboardElement ] = clipboardElements ?? [];\n\n\tif ( ! clipboardElement ) {\n\t\treturn;\n\t}\n\n\tconst elementStyles = clipboardElement.styles;\n\tconst elementStyle = Object.values( elementStyles ?? {} )[ 0 ]; // we currently support only one local style\n\n\tif ( ! elementStyle ) {\n\t\treturn;\n\t}\n\n\tconst atomicContainers = containers.filter( isAtomicWidget ) as V1Element[];\n\n\tif ( ! atomicContainers.length ) {\n\t\treturn;\n\t}\n\n\tpasteCallback( { containers: atomicContainers, newStyle: elementStyle } );\n}\n","import {\n\tcreateElementStyle,\n\tdeleteElementStyle,\n\tgetElementStyles,\n\tupdateElementStyle,\n\ttype V1Element,\n} from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { LOCAL_STYLES_RESERVED_LABEL } from '@elementor/editor-styles-repository';\nimport { undoable } from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport { getClassesProp, getTitleForContainers } from '../utils';\n\ntype PasteElementStyleArgs = {\n\tcontainers: V1Element[];\n\tnewStyle: StyleDefinition;\n};\n\nexport const undoablePasteElementStyle = () =>\n\tundoable(\n\t\t{\n\t\t\tdo: ( { containers, newStyle }: PasteElementStyleArgs ) => {\n\t\t\t\treturn containers.map( ( container ) => {\n\t\t\t\t\tconst elementId = container.id;\n\t\t\t\t\tconst classesProp = getClassesProp( container );\n\n\t\t\t\t\tif ( ! classesProp ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst originalStyles = getElementStyles( container.id );\n\n\t\t\t\t\tconst [ styleId, styleDef ] = Object.entries( originalStyles ?? {} )[ 0 ] ?? []; // we currently support only one local style\n\t\t\t\t\tconst originalStyle = Object.keys( styleDef ?? {} ).length ? styleDef : null;\n\n\t\t\t\t\tconst revertData = {\n\t\t\t\t\t\tstyleId,\n\t\t\t\t\t\toriginalStyle,\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( styleId ) {\n\t\t\t\t\t\tnewStyle.variants.forEach( ( { meta, props } ) => {\n\t\t\t\t\t\t\tupdateElementStyle( {\n\t\t\t\t\t\t\t\telementId,\n\t\t\t\t\t\t\t\tstyleId,\n\t\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t\t\tprops,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [ firstVariant ] = newStyle.variants;\n\t\t\t\t\t\tconst additionalVariants = newStyle.variants.slice( 1 );\n\n\t\t\t\t\t\trevertData.styleId = createElementStyle( {\n\t\t\t\t\t\t\telementId,\n\t\t\t\t\t\t\tclassesProp,\n\t\t\t\t\t\t\tlabel: LOCAL_STYLES_RESERVED_LABEL,\n\t\t\t\t\t\t\t...firstVariant,\n\t\t\t\t\t\t\tadditionalVariants,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn revertData;\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tundo: ( { containers }, revertDataItems ) => {\n\t\t\t\tcontainers.forEach( ( container, index ) => {\n\t\t\t\t\tconst revertData = revertDataItems[ index ];\n\n\t\t\t\t\tif ( ! revertData ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! revertData.originalStyle ) {\n\t\t\t\t\t\t// the container didn't have a style before pasting the new style\n\t\t\t\t\t\tdeleteElementStyle( container.id, revertData.styleId );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst classesProp = getClassesProp( container );\n\n\t\t\t\t\tif ( ! classesProp ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst [ firstVariant ] = revertData.originalStyle.variants;\n\t\t\t\t\tconst additionalVariants = revertData.originalStyle.variants.slice( 1 );\n\n\t\t\t\t\tcreateElementStyle( {\n\t\t\t\t\t\telementId: container.id,\n\t\t\t\t\t\tclassesProp,\n\t\t\t\t\t\tlabel: LOCAL_STYLES_RESERVED_LABEL,\n\t\t\t\t\t\tstyleId: revertData.styleId,\n\t\t\t\t\t\t...firstVariant,\n\t\t\t\t\t\tadditionalVariants,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttitle: ( { containers } ) => getTitleForContainers( containers ),\n\t\t\tsubtitle: __( 'Style Pasted', 'elementor' ),\n\t\t}\n\t);\n","import { getElementLabel, getWidgetsCache, type V1Element, type V1ElementModelProps } from '@elementor/editor-elements';\nimport { CLASSES_PROP_KEY, type PropsSchema } from '@elementor/editor-props';\nimport { __ } from '@wordpress/i18n';\n\nexport type ContainerArgs = {\n\tcontainer?: V1Element;\n\tcontainers?: V1Element[];\n};\n\nexport function hasAtomicWidgets( args: ContainerArgs ): boolean {\n\tconst { containers = [ args.container ] } = args;\n\n\treturn containers.some( isAtomicWidget );\n}\n\nexport function isAtomicWidget( container: V1Element | undefined ): boolean {\n\tif ( ! container ) {\n\t\treturn false;\n\t}\n\n\treturn Boolean( getContainerSchema( container ) );\n}\n\nexport function getClassesProp( container: V1Element ): string | null {\n\tconst propsSchema = getContainerSchema( container );\n\n\tif ( ! propsSchema ) {\n\t\treturn null;\n\t}\n\n\tconst [ propKey ] =\n\t\tObject.entries( propsSchema ).find(\n\t\t\t( [ , propType ] ) => propType.kind === 'plain' && propType.key === CLASSES_PROP_KEY\n\t\t) ?? [];\n\n\treturn propKey ?? null;\n}\n\nfunction getContainerSchema( container: V1Element ): PropsSchema | null {\n\tconst type = container?.model.get( 'widgetType' ) || container?.model.get( 'elType' );\n\n\tconst widgetsCache = getWidgetsCache();\n\tconst elementType = widgetsCache?.[ type ];\n\n\treturn elementType?.atomic_props_schema ?? null;\n}\n\ntype ClipboardElements = V1ElementModelProps[];\n\nexport function getClipboardElements( storageKey: string = 'clipboard' ): ClipboardElements | undefined {\n\ttry {\n\t\tconst storedData = JSON.parse( localStorage.getItem( 'elementor' ) ?? '{}' );\n\n\t\treturn storedData[ storageKey ]?.elements as ClipboardElements;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function getTitleForContainers( containers: V1Element[] ): string {\n\treturn containers.length > 1 ? __( 'Elements', 'elementor' ) : getElementLabel( containers[ 0 ].id );\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport {\n\t__privateListenTo as listenTo,\n\tblockCommand,\n\ttype CommandEvent,\n\tcommandStartEvent,\n} from '@elementor/editor-v1-adapters';\n\nimport { undoableResetElementStyle } from './undoable-actions/reset-element-style';\nimport { type ContainerArgs, hasAtomicWidgets, isAtomicWidget } from './utils';\n\nexport function initResetStyleCommand() {\n\tconst resetElementStyles = undoableResetElementStyle();\n\n\tblockCommand( {\n\t\tcommand: 'document/elements/reset-style',\n\t\tcondition: hasAtomicWidgets,\n\t} );\n\n\tlistenTo( commandStartEvent( 'document/elements/reset-style' ), ( e ) =>\n\t\tresetStyles( ( e as CommandEvent ).args, resetElementStyles )\n\t);\n}\n\nfunction resetStyles( args: ContainerArgs, resetElementStyles: ReturnType< typeof undoableResetElementStyle > ) {\n\tconst { containers = [ args.container ] } = args;\n\tconst atomicContainers = containers.filter( isAtomicWidget ) as V1Element[];\n\n\tif ( ! atomicContainers.length ) {\n\t\treturn;\n\t}\n\n\tresetElementStyles( { containers: atomicContainers } );\n}\n","import { createElementStyle, deleteElementStyle, getElementStyles, type V1Element } from '@elementor/editor-elements';\nimport { LOCAL_STYLES_RESERVED_LABEL } from '@elementor/editor-styles-repository';\nimport { undoable } from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport { getClassesProp, getTitleForContainers } from '../utils';\n\ntype ResetElementStyleArgs = {\n\tcontainers: V1Element[];\n};\n\nexport const undoableResetElementStyle = () =>\n\tundoable(\n\t\t{\n\t\t\tdo: ( { containers }: ResetElementStyleArgs ) => {\n\t\t\t\treturn containers.map( ( container ) => {\n\t\t\t\t\tconst elementId = container.model.get( 'id' );\n\n\t\t\t\t\tconst containerStyles = getElementStyles( elementId );\n\n\t\t\t\t\tObject.keys( containerStyles ?? {} ).forEach( ( styleId ) =>\n\t\t\t\t\t\tdeleteElementStyle( elementId, styleId )\n\t\t\t\t\t);\n\n\t\t\t\t\treturn containerStyles;\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tundo: ( { containers }, revertDataItems ) => {\n\t\t\t\tcontainers.forEach( ( container, index ) => {\n\t\t\t\t\tconst classesProp = getClassesProp( container );\n\n\t\t\t\t\tif ( ! classesProp ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst elementId = container.model.get( 'id' );\n\t\t\t\t\tconst containerStyles = revertDataItems[ index ];\n\n\t\t\t\t\tObject.entries( containerStyles ?? {} ).forEach( ( [ styleId, style ] ) => {\n\t\t\t\t\t\tconst [ firstVariant ] = style.variants;\n\t\t\t\t\t\tconst additionalVariants = style.variants.slice( 1 );\n\n\t\t\t\t\t\tcreateElementStyle( {\n\t\t\t\t\t\t\telementId,\n\t\t\t\t\t\t\tclassesProp,\n\t\t\t\t\t\t\tstyleId,\n\t\t\t\t\t\t\tlabel: LOCAL_STYLES_RESERVED_LABEL,\n\t\t\t\t\t\t\t...firstVariant,\n\t\t\t\t\t\t\tadditionalVariants,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttitle: ( { containers } ) => getTitleForContainers( containers ),\n\t\t\tsubtitle: __( 'Style Reset', 'elementor' ),\n\t\t}\n\t);\n","import { initPasteStyleCommand } from './paste-style';\nimport { initResetStyleCommand } from './reset-style';\n\nexport function initStyleCommands() {\n\tinitPasteStyleCommand();\n\tinitResetStyleCommand();\n}\n","import { init } from './init';\n\nexport { styleTransformersRegistry } from './style-transformers-registry';\nexport { settingsTransformersRegistry } from './settings-transformers-registry';\nexport { createTransformer } from './transformers/create-transformer';\n\ninit();\n"],"mappings":"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","names":["React","useEffect","React","useListenTo","useEffect","useMemo","useState","useEffect","useMemo","size","useMemo","useState","useMemo","useEffect","useListenTo","size","size","blockCommand","__","getWidgetsCache","__","__","blockCommand","listenTo","blockCommand","commandStartEvent","createElementStyle","deleteElementStyle","getElementStyles","LOCAL_STYLES_RESERVED_LABEL","undoable","__","undoable","getElementStyles","deleteElementStyle","createElementStyle","LOCAL_STYLES_RESERVED_LABEL","__","blockCommand","listenTo","commandStartEvent"]}
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/components/style-renderer.tsx","../src/hooks/use-style-items.ts","../src/utils/abort-previous-runs.ts","../src/utils/signalized-process.ts","../src/hooks/use-on-mount.ts","../src/hooks/use-style-prop-resolver.ts","../src/renderers/create-props-resolver.ts","../src/renderers/multi-props.ts","../src/transformers/create-transformers-registry.ts","../src/style-transformers-registry.ts","../src/sync/enqueue-font.ts","../src/hooks/use-style-renderer.ts","../src/renderers/errors.ts","../src/renderers/create-styles-renderer.ts","../src/sync/get-canvas-iframe-head.ts","../src/settings-transformers-registry.ts","../src/transformers/create-transformer.ts","../src/transformers/settings/array-transformer.ts","../src/transformers/settings/link-transformer.ts","../src/transformers/shared/image-src-transformer.ts","../src/transformers/shared/image-transformer.ts","../src/transformers/shared/plain-transformer.ts","../src/init-settings-transformers.ts","../src/transformers/styles/background-color-overlay-transformer.ts","../src/transformers/styles/background-gradient-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/color-stop-transformer.ts","../src/transformers/styles/create-combine-array-transformer.ts","../src/transformers/styles/create-multi-props-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/legacy/init-legacy-views.ts","../src/renderers/create-dom-renderer.ts","../src/legacy/create-element-type.ts","../src/legacy/create-templated-element-type.ts","../src/prevent-link-in-link-commands.ts","../src/style-commands/paste-style.ts","../src/style-commands/undoable-actions/paste-element-style.ts","../src/style-commands/utils.ts","../src/style-commands/reset-style.ts","../src/style-commands/undoable-actions/reset-element-style.ts","../src/style-commands/init-style-commands.ts"],"sourcesContent":["import { injectIntoTop } from '@elementor/editor';\n\nimport { ElementsOverlays } from './components/elements-overlays';\nimport { StyleRenderer } from './components/style-renderer';\nimport { initSettingsTransformers } from './init-settings-transformers';\nimport { initStyleTransformers } from './init-style-transformers';\nimport { initLegacyViews } from './legacy/init-legacy-views';\nimport { initLinkInLinkPrevention } from './prevent-link-in-link-commands';\nimport { initStyleCommands } from './style-commands/init-style-commands';\n\nexport function init() {\n\tinitStyleTransformers();\n\tinitStyleCommands();\n\n\tinitLinkInLinkPrevention();\n\n\tinitLegacyViews();\n\n\tinitSettingsTransformers();\n\n\tinjectIntoTop( {\n\t\tid: 'elements-overlays',\n\t\tcomponent: ElementsOverlays,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'canvas-style-render',\n\t\tcomponent: StyleRenderer,\n\t} );\n}\n","import * as React from 'react';\nimport { getElements, useSelectedElement } from '@elementor/editor-elements';\nimport {\n\t__privateUseIsRouteActive as useIsRouteActive,\n\t__privateUseListenTo as useListenTo,\n\tuseEditMode,\n\twindowEvent,\n} from '@elementor/editor-v1-adapters';\n\nimport { ElementOverlay } from './element-overlay';\n\nexport function ElementsOverlays() {\n\tconst selected = useSelectedElement();\n\tconst elements = useElementsDom();\n\tconst currentEditMode = useEditMode();\n\n\tconst isEditMode = currentEditMode === 'edit';\n\tconst isKitRouteActive = useIsRouteActive( 'panel/global' );\n\n\tconst isActive = isEditMode && ! isKitRouteActive;\n\n\treturn (\n\t\tisActive &&\n\t\telements.map( ( [ id, element ] ) => (\n\t\t\t<ElementOverlay key={ id } id={ id } element={ element } isSelected={ selected.element?.id === id } />\n\t\t) )\n\t);\n}\n\nconst ELEMENTS_DATA_ATTR = 'atomic';\n\ntype IdElementTuple = [ string, HTMLElement ];\n\nfunction useElementsDom() {\n\treturn useListenTo(\n\t\t[ windowEvent( 'elementor/editor/element-rendered' ), windowEvent( 'elementor/editor/element-destroyed' ) ],\n\t\t() => {\n\t\t\treturn getElements()\n\t\t\t\t.filter( ( el ) => ELEMENTS_DATA_ATTR in ( el.view?.el?.dataset ?? {} ) )\n\t\t\t\t.map( ( element ) => [ element.id, element.view?.getDomElement?.()?.get?.( 0 ) ] )\n\t\t\t\t.filter( ( item ): item is IdElementTuple => !! item[ 1 ] );\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\tid: string;\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, id }: 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={ 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 { useEffect, 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\twhileElementsMounted: autoUpdate,\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 + 2 }px`,\n\t\t\t\t\t\theight: `${ rects.reference.height + 2 }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\tuseEffect( () => {\n\t\t// Update the reference manually because Floating UI does not recalculate\n\t\t// the reference element when it is being used in `option.elements.reference`.\n\t\t// @link https://github.com/floating-ui/floating-ui/blob/master/packages/react/src/hooks/useFloatingRootContext.ts\n\t\trefs.setReference( element );\n\t}, [ element, refs ] );\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 * as React from 'react';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { Portal } from '@elementor/ui';\n\nimport { useStyleItems } from '../hooks/use-style-items';\nimport { getCanvasIframeHead } from '../sync/get-canvas-iframe-head';\n\nexport function StyleRenderer() {\n\tconst container = usePortalContainer();\n\n\tconst styleItems = useStyleItems();\n\n\tif ( ! container ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Portal container={ container }>\n\t\t\t{ styleItems.map( ( item ) => (\n\t\t\t\t<style data-e-style-id={ item.id } key={ item.id }>\n\t\t\t\t\t{ item.value }\n\t\t\t\t</style>\n\t\t\t) ) }\n\t\t</Portal>\n\t);\n}\n\nfunction usePortalContainer() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeHead() );\n}\n","import { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react';\nimport { type StylesProvider, stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\n\nimport { type StyleItem, type StyleRenderer } from '../renderers/create-styles-renderer';\nimport { abortPreviousRuns } from '../utils/abort-previous-runs';\nimport { signalizedProcess } from '../utils/signalized-process';\nimport { useOnMount } from './use-on-mount';\nimport { useStylePropResolver } from './use-style-prop-resolver';\nimport { useStyleRenderer } from './use-style-renderer';\n\ntype ProviderAndStyleItems = { provider: StylesProvider; items: StyleItem[] };\n\ntype ProviderAndSubscriber = { provider: StylesProvider; subscriber: () => Promise< void > };\n\ntype ProviderAndStyleItemsMap = Record< string, ProviderAndStyleItems >;\n\nexport function useStyleItems() {\n\tconst resolve = useStylePropResolver();\n\tconst renderStyles = useStyleRenderer( resolve );\n\n\tconst [ styleItems, setStyleItems ] = useState< ProviderAndStyleItemsMap >( {} );\n\n\tconst providerAndSubscribers = useMemo( () => {\n\t\treturn stylesRepository.getProviders().map( ( provider ): ProviderAndSubscriber => {\n\t\t\treturn {\n\t\t\t\tprovider,\n\t\t\t\tsubscriber: createProviderSubscriber( {\n\t\t\t\t\tprovider,\n\t\t\t\t\trenderStyles,\n\t\t\t\t\tsetStyleItems,\n\t\t\t\t} ),\n\t\t\t};\n\t\t} );\n\t}, [ renderStyles ] );\n\n\tuseEffect( () => {\n\t\tconst unsubscribes = providerAndSubscribers.map( ( { provider, subscriber } ) =>\n\t\t\tprovider.subscribe( subscriber )\n\t\t);\n\n\t\treturn () => {\n\t\t\tunsubscribes.forEach( ( unsubscribe ) => unsubscribe() );\n\t\t};\n\t}, [ providerAndSubscribers ] );\n\n\tuseOnMount( () => {\n\t\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\t\tconst promises = providerAndSubscribers.map( async ( { subscriber } ) => subscriber() );\n\n\t\t\tawait Promise.all( promises );\n\t\t} );\n\t} );\n\n\treturn Object.values( styleItems )\n\t\t.sort( ( { provider: providerA }, { provider: providerB } ) => providerA.priority - providerB.priority )\n\t\t.flatMap( ( { items } ) => items );\n}\n\ntype CreateProviderSubscriberArgs = {\n\tprovider: StylesProvider;\n\trenderStyles: StyleRenderer;\n\tsetStyleItems: Dispatch< SetStateAction< ProviderAndStyleItemsMap > >;\n};\n\nfunction createProviderSubscriber( { provider, renderStyles, setStyleItems }: CreateProviderSubscriberArgs ) {\n\treturn abortPreviousRuns( ( abortController ) =>\n\t\tsignalizedProcess( abortController.signal )\n\t\t\t.then( ( _, signal ) => renderStyles( { styles: provider.actions.all(), signal } ) )\n\t\t\t.then( ( items ) => {\n\t\t\t\tsetStyleItems( ( prev ) => ( {\n\t\t\t\t\t...prev,\n\t\t\t\t\t[ provider.getKey() ]: { provider, items },\n\t\t\t\t} ) );\n\t\t\t} )\n\t\t\t.execute()\n\t);\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function abortPreviousRuns< TArgs extends any[], TReturn >(\n\tcb: ( abortController: AbortController, ...args: TArgs ) => TReturn\n): ( ...args: TArgs ) => TReturn {\n\tlet abortController: AbortController | null = null;\n\n\treturn ( ...args: TArgs ) => {\n\t\tif ( abortController ) {\n\t\t\tabortController.abort();\n\t\t}\n\n\t\tabortController = new AbortController();\n\n\t\treturn cb( abortController, ...args );\n\t};\n}\n","// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyFn = ( ...args: any[] ) => any;\n\ntype SignalizedProcess< TNextArg = never > = {\n\tthen: < TReturn >(\n\t\tcb: ( arg: TNextArg, signal: AbortSignal ) => TReturn\n\t) => SignalizedProcess< Awaited< TReturn > >;\n\n\texecute: () => Promise< void >;\n};\n\nexport function signalizedProcess< TNextArg = never >(\n\tsignal: AbortSignal,\n\tsteps: AnyFn[] = []\n): SignalizedProcess< TNextArg > {\n\treturn {\n\t\tthen: ( cb ) => {\n\t\t\tsteps.push( cb );\n\n\t\t\treturn signalizedProcess( signal, steps );\n\t\t},\n\n\t\texecute: async () => {\n\t\t\tlet lastResult: TNextArg | undefined;\n\n\t\t\tfor ( const step of steps ) {\n\t\t\t\tif ( signal.aborted ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tlastResult = await step( lastResult, signal );\n\t\t\t}\n\t\t},\n\t};\n}\n","import { useEffect, useRef } from 'react';\n\nexport function useOnMount( cb: () => void ) {\n\tconst mounted = useRef( false );\n\n\tuseEffect( () => {\n\t\tif ( ! mounted.current ) {\n\t\t\tmounted.current = true;\n\n\t\t\tcb();\n\t\t}\n\t}, [] ); // eslint-disable-line react-hooks/exhaustive-deps\n}\n","import { useMemo } from 'react';\nimport { getStylesSchema } from '@elementor/editor-styles';\n\nimport { createPropsResolver } from '../renderers/create-props-resolver';\nimport { styleTransformersRegistry } from '../style-transformers-registry';\nimport { enqueueFont } from '../sync/enqueue-font';\n\nexport function useStylePropResolver() {\n\treturn useMemo( () => {\n\t\treturn createPropsResolver( {\n\t\t\ttransformers: styleTransformersRegistry,\n\t\t\tschema: getStylesSchema(),\n\t\t\tonPropResolve: ( { key, value } ) => {\n\t\t\t\tif ( key !== 'font-family' || typeof value !== 'string' ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tenqueueFont( value );\n\t\t\t},\n\t\t} );\n\t}, [] );\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 TransformersRegistry } from '../transformers/create-transformers-registry';\nimport { getMultiPropsValue, isMultiProps } from './multi-props';\n\ntype CreatePropResolverArgs = {\n\ttransformers: TransformersRegistry;\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\ntype ResolvedProps = Record< string, unknown >;\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 ): Promise< ResolvedProps > {\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\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\tif ( value.$$type !== type.key ) {\n\t\t\treturn null;\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.get( 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 { 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 { type PropTypeKey } from '@elementor/editor-props';\n\nimport { type AnyTransformer, type TransformersMap } from './types';\n\nexport type TransformersRegistry = ReturnType< typeof createTransformersRegistry >;\n\nexport function createTransformersRegistry() {\n\tconst transformers: TransformersMap = {};\n\n\tlet fallbackTransformer: AnyTransformer | null = null;\n\n\treturn {\n\t\tregister( type: PropTypeKey, transformer: AnyTransformer ) {\n\t\t\ttransformers[ type ] = transformer;\n\n\t\t\treturn this;\n\t\t},\n\t\tregisterFallback( transformer: AnyTransformer ) {\n\t\t\tfallbackTransformer = transformer;\n\n\t\t\treturn this;\n\t\t},\n\t\tget( type: PropTypeKey ): AnyTransformer | null {\n\t\t\treturn transformers[ type ] ?? fallbackTransformer;\n\t\t},\n\t};\n}\n","import { createTransformersRegistry } from './transformers/create-transformers-registry';\n\nexport const styleTransformersRegistry = createTransformersRegistry();\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 { useMemo } from 'react';\nimport { useBreakpointsMap } from '@elementor/editor-responsive';\n\nimport { type PropsResolver } from '../renderers/create-props-resolver';\nimport { createStylesRenderer } from '../renderers/create-styles-renderer';\n\nconst SELECTOR_PREFIX = '.elementor';\n\nexport function useStyleRenderer( resolve: PropsResolver ) {\n\tconst breakpoints = useBreakpointsMap();\n\n\treturn useMemo( () => {\n\t\treturn createStylesRenderer( {\n\t\t\tselectorPrefix: SELECTOR_PREFIX,\n\t\t\tbreakpoints,\n\t\t\tresolve,\n\t\t} );\n\t}, [ resolve, breakpoints ] );\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\nexport type StyleItem = {\n\tid: string;\n\tvalue: string;\n};\n\nexport type StyleRenderer = ReturnType< typeof createStylesRenderer >;\n\ntype CreateStyleRendererArgs = {\n\tresolve: PropsResolver;\n\tbreakpoints: BreakpointsMap;\n\tselectorPrefix?: string;\n};\n\ntype StyleRendererArgs = {\n\tstyles: StyleDefinition[];\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 function createStylesRenderer( { resolve, breakpoints, selectorPrefix = '' }: CreateStyleRendererArgs ) {\n\treturn async ( { styles, signal }: StyleRendererArgs ): Promise< StyleItem[] > => {\n\t\tconst stylesCssPromises = styles.map( async ( style ) => {\n\t\t\tconst variantCssPromises = Object.values( style.variants ).map( async ( variant ) => {\n\t\t\t\tconst css = await propsToCss( { props: variant.props, resolve, signal } );\n\n\t\t\t\treturn createStyleWrapper()\n\t\t\t\t\t.forStyle( style )\n\t\t\t\t\t.withPrefix( selectorPrefix )\n\t\t\t\t\t.withState( variant.meta.state )\n\t\t\t\t\t.withMediaQuery( variant.meta.breakpoint ? breakpoints[ variant.meta.breakpoint ] : null )\n\t\t\t\t\t.wrap( css );\n\t\t\t} );\n\n\t\t\tconst variantsCss = await Promise.all( variantCssPromises );\n\n\t\t\treturn {\n\t\t\t\tid: style.id,\n\t\t\t\tvalue: variantsCss.join( '' ),\n\t\t\t};\n\t\t} );\n\n\t\treturn await Promise.all( stylesCssPromises );\n\t};\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\tif ( propValue === null ) {\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tacc.push( propName + ':' + propValue + ';' );\n\n\t\t\treturn acc;\n\t\t}, [] )\n\t\t.join( '' );\n}\n","import type { CanvasExtendedWindow } from './types';\n\nexport function getCanvasIframeHead() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.$preview?.[ 0 ]?.contentDocument?.head;\n}\n","import { createTransformersRegistry } from './transformers/create-transformers-registry';\n\nexport const settingsTransformersRegistry = 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 arrayTransformer = createTransformer( ( value: unknown[] ) => {\n\treturn value.filter( Boolean );\n} );\n","import { createTransformer } from '../create-transformer';\n\ntype Link = {\n\tdestination: string | number;\n\tisTargetBlank: boolean;\n};\n\nexport const linkTransformer = createTransformer( ( { destination, isTargetBlank }: Link ) => {\n\treturn {\n\t\t// The real post URL is not relevant in the Editor.\n\t\thref: typeof destination === 'number' ? '#post-id-' + destination : destination,\n\t\ttarget: isTargetBlank ? '_blank' : '_self',\n\t};\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\tid: value.id ?? null,\n\turl: value.url ?? null,\n} ) );\n","import { getMediaAttachment } from '@elementor/wp-media';\n\nimport { createTransformer } from '../create-transformer';\n\ntype Image = {\n\tsrc?: {\n\t\tid: number | null;\n\t\turl: string | null;\n\t};\n\tsize?: string;\n};\n\nexport const imageTransformer = createTransformer( async ( value: Image ) => {\n\tconst { src, size } = value;\n\n\tif ( ! src?.id ) {\n\t\treturn src?.url ? { src: src.url } : null;\n\t}\n\n\tconst attachment = await getMediaAttachment( { id: src.id } );\n\n\tconst sizedAttachment = attachment?.sizes?.[ size ?? '' ];\n\n\tif ( sizedAttachment ) {\n\t\treturn {\n\t\t\tsrc: sizedAttachment.url,\n\t\t\theight: sizedAttachment.height,\n\t\t\twidth: sizedAttachment.width,\n\t\t};\n\t}\n\n\tif ( attachment ) {\n\t\treturn {\n\t\t\tsrc: attachment.url,\n\t\t\theight: attachment.height,\n\t\t\twidth: attachment.width,\n\t\t};\n\t}\n\n\treturn null;\n} );\n","import { createTransformer } from '../create-transformer';\n\nexport const plainTransformer = createTransformer( ( value: unknown ) => {\n\treturn value;\n} );\n","import { settingsTransformersRegistry } from './settings-transformers-registry';\nimport { arrayTransformer } from './transformers/settings/array-transformer';\nimport { linkTransformer } from './transformers/settings/link-transformer';\nimport { imageSrcTransformer } from './transformers/shared/image-src-transformer';\nimport { imageTransformer } from './transformers/shared/image-transformer';\nimport { plainTransformer } from './transformers/shared/plain-transformer';\n\nexport function initSettingsTransformers() {\n\tsettingsTransformersRegistry\n\t\t.register( 'classes', arrayTransformer )\n\t\t.register( 'link', linkTransformer )\n\t\t.register( 'image', imageTransformer )\n\t\t.register( 'image-src', imageSrcTransformer )\n\t\t.registerFallback( plainTransformer );\n}\n","import { createTransformer } from '../create-transformer';\n\ntype BackgroundColorOverlay = {\n\tcolor?: string;\n};\n\nexport const backgroundColorOverlayTransformer = createTransformer( ( value: BackgroundColorOverlay ) => {\n\tconst { color = null } = value;\n\n\tif ( ! color ) {\n\t\treturn null;\n\t}\n\n\treturn `linear-gradient(${ color }, ${ color })`;\n} );\n","import { createTransformer } from '../create-transformer';\n\ntype BackgroundGradientOverlay = {\n\ttype?: 'linear' | 'radial';\n\tangle?: string;\n\tstops?: string;\n\tpositions?: string;\n};\n\nexport const backgroundGradientOverlayTransformer = createTransformer( ( value: BackgroundGradientOverlay ) => {\n\tif ( value.type === 'radial' ) {\n\t\treturn `radial-gradient(circle at ${ value.positions }, ${ value.stops })`;\n\t}\n\n\treturn `linear-gradient(${ value.angle }deg, ${ value.stops })`;\n} );\n","import { createTransformer } from '../create-transformer';\n\nconst DEFAULT_POSITION_VALUE = '0% 0%';\n\ntype BackgroundImageOverlay = {\n\timage?: {\n\t\tsrc?: string;\n\t};\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 src = image.src ? `url(${ image.src })` : null;\n\n\tconst backgroundStyles = [\n\t\tsrc,\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, y }: BackgroundImagePositionOffset ) => `${ x ?? '0px' } ${ y ?? '0px' }`\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, height }: BackgroundImageSizeScale ) => `${ width ?? 'auto' } ${ height ?? 'auto' }`\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\ntype ColorStop = {\n\tcolor?: string;\n\toffset?: number;\n};\n\nexport const colorStopTransformer = createTransformer(\n\t( value: ColorStop ) => `${ value?.color } ${ value?.offset ?? 0 }%`\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 { 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 { 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 { imageSrcTransformer } from './transformers/shared/image-src-transformer';\nimport { imageTransformer } from './transformers/shared/image-transformer';\nimport { plainTransformer } from './transformers/shared/plain-transformer';\nimport { backgroundColorOverlayTransformer } from './transformers/styles/background-color-overlay-transformer';\nimport { backgroundGradientOverlayTransformer } from './transformers/styles/background-gradient-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 { colorStopTransformer } from './transformers/styles/color-stop-transformer';\nimport { createCombineArrayTransformer } from './transformers/styles/create-combine-array-transformer';\nimport { createMultiPropsTransformer } from './transformers/styles/create-multi-props-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[ 'block-start', 'block-end', 'inline-start', 'inline-end' ],\n\t\t\t\t( { propKey, key } ) => `${ propKey }-${ key }`\n\t\t\t)\n\t\t)\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-gradient-overlay', backgroundGradientOverlayTransformer )\n\t\t.register( 'gradient-color-stop', createCombineArrayTransformer( ',' ) )\n\t\t.register( 'color-stop', colorStopTransformer )\n\t\t.register( 'background-image-position-offset', backgroundImagePositionOffsetTransformer )\n\t\t.register( 'background-image-size-scale', backgroundImageSizeScaleTransformer )\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(\n\t\t\t\t[ 'block-start', 'block-end', 'inline-start', 'inline-end' ],\n\t\t\t\t( { key } ) => `border-${ key }-width`\n\t\t\t)\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\t\t.registerFallback( plainTransformer );\n}\n","import { getWidgetsCache } from '@elementor/editor-elements';\nimport { __privateListenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';\n\nimport { createDomRenderer } from '../renderers/create-dom-renderer';\nimport { createElementType } from './create-element-type';\nimport { canBeTemplated, createTemplatedElementType } from './create-templated-element-type';\nimport type { LegacyWindow } from './types';\n\nexport function initLegacyViews() {\n\t__privateListenTo( v1ReadyEvent(), () => {\n\t\tconst config = getWidgetsCache() ?? {};\n\t\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\t\tconst renderer = createDomRenderer();\n\n\t\tObject.entries( config ).forEach( ( [ type, element ] ) => {\n\t\t\tif ( ! element.atomic ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst ElementType = canBeTemplated( element )\n\t\t\t\t? createTemplatedElementType( { type, renderer, element } )\n\t\t\t\t: createElementType( type );\n\n\t\t\tlegacyWindow.elementor.elementsManager.registerElementType( new ElementType() );\n\t\t} );\n\t} );\n}\n","import { createArrayLoader, createEnvironment, type TwingArrayLoader, type TwingEnvironment } from '@elementor/twing';\n\nexport type DomRenderer = {\n\tregister: TwingArrayLoader[ 'setTemplate' ];\n\trender: TwingEnvironment[ 'render' ];\n};\n\nexport function createDomRenderer(): DomRenderer {\n\tconst loader = createArrayLoader( {} );\n\tconst environment = createEnvironment( loader );\n\n\tenvironment.registerEscapingStrategy( escapeHtmlTag, 'html_tag' );\n\tenvironment.registerEscapingStrategy( escapeURL, 'full_url' );\n\n\treturn {\n\t\tregister: loader.setTemplate,\n\t\trender: environment.render,\n\t};\n}\n\nfunction escapeHtmlTag( value: string ) {\n\tconst allowedTags = [\n\t\t'a',\n\t\t'article',\n\t\t'aside',\n\t\t'button',\n\t\t'div',\n\t\t'footer',\n\t\t'h1',\n\t\t'h2',\n\t\t'h3',\n\t\t'h4',\n\t\t'h5',\n\t\t'h6',\n\t\t'header',\n\t\t'main',\n\t\t'nav',\n\t\t'p',\n\t\t'section',\n\t\t'span',\n\t];\n\n\treturn allowedTags.includes( value ) ? value : 'div';\n}\n\nfunction escapeURL( value: string ) {\n\tconst allowedProtocols = [ 'http:', 'https:', 'mailto:', 'tel:' ];\n\n\ttry {\n\t\tconst parsed = new URL( value );\n\n\t\treturn allowedProtocols.includes( parsed.protocol ) ? value : '';\n\t} catch {\n\t\treturn '';\n\t}\n}\n","import { type ElementType, type ElementView, type LegacyWindow } from './types';\n\n// Technically it shouldn't have a return type annotation, but for some\n// reason TypeScript can't infer the types properly when emitting DTS.\n//\n// See: https://github.com/microsoft/TypeScript/issues/9944#issuecomment-244448079\nexport function createElementType( type: string ): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createElementViewClassDeclaration();\n\t\t}\n\t};\n}\n\nexport function createElementViewClassDeclaration(): typeof ElementView {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.views.Widget {\n\t\t// Dispatch `render` event so the overlay layer will be updated\n\t\tonRender( ...args: unknown[] ) {\n\t\t\tsuper.onRender( ...args );\n\n\t\t\tthis.#dispatchEvent( 'elementor/preview/atomic-widget/render' );\n\t\t\tthis.#dispatchPreviewEvent( 'elementor/element/render' );\n\t\t}\n\n\t\t// Dispatch `destroy` event so the overlay layer will be updated\n\t\tonDestroy( ...args: unknown[] ) {\n\t\t\tsuper.onDestroy( ...args );\n\n\t\t\tthis.#dispatchEvent( 'elementor/preview/atomic-widget/destroy' );\n\t\t\tthis.#dispatchPreviewEvent( 'elementor/element/destroy' );\n\t\t}\n\n\t\tattributes() {\n\t\t\treturn {\n\t\t\t\t...super.attributes(),\n\n\t\t\t\t// Mark the widget as atomic, so external APIs (such as the overlay layer) can reference it.\n\t\t\t\t'data-atomic': '',\n\n\t\t\t\t// Make the wrapper is non-existent in terms of CSS to mimic the frontend DOM tree.\n\t\t\t\tstyle: 'display: contents !important;',\n\t\t\t};\n\t\t}\n\n\t\t// Removes behaviors that are not needed for atomic widgets (that are implemented in the overlay layer).\n\t\tbehaviors() {\n\t\t\tconst disabledBehaviors = [ 'InlineEditing', 'Draggable', 'Resizable' ];\n\n\t\t\tconst behaviorsAsEntries = Object.entries( super.behaviors() ).filter(\n\t\t\t\t( [ key ] ) => ! disabledBehaviors.includes( key )\n\t\t\t);\n\n\t\t\treturn Object.fromEntries( behaviorsAsEntries );\n\t\t}\n\n\t\t// Change the drag handle because the $el is not the draggable element (`display: contents`).\n\t\tgetDomElement() {\n\t\t\treturn this.$el.find( ':first-child' );\n\t\t}\n\n\t\t// Remove the overlay, so we can use the new overlay layer.\n\t\tgetHandlesOverlay() {\n\t\t\treturn null;\n\t\t}\n\n\t\t#dispatchEvent( eventType: string ) {\n\t\t\twindow.top?.dispatchEvent(\n\t\t\t\tnew CustomEvent( eventType, {\n\t\t\t\t\tdetail: { id: this.model.get( 'id' ) },\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\t#dispatchPreviewEvent( eventType: string ) {\n\t\t\tlegacyWindow.elementor?.$preview?.[ 0 ]?.contentWindow.dispatchEvent(\n\t\t\t\tnew CustomEvent( eventType, {\n\t\t\t\t\tdetail: {\n\t\t\t\t\t\tid: this.model.get( 'id' ),\n\t\t\t\t\t\ttype: this.model.get( 'widgetType' ),\n\t\t\t\t\t\telement: this.getDomElement().get( 0 ),\n\t\t\t\t\t},\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\tgetContextMenuGroups() {\n\t\t\treturn super.getContextMenuGroups().filter( ( group ) => group.name !== 'save' );\n\t\t}\n\t};\n}\n","import type { V1ElementConfig } from '@elementor/editor-elements';\n\nimport { type DomRenderer } from '../renderers/create-dom-renderer';\nimport { createPropsResolver, type PropsResolver } from '../renderers/create-props-resolver';\nimport { settingsTransformersRegistry } from '../settings-transformers-registry';\nimport { signalizedProcess } from '../utils/signalized-process';\nimport { createElementViewClassDeclaration } from './create-element-type';\nimport { type ElementType, type ElementView, type LegacyWindow } from './types';\n\ntype CreateTypeOptions = {\n\ttype: string;\n\trenderer: DomRenderer;\n\telement: TemplatedElementConfig;\n};\n\ntype TemplatedElementConfig = Required<\n\tPick< V1ElementConfig, 'twig_templates' | 'twig_main_template' | 'atomic_props_schema' | 'base_styles_dictionary' >\n>;\n\nexport function createTemplatedElementType( { type, renderer, element }: CreateTypeOptions ): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\tObject.entries( element.twig_templates ).forEach( ( [ key, template ] ) => {\n\t\trenderer.register( key, template );\n\t} );\n\n\tconst propsResolver = createPropsResolver( {\n\t\ttransformers: settingsTransformersRegistry,\n\t\tschema: element.atomic_props_schema,\n\t} );\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createTemplatedElementViewClassDeclaration( {\n\t\t\t\ttype,\n\t\t\t\trenderer,\n\t\t\t\tpropsResolver,\n\t\t\t\tbaseStylesDictionary: element.base_styles_dictionary,\n\t\t\t\ttemplateKey: element.twig_main_template,\n\t\t\t} );\n\t\t}\n\t};\n}\n\nexport function canBeTemplated( element: Partial< TemplatedElementConfig > ): element is TemplatedElementConfig {\n\treturn !! (\n\t\telement.atomic_props_schema &&\n\t\telement.twig_templates &&\n\t\telement.twig_main_template &&\n\t\telement.base_styles_dictionary\n\t);\n}\n\ntype CreateViewOptions = {\n\ttype: string;\n\trenderer: DomRenderer;\n\tpropsResolver: PropsResolver;\n\ttemplateKey: string;\n\tbaseStylesDictionary: Record< string, string >;\n};\n\nfunction createTemplatedElementViewClassDeclaration( {\n\ttype,\n\trenderer,\n\tpropsResolver: resolveProps,\n\ttemplateKey,\n\tbaseStylesDictionary,\n}: CreateViewOptions ): typeof ElementView {\n\tconst BaseView = createElementViewClassDeclaration();\n\n\treturn class extends BaseView {\n\t\t#abortController: AbortController | null = null;\n\n\t\tgetTemplateType() {\n\t\t\treturn 'twig';\n\t\t}\n\n\t\trenderOnChange() {\n\t\t\tthis.render();\n\t\t}\n\n\t\t// Overriding Marionette original render method to inject our renderer.\n\t\tasync _renderTemplate() {\n\t\t\tthis.#beforeRenderTemplate();\n\n\t\t\tthis.#abortController?.abort();\n\t\t\tthis.#abortController = new AbortController();\n\n\t\t\tconst process = signalizedProcess( this.#abortController.signal )\n\t\t\t\t.then( ( _, signal ) => {\n\t\t\t\t\tconst settings = this.model.get( 'settings' ).toJSON();\n\n\t\t\t\t\treturn resolveProps( {\n\t\t\t\t\t\tprops: settings,\n\t\t\t\t\t\tsignal,\n\t\t\t\t\t} );\n\t\t\t\t} )\n\t\t\t\t.then( ( resolvedSettings ) => {\n\t\t\t\t\t// Same as the Backend.\n\t\t\t\t\tconst context = {\n\t\t\t\t\t\tid: this.model.get( 'id' ),\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\tsettings: resolvedSettings,\n\t\t\t\t\t\tbase_styles: baseStylesDictionary,\n\t\t\t\t\t};\n\n\t\t\t\t\treturn renderer.render( templateKey, context );\n\t\t\t\t} )\n\t\t\t\t.then( ( html ) => this.$el.html( html ) );\n\n\t\t\tawait process.execute();\n\n\t\t\tthis.#afterRenderTemplate();\n\t\t}\n\n\t\t// Emulating the original Marionette behavior.\n\t\t#beforeRenderTemplate() {\n\t\t\tthis.triggerMethod( 'before:render:template' );\n\t\t}\n\n\t\t#afterRenderTemplate() {\n\t\t\tthis.bindUIElements();\n\n\t\t\tthis.triggerMethod( 'render:template' );\n\t\t}\n\t};\n}\n","import {\n\tgetAnchoredAncestorId,\n\tgetAnchoredDescendantId,\n\tisElementAnchored,\n\ttype V1Element,\n} from '@elementor/editor-elements';\nimport { type NotificationData, notify } from '@elementor/editor-notifications';\nimport { blockCommand } from '@elementor/editor-v1-adapters';\nimport { type ButtonProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type CanvasExtendedWindow } from './sync/types';\n\nexport function initLinkInLinkPrevention() {\n\tblockCommand( {\n\t\tcommand: 'document/elements/paste',\n\t\tcondition: blockLinkInLinkPaste,\n\t} );\n\n\tblockCommand( {\n\t\tcommand: 'document/elements/move',\n\t\tcondition: blockLinkInLinkMove,\n\t} );\n}\n\ntype PasteArgs = {\n\tcontainers?: V1Element[];\n\tcontainer?: V1Element;\n\tstorageType?: string;\n};\n\ntype MoveArgs = {\n\tcontainers?: V1Element[];\n\tcontainer?: V1Element;\n\ttarget?: V1Element;\n};\n\nexport type StorageContent = {\n\tclipboard?: {\n\t\telements?: { id?: string }[];\n\t};\n};\n\nconst learnMoreActionProps: Partial< ButtonProps > = {\n\thref: 'https://go.elementor.com/element-link-inside-link-infotip',\n\ttarget: '_blank',\n\tcolor: 'inherit',\n\tvariant: 'text',\n\tsx: {\n\t\tmarginInlineStart: '20px',\n\t},\n\tchildren: 'Learn more',\n};\n\nfunction blockLinkInLinkPaste( args: PasteArgs ): boolean {\n\tconst { containers = [ args.container ], storageType } = args;\n\tconst targetElements = containers;\n\n\tif ( storageType !== 'localstorage' ) {\n\t\treturn false;\n\t}\n\n\tconst data = ( window as CanvasExtendedWindow )?.elementorCommon?.storage?.get();\n\n\tif ( ! data?.clipboard?.elements ) {\n\t\treturn false;\n\t}\n\n\tconst sourceElements = data.clipboard.elements;\n\n\tconst notification: NotificationData = {\n\t\ttype: 'default',\n\t\tmessage: __(\n\t\t\t\"To paste a link to this element, first remove the link from it's parent container.\",\n\t\t\t'elementor'\n\t\t),\n\t\tid: 'paste-in-link-blocked',\n\t\tadditionalActionProps: [ learnMoreActionProps ],\n\t};\n\n\tconst blocked = shouldBlock( sourceElements, targetElements );\n\n\tif ( blocked ) {\n\t\tnotify( notification );\n\t}\n\n\treturn blocked;\n}\n\nfunction blockLinkInLinkMove( args: MoveArgs ): boolean {\n\tconst { containers = [ args.container ], target } = args;\n\tconst sourceElements = containers;\n\tconst targetElement = target;\n\n\tconst notification: NotificationData = {\n\t\ttype: 'default',\n\t\tmessage: __( \"To drag a link to this element, first remove the link from it's parent container.\", 'elementor' ),\n\t\tid: 'move-in-link-blocked',\n\t\tadditionalActionProps: [ learnMoreActionProps ],\n\t};\n\n\tconst isBlocked = shouldBlock( sourceElements, [ targetElement ] );\n\n\tif ( isBlocked ) {\n\t\tnotify( notification );\n\t}\n\n\treturn isBlocked;\n}\n\nfunction shouldBlock(\n\tsourceElements?: ( { id?: string } | undefined )[],\n\ttargetElements?: ( V1Element | undefined )[]\n): boolean {\n\tif ( ! sourceElements?.length || ! targetElements?.length ) {\n\t\treturn false;\n\t}\n\n\tconst isSourceContainsAnAnchor = sourceElements.some( ( src ) => {\n\t\treturn src?.id ? isElementAnchored( src.id ) || !! getAnchoredDescendantId( src.id ) : false;\n\t} );\n\n\tif ( ! isSourceContainsAnAnchor ) {\n\t\treturn false;\n\t}\n\n\tconst isTargetContainsAnAnchor = targetElements.some( ( target ) => {\n\t\treturn target?.id ? isElementAnchored( target.id ) || !! getAnchoredAncestorId( target.id ) : false;\n\t} );\n\n\treturn isTargetContainsAnAnchor;\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport {\n\t__privateListenTo as listenTo,\n\tblockCommand,\n\ttype CommandEvent,\n\tcommandStartEvent,\n} from '@elementor/editor-v1-adapters';\n\nimport { undoablePasteElementStyle } from './undoable-actions/paste-element-style';\nimport { type ContainerArgs, getClipboardElements, hasAtomicWidgets, isAtomicWidget } from './utils';\n\ntype PasteStylesCommandArgs = ContainerArgs & {\n\tstorageKey?: string;\n};\n\nexport function initPasteStyleCommand() {\n\tconst pasteElementStyleCommand = undoablePasteElementStyle();\n\n\tblockCommand( {\n\t\tcommand: 'document/elements/paste-style',\n\t\tcondition: hasAtomicWidgets,\n\t} );\n\n\tlistenTo( commandStartEvent( 'document/elements/paste-style' ), ( e ) =>\n\t\tpasteStyles( ( e as CommandEvent ).args, pasteElementStyleCommand )\n\t);\n}\n\nfunction pasteStyles( args: PasteStylesCommandArgs, pasteCallback: ReturnType< typeof undoablePasteElementStyle > ) {\n\tconst { containers = [ args.container ], storageKey } = args;\n\n\tconst clipboardElements = getClipboardElements( storageKey );\n\tconst [ clipboardElement ] = clipboardElements ?? [];\n\n\tif ( ! clipboardElement ) {\n\t\treturn;\n\t}\n\n\tconst elementStyles = clipboardElement.styles;\n\tconst elementStyle = Object.values( elementStyles ?? {} )[ 0 ]; // we currently support only one local style\n\n\tif ( ! elementStyle ) {\n\t\treturn;\n\t}\n\n\tconst atomicContainers = containers.filter( isAtomicWidget ) as V1Element[];\n\n\tif ( ! atomicContainers.length ) {\n\t\treturn;\n\t}\n\n\tpasteCallback( { containers: atomicContainers, newStyle: elementStyle } );\n}\n","import {\n\tcreateElementStyle,\n\tdeleteElementStyle,\n\tgetElementStyles,\n\tupdateElementStyle,\n\ttype V1Element,\n} from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { ELEMENTS_STYLES_RESERVED_LABEL } from '@elementor/editor-styles-repository';\nimport { undoable } from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport { getClassesProp, getTitleForContainers } from '../utils';\n\ntype PasteElementStyleArgs = {\n\tcontainers: V1Element[];\n\tnewStyle: StyleDefinition;\n};\n\nexport const undoablePasteElementStyle = () =>\n\tundoable(\n\t\t{\n\t\t\tdo: ( { containers, newStyle }: PasteElementStyleArgs ) => {\n\t\t\t\treturn containers.map( ( container ) => {\n\t\t\t\t\tconst elementId = container.id;\n\t\t\t\t\tconst classesProp = getClassesProp( container );\n\n\t\t\t\t\tif ( ! classesProp ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst originalStyles = getElementStyles( container.id );\n\n\t\t\t\t\tconst [ styleId, styleDef ] = Object.entries( originalStyles ?? {} )[ 0 ] ?? []; // we currently support only one local style\n\t\t\t\t\tconst originalStyle = Object.keys( styleDef ?? {} ).length ? styleDef : null;\n\n\t\t\t\t\tconst revertData = {\n\t\t\t\t\t\tstyleId,\n\t\t\t\t\t\toriginalStyle,\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( styleId ) {\n\t\t\t\t\t\tnewStyle.variants.forEach( ( { meta, props } ) => {\n\t\t\t\t\t\t\tupdateElementStyle( {\n\t\t\t\t\t\t\t\telementId,\n\t\t\t\t\t\t\t\tstyleId,\n\t\t\t\t\t\t\t\tmeta,\n\t\t\t\t\t\t\t\tprops,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst [ firstVariant ] = newStyle.variants;\n\t\t\t\t\t\tconst additionalVariants = newStyle.variants.slice( 1 );\n\n\t\t\t\t\t\trevertData.styleId = createElementStyle( {\n\t\t\t\t\t\t\telementId,\n\t\t\t\t\t\t\tclassesProp,\n\t\t\t\t\t\t\tlabel: ELEMENTS_STYLES_RESERVED_LABEL,\n\t\t\t\t\t\t\t...firstVariant,\n\t\t\t\t\t\t\tadditionalVariants,\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn revertData;\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tundo: ( { containers }, revertDataItems ) => {\n\t\t\t\tcontainers.forEach( ( container, index ) => {\n\t\t\t\t\tconst revertData = revertDataItems[ index ];\n\n\t\t\t\t\tif ( ! revertData ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! revertData.originalStyle ) {\n\t\t\t\t\t\t// the container didn't have a style before pasting the new style\n\t\t\t\t\t\tdeleteElementStyle( container.id, revertData.styleId );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst classesProp = getClassesProp( container );\n\n\t\t\t\t\tif ( ! classesProp ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst [ firstVariant ] = revertData.originalStyle.variants;\n\t\t\t\t\tconst additionalVariants = revertData.originalStyle.variants.slice( 1 );\n\n\t\t\t\t\tcreateElementStyle( {\n\t\t\t\t\t\telementId: container.id,\n\t\t\t\t\t\tclassesProp,\n\t\t\t\t\t\tlabel: ELEMENTS_STYLES_RESERVED_LABEL,\n\t\t\t\t\t\tstyleId: revertData.styleId,\n\t\t\t\t\t\t...firstVariant,\n\t\t\t\t\t\tadditionalVariants,\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttitle: ( { containers } ) => getTitleForContainers( containers ),\n\t\t\tsubtitle: __( 'Style Pasted', 'elementor' ),\n\t\t}\n\t);\n","import { getElementLabel, getWidgetsCache, type V1Element, type V1ElementModelProps } from '@elementor/editor-elements';\nimport { CLASSES_PROP_KEY, type PropsSchema } from '@elementor/editor-props';\nimport { __ } from '@wordpress/i18n';\n\nexport type ContainerArgs = {\n\tcontainer?: V1Element;\n\tcontainers?: V1Element[];\n};\n\nexport function hasAtomicWidgets( args: ContainerArgs ): boolean {\n\tconst { containers = [ args.container ] } = args;\n\n\treturn containers.some( isAtomicWidget );\n}\n\nexport function isAtomicWidget( container: V1Element | undefined ): boolean {\n\tif ( ! container ) {\n\t\treturn false;\n\t}\n\n\treturn Boolean( getContainerSchema( container ) );\n}\n\nexport function getClassesProp( container: V1Element ): string | null {\n\tconst propsSchema = getContainerSchema( container );\n\n\tif ( ! propsSchema ) {\n\t\treturn null;\n\t}\n\n\tconst [ propKey ] =\n\t\tObject.entries( propsSchema ).find(\n\t\t\t( [ , propType ] ) => propType.kind === 'plain' && propType.key === CLASSES_PROP_KEY\n\t\t) ?? [];\n\n\treturn propKey ?? null;\n}\n\nfunction getContainerSchema( container: V1Element ): PropsSchema | null {\n\tconst type = container?.model.get( 'widgetType' ) || container?.model.get( 'elType' );\n\n\tconst widgetsCache = getWidgetsCache();\n\tconst elementType = widgetsCache?.[ type ];\n\n\treturn elementType?.atomic_props_schema ?? null;\n}\n\ntype ClipboardElements = V1ElementModelProps[];\n\nexport function getClipboardElements( storageKey: string = 'clipboard' ): ClipboardElements | undefined {\n\ttry {\n\t\tconst storedData = JSON.parse( localStorage.getItem( 'elementor' ) ?? '{}' );\n\n\t\treturn storedData[ storageKey ]?.elements as ClipboardElements;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function getTitleForContainers( containers: V1Element[] ): string {\n\treturn containers.length > 1 ? __( 'Elements', 'elementor' ) : getElementLabel( containers[ 0 ].id );\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport {\n\t__privateListenTo as listenTo,\n\tblockCommand,\n\ttype CommandEvent,\n\tcommandStartEvent,\n} from '@elementor/editor-v1-adapters';\n\nimport { undoableResetElementStyle } from './undoable-actions/reset-element-style';\nimport { type ContainerArgs, hasAtomicWidgets, isAtomicWidget } from './utils';\n\nexport function initResetStyleCommand() {\n\tconst resetElementStyles = undoableResetElementStyle();\n\n\tblockCommand( {\n\t\tcommand: 'document/elements/reset-style',\n\t\tcondition: hasAtomicWidgets,\n\t} );\n\n\tlistenTo( commandStartEvent( 'document/elements/reset-style' ), ( e ) =>\n\t\tresetStyles( ( e as CommandEvent ).args, resetElementStyles )\n\t);\n}\n\nfunction resetStyles( args: ContainerArgs, resetElementStyles: ReturnType< typeof undoableResetElementStyle > ) {\n\tconst { containers = [ args.container ] } = args;\n\tconst atomicContainers = containers.filter( isAtomicWidget ) as V1Element[];\n\n\tif ( ! atomicContainers.length ) {\n\t\treturn;\n\t}\n\n\tresetElementStyles( { containers: atomicContainers } );\n}\n","import { createElementStyle, deleteElementStyle, getElementStyles, type V1Element } from '@elementor/editor-elements';\nimport { ELEMENTS_STYLES_RESERVED_LABEL } from '@elementor/editor-styles-repository';\nimport { undoable } from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport { getClassesProp, getTitleForContainers } from '../utils';\n\ntype ResetElementStyleArgs = {\n\tcontainers: V1Element[];\n};\n\nexport const undoableResetElementStyle = () =>\n\tundoable(\n\t\t{\n\t\t\tdo: ( { containers }: ResetElementStyleArgs ) => {\n\t\t\t\treturn containers.map( ( container ) => {\n\t\t\t\t\tconst elementId = container.model.get( 'id' );\n\n\t\t\t\t\tconst containerStyles = getElementStyles( elementId );\n\n\t\t\t\t\tObject.keys( containerStyles ?? {} ).forEach( ( styleId ) =>\n\t\t\t\t\t\tdeleteElementStyle( elementId, styleId )\n\t\t\t\t\t);\n\n\t\t\t\t\treturn containerStyles;\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tundo: ( { containers }, revertDataItems ) => {\n\t\t\t\tcontainers.forEach( ( container, index ) => {\n\t\t\t\t\tconst classesProp = getClassesProp( container );\n\n\t\t\t\t\tif ( ! classesProp ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst elementId = container.model.get( 'id' );\n\t\t\t\t\tconst containerStyles = revertDataItems[ index ];\n\n\t\t\t\t\tObject.entries( containerStyles ?? {} ).forEach( ( [ styleId, style ] ) => {\n\t\t\t\t\t\tconst [ firstVariant ] = style.variants;\n\t\t\t\t\t\tconst additionalVariants = style.variants.slice( 1 );\n\n\t\t\t\t\t\tcreateElementStyle( {\n\t\t\t\t\t\t\telementId,\n\t\t\t\t\t\t\tclassesProp,\n\t\t\t\t\t\t\tstyleId,\n\t\t\t\t\t\t\tlabel: ELEMENTS_STYLES_RESERVED_LABEL,\n\t\t\t\t\t\t\t...firstVariant,\n\t\t\t\t\t\t\tadditionalVariants,\n\t\t\t\t\t\t} );\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\ttitle: ( { containers } ) => getTitleForContainers( containers ),\n\t\t\tsubtitle: __( 'Style Reset', 'elementor' ),\n\t\t}\n\t);\n","import { initPasteStyleCommand } from './paste-style';\nimport { initResetStyleCommand } from './reset-style';\n\nexport function initStyleCommands() {\n\tinitPasteStyleCommand();\n\tinitResetStyleCommand();\n}\n"],"mappings":"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","names":["React","useEffect","React","useListenTo","useEffect","useMemo","useState","useEffect","useMemo","size","useMemo","useState","useMemo","useEffect","useListenTo","size","size","blockCommand","__","getWidgetsCache","__","__","blockCommand","listenTo","blockCommand","commandStartEvent","createElementStyle","deleteElementStyle","getElementStyles","ELEMENTS_STYLES_RESERVED_LABEL","undoable","__","undoable","getElementStyles","deleteElementStyle","createElementStyle","ELEMENTS_STYLES_RESERVED_LABEL","__","blockCommand","listenTo","commandStartEvent"]}
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.17.0",
4
+ "version": "0.18.0",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -36,13 +36,13 @@
36
36
  "react": "^18.3.1"
37
37
  },
38
38
  "dependencies": {
39
- "@elementor/editor": "0.18.5",
40
- "@elementor/editor-notifications": "1.0.0",
41
- "@elementor/editor-elements": "0.8.0",
42
- "@elementor/editor-props": "0.11.1",
39
+ "@elementor/editor": "0.18.6",
40
+ "@elementor/editor-notifications": "1.0.1",
41
+ "@elementor/editor-elements": "0.8.1",
42
+ "@elementor/editor-props": "0.12.0",
43
43
  "@elementor/editor-responsive": "0.13.4",
44
- "@elementor/editor-styles": "0.6.5",
45
- "@elementor/editor-styles-repository": "0.8.3",
44
+ "@elementor/editor-styles": "0.6.6",
45
+ "@elementor/editor-styles-repository": "0.8.4",
46
46
  "@elementor/editor-v1-adapters": "0.11.0",
47
47
  "@elementor/twing": "0.0.2",
48
48
  "@elementor/ui": "1.32.1",
@@ -16,13 +16,11 @@ export function StyleRenderer() {
16
16
 
17
17
  return (
18
18
  <Portal container={ container }>
19
- <>
20
- { styleItems.map( ( item ) => (
21
- <style data-e-style-id={ item.id } key={ item.id }>
22
- { item.value }
23
- </style>
24
- ) ) }
25
- </>
19
+ { styleItems.map( ( item ) => (
20
+ <style data-e-style-id={ item.id } key={ item.id }>
21
+ { item.value }
22
+ </style>
23
+ ) ) }
26
24
  </Portal>
27
25
  );
28
26
  }