PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.1
Elementor Website Builder – more than just a page builder v4.3.1
4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 All 454 releases
← All changes | assets/js/packages/editor-elements/editor-elements.js +1320 -2 4.0.8 → 4.3.1 View file →
@@ -1,3 +1,1321 @@
1 -/*! For license information please see editor-elements.js.LICENSE.txt */
2 -!function(){"use strict";var e={"./packages/packages/libs/editor-elements/src/errors.ts":function(e,t,n){n.r(t),n.d(t,{ElementIndexNotFoundError:function(){return a},ElementLabelNotExistsError:function(){return i},ElementNotFoundError:function(){return r},ElementParentNotFoundError:function(){return l},ElementTypeNotExistsError:function(){return c},StyleNotFoundError:function(){return o}});var s=n("@elementor/utils");const r=(0,s.createError)({code:"element_not_found",message:"Element not found."}),o=(0,s.createError)({code:"style_not_found",message:"Style not found."}),c=(0,s.createError)({code:"element_type_not_exists",message:"Element type does not exist."}),i=(0,s.createError)({code:"element_label_not_exists",message:"Element label does not exist."}),l=(0,s.createError)({code:"element_parent_not_found",message:"Element parent not found."}),a=(0,s.createError)({code:"element_index_not_found",message:"Element index not found."})},"./packages/packages/libs/editor-elements/src/hooks/use-element-children.ts":function(e,t,n){n.r(t),n.d(t,{useElementChildren:function(){return useElementChildren}});var s=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts"),o=n("./packages/packages/libs/editor-elements/src/sync/model-utils.ts");function toElementModel({model:e}){return{id:e.get("id"),editorSettings:e.get("editor_settings")??{}}}function useElementChildren(e,t){return(0,s.__privateUseListenTo)([(0,s.v1ReadyEvent)(),(0,s.commandEndEvent)("document/elements/create"),(0,s.commandEndEvent)("document/elements/delete"),(0,s.commandEndEvent)("document/elements/update"),(0,s.commandEndEvent)("document/elements/set-settings")],()=>{const n=(0,r.getContainer)(e),s=n?.model;if(!s)return{};return Object.entries(t).reduce((e,[t,n])=>{const r=(0,o.findChildRecursive)(s,e=>e.get("elType")===t);if(!r)return e[n]=[],e;const c=(0,o.getElementChildren)(r.model,e=>e.get("elType")===n);return e[n]=c.map(toElementModel),e},{})},[e])}},"./packages/packages/libs/editor-elements/src/hooks/use-element-editor-settings.ts":function(e,t,n){n.r(t),n.d(t,{useElementEditorSettings:function(){return useElementEditorSettings}});var s=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/libs/editor-elements/src/sync/get-element-editor-settings.ts");const useElementEditorSettings=e=>(0,s.__privateUseListenTo)((0,s.windowEvent)("elementor/element/update_editor_settings"),()=>(0,r.getElementEditorSettings)(e),[e])},"./packages/packages/libs/editor-elements/src/hooks/use-parent-element.ts":function(e,t,n){n.r(t),n.d(t,{useParentElement:function(){return useParentElement}});var s=n("@elementor/editor-v1-adapters");function useParentElement(e){return(0,s.__privateUseListenTo)([(0,s.commandEndEvent)("document/elements/create")],()=>{if(!e)return null;const t=window,n=t?.elementor?.getContainer?.(e);return n?n.parent:null},[e])}},"./packages/packages/libs/editor-elements/src/hooks/use-selected-element-settings.ts":function(e,t,n){n.r(t),n.d(t,{useSelectedElementSettings:function(){return useSelectedElementSettings}});var s=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/libs/editor-elements/src/sync/get-element-setting.ts"),o=n("./packages/packages/libs/editor-elements/src/sync/get-selected-elements.ts");function useSelectedElementSettings(){return(0,s.__privateUseListenTo)([(0,s.commandEndEvent)("document/elements/select"),(0,s.commandEndEvent)("document/elements/deselect"),(0,s.commandEndEvent)("document/elements/select-all"),(0,s.commandEndEvent)("document/elements/deselect-all"),(0,s.commandEndEvent)("document/elements/set-settings")],()=>{const{element:e,elementType:t}=(0,o.getSelectedElement)();if(!e||!t)return{element:null,elementType:null,settings:null};return{element:e,elementType:t,settings:(0,r.getElementSettings)(e.id,Object.keys(t.propsSchema))}})}},"./packages/packages/libs/editor-elements/src/hooks/use-selected-element.ts":function(e,t,n){n.r(t),n.d(t,{useSelectedElement:function(){return useSelectedElement}});var s=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/libs/editor-elements/src/sync/get-selected-elements.ts");function useSelectedElement(){return(0,s.__privateUseListenTo)([(0,s.commandEndEvent)("document/elements/select"),(0,s.commandEndEvent)("document/elements/deselect"),(0,s.commandEndEvent)("document/elements/select-all"),(0,s.commandEndEvent)("document/elements/deselect-all")],r.getSelectedElement)}},"./packages/packages/libs/editor-elements/src/link-restriction.ts":function(e,t,n){n.r(t),n.d(t,{getAnchoredAncestorId:function(){return getAnchoredAncestorId},getAnchoredDescendantId:function(){return getAnchoredDescendantId},getLinkInLinkRestriction:function(){return getLinkInLinkRestriction},isElementAnchored:function(){return isElementAnchored}});var s=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts"),r=n("./packages/packages/libs/editor-elements/src/sync/get-element-setting.ts");const o="a, [data-action-link]";function getLinkInLinkRestriction(e,t){const n=getAnchoredDescendantId(e);if(n)return{shouldRestrict:!0,reason:"descendant",elementId:n};const s=function checkForInlineLink(e,t){const n=getElementDOM(e);if(!n)return!1;if(n.matches(o))return!1;const s=t??(0,r.getElementSetting)(e,"link")?.value;if(s?.destination)return!1;return null!==n.querySelector(o)}(e,t);if(s)return{shouldRestrict:!0,reason:"descendant",elementId:e};const c=getAnchoredAncestorId(e);return c?{shouldRestrict:!0,reason:"ancestor",elementId:c}:{shouldRestrict:!1}}function getAnchoredDescendantId(e){const t=getElementDOM(e);if(!t)return null;for(const n of Array.from(t.querySelectorAll(o))){const t=findElementIdOf(n);if(t!==e)return t}return null}function getAnchoredAncestorId(e){const t=getElementDOM(e);if(!t||null===t.parentElement)return null;const n=t.parentElement.closest(o);return n?findElementIdOf(n):null}function isElementAnchored(e){const t=getElementDOM(e);return!!t&&(!!t.matches(o)||doesElementContainAnchor(t))}function doesElementContainAnchor(e){for(const t of Array.from(e.children))if(!isElementorElement(t)){if(t.matches(o))return!0;if(doesElementContainAnchor(t))return!0}return!1}function findElementIdOf(e){return e.closest("[data-id]")?.dataset.id||null}function getElementDOM(e){try{return(0,s.getContainer)(e)?.view?.el||null}catch{return null}}function isElementorElement(e){return e.hasAttribute("data-id")}},"./packages/packages/libs/editor-elements/src/styles/consts.ts":function(e,t,n){n.r(t),n.d(t,{ELEMENT_STYLE_CHANGE_EVENT:function(){return r},styleRerenderEvents:function(){return o}});var s=n("@elementor/editor-v1-adapters");const r="elementor/editor-v2/editor-elements/style",o=[(0,s.commandEndEvent)("document/elements/create"),(0,s.commandEndEvent)("document/elements/duplicate"),(0,s.commandEndEvent)("document/elements/import"),(0,s.commandEndEvent)("document/elements/paste"),(0,s.windowEvent)(r)]},"./packages/packages/libs/editor-elements/src/styles/create-element-style.ts":function(e,t,n){n.r(t),n.d(t,{createElementStyle:function(){return createElementStyle},shouldCreateNewLocalStyle:function(){return shouldCreateNewLocalStyle}});var s=n("@elementor/editor-props"),r=n("@elementor/editor-styles"),o=n("./packages/packages/libs/editor-elements/src/sync/get-element-setting.ts"),c=n("./packages/packages/libs/editor-elements/src/sync/update-element-settings.ts"),i=n("./packages/packages/libs/editor-elements/src/styles/mutate-element-styles.ts");function createElementStyle({styleId:e,elementId:t,classesProp:n,label:l,meta:a,props:m,custom_css:d=null,additionalVariants:u=[]}){let p=e;return(0,i.mutateElementStyles)(t,e=>{p??=(0,r.generateId)(`e-${t}-`,Object.keys(e));const i=[{meta:a,props:m,custom_css:d},...u];return e[p]={id:p,label:l,type:"class",variants:i},function addStyleToClassesProp(e,t,n){const r=(0,o.getElementSetting)(e,t),i=s.classesPropTypeUtil.create(e=>[...e??[],n],{base:r});(0,c.updateElementSettings)({id:e,props:{[t]:i},withHistory:!1})}(t,n,p),e}),p}function shouldCreateNewLocalStyle(e){return!e?.styleId&&!e?.provider}},"./packages/packages/libs/editor-elements/src/styles/delete-element-style.ts":function(e,t,n){n.r(t),n.d(t,{deleteElementStyle:function(){return deleteElementStyle}});var s=n("./packages/packages/libs/editor-elements/src/styles/mutate-element-styles.ts");function deleteElementStyle(e,t){(0,s.mutateElementStyles)(e,e=>(delete e[t],e))}},"./packages/packages/libs/editor-elements/src/styles/mutate-element-styles.ts":function(e,t,n){n.r(t),n.d(t,{mutateElementStyles:function(){return mutateElementStyles}});var s=n("@elementor/editor-props"),r=n("@elementor/editor-v1-adapters"),o=n("./packages/packages/libs/editor-elements/src/errors.ts"),c=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts"),i=n("./packages/packages/libs/editor-elements/src/sync/update-element-settings.ts"),l=n("./packages/packages/libs/editor-elements/src/styles/consts.ts");function mutateElementStyles(e,t){const n=(0,c.getContainer)(e);if(!n)throw new o.ElementNotFoundError({context:{elementId:e}});const a=Object.keys(n.model.get("styles")??{}),m=function mutateStyles(e,t){const n=structuredClone(e.model.get("styles"))??{},s=Object.entries(t(n)).map(([e,t])=>(t.variants=function removeEmptyVariants(e){return e.variants.filter(({props:e,custom_css:t})=>Object.keys(e).length>0||t?.raw)}(t),[e,t])).filter(([,e])=>!function isStyleEmpty(e){return 0===e.variants.length}(e)),r=Object.fromEntries(s);return e.model.set("styles",r),r}(n,t);return function clearRemovedClasses(e,{oldIds:t,newIds:n}){const r=t.filter(e=>!n.includes(e)),o=structuredClone(function getClassesProps(e){return Object.entries(e.settings.toJSON()).filter(e=>{const[,t]=e;return s.classesPropTypeUtil.isValid(t)})}(e));o.forEach(([,e])=>{e.value=e.value.filter(e=>!r.includes(e))}),(0,i.updateElementSettings)({id:e.id,props:Object.fromEntries(o),withHistory:!1})}(n,{oldIds:a,newIds:Object.keys(m)}),function notifyChanges(){(function dispatchChangeEvent(){window.dispatchEvent(new CustomEvent(l.ELEMENT_STYLE_CHANGE_EVENT))})(),(0,r.__privateRunCommandSync)("document/save/set-is-modified",{status:!0},{internal:!0})}(),m}},"./packages/packages/libs/editor-elements/src/styles/update-element-style.ts":function(e,t,n){n.r(t),n.d(t,{updateElementStyle:function(){return updateElementStyle}});var s=n("@elementor/editor-props"),r=n("@elementor/editor-styles"),o=n("./packages/packages/libs/editor-elements/src/errors.ts"),c=n("./packages/packages/libs/editor-elements/src/styles/mutate-element-styles.ts");function updateElementStyle(e){(0,c.mutateElementStyles)(e.elementId,t=>{const n=t[e.styleId];if(!n)throw new o.StyleNotFoundError({context:{styleId:e.styleId}});const c=(0,r.getVariantByMeta)(n,e.meta),i=("custom_css"in e?e.custom_css:c?.custom_css)??null;return c?(c.props=(0,s.mergeProps)(c.props,e.props),c.custom_css=i?.raw?i:null):n.variants.push({meta:e.meta,props:e.props,custom_css:i}),t})}},"./packages/packages/libs/editor-elements/src/sync/create-element.ts":function(e,t,n){n.r(t),n.d(t,{createElement:function(){return createElement}});var s=n("@elementor/editor-v1-adapters");function createElement({container:e,model:t,options:n}){return(0,s.__privateRunCommandSync)("document/elements/create",{container:e,model:t,options:{edit:!1,...n}})}},"./packages/packages/libs/editor-elements/src/sync/create-elements.ts":function(e,t,n){n.r(t),n.d(t,{createElements:function(){return createElements}});var s=n("@elementor/editor-v1-adapters"),r=n("@wordpress/i18n"),o=n("./packages/packages/libs/editor-elements/src/sync/create-element.ts"),c=n("./packages/packages/libs/editor-elements/src/sync/delete-element.ts");const createElements=({elements:e,title:t,subtitle:n=(0,r.__)("Item added","elementor")})=>(0,s.undoable)({do:({elements:e})=>{const t=[];return e.forEach(({container:e,options:n,...s})=>{const r=e.lookup?.()??e;if(!r)throw new Error("Parent container not found");const c=(0,o.createElement)({container:r,...s,options:{...n,useHistory:!1}});t.push({container:c,parentContainer:r,model:c.model?.toJSON()||{},options:n})}),{createdElements:t}},undo:(e,{createdElements:t})=>{[...t].reverse().forEach(({container:e})=>{const t=e.lookup?.();t&&(0,c.deleteElement)({container:t,options:{useHistory:!1}})})},redo:(e,{createdElements:t})=>{const n=[];return t.forEach(({parentContainer:e,model:t,options:s})=>{const r=e.lookup?.();if(!r)return;const c=(0,o.createElement)({container:r,model:t,options:{...s,useHistory:!1}});n.push({container:c,parentContainer:r,model:c.model.toJSON(),options:s})}),{createdElements:n}}},{title:t,subtitle:n})({elements:e})},"./packages/packages/libs/editor-elements/src/sync/delete-element.ts":function(e,t,n){n.r(t),n.d(t,{deleteElement:function(){return deleteElement}});var s=n("@elementor/editor-v1-adapters");function deleteElement({container:e,options:t={}}){(0,s.__privateRunCommandSync)("document/elements/delete",{container:e,options:t})}},"./packages/packages/libs/editor-elements/src/sync/drop-element.ts":function(e,t,n){n.r(t),n.d(t,{dropElement:function(){return dropElement}});var s=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");function dropElement({containerId:e,model:t,options:n}){const o=(0,r.getContainer)(e);if(!o)throw new Error(`Container with ID "${e}" not found`);return(0,s.__privateRunCommandSync)("preview/drop",{container:o,model:t,options:n})}},"./packages/packages/libs/editor-elements/src/sync/duplicate-element.ts":function(e,t,n){n.r(t),n.d(t,{duplicateElement:function(){return duplicateElement}});var s=n("@elementor/editor-v1-adapters");function duplicateElement({element:e,options:t={}}){const n=e.view?._index??0,r=!1!==t.clone?n+1:void 0;return(0,s.__privateRunCommandSync)("document/elements/duplicate",{container:e,options:{at:r,edit:!1,...t}})}},"./packages/packages/libs/editor-elements/src/sync/duplicate-elements.ts":function(e,t,n){n.r(t),n.d(t,{duplicateElements:function(){return duplicateElements}});var s=n("@elementor/editor-v1-adapters"),r=n("@wordpress/i18n"),o=n("./packages/packages/libs/editor-elements/src/sync/create-element.ts"),c=n("./packages/packages/libs/editor-elements/src/sync/delete-element.ts"),i=n("./packages/packages/libs/editor-elements/src/sync/duplicate-element.ts"),l=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");const duplicateElements=({elementIds:e,title:t,subtitle:n=(0,r.__)("Item duplicated","elementor"),onDuplicateElements:a,onRestoreElements:m})=>(0,s.undoable)({do:({elementIds:e})=>{a?.();const t=[];return e.forEach(e=>{const n=(0,l.getContainer)(e);if(!n?.parent)return;const s=(0,i.duplicateElement)({element:n,options:{useHistory:!1}});s.parent&&t.push({container:s,parentContainer:s.parent,model:s.model.toJSON(),at:s.view?._index})}),{duplicatedElements:t}},undo:(e,{duplicatedElements:t})=>{m?.(),[...t].reverse().forEach(({container:e})=>{(0,c.deleteElement)({container:e,options:{useHistory:!1}})})},redo:(e,{duplicatedElements:t})=>{a?.();const n=[];return t.forEach(({parentContainer:e,model:t,at:s})=>{const r=e.lookup?.();if(r){const e=(0,o.createElement)({container:r,model:t,options:{useHistory:!1,clone:!1,at:s}});n.push({container:e,parentContainer:r,model:t,at:s})}}),{duplicatedElements:n}}},{title:t,subtitle:n})({elementIds:e})},"./packages/packages/libs/editor-elements/src/sync/generate-element-id.ts":function(e,t,n){n.r(t),n.d(t,{generateElementId:function(){return generateElementId}});const generateElementId=()=>{const e=window;return e.elementorCommon?.helpers?.getUniqueId?.()??`el-${Date.now()}-${Math.random().toString(36).substring(2,9)}`}},"./packages/packages/libs/editor-elements/src/sync/get-all-descendants.ts":function(e,t,n){function getAllDescendants(e){return[e,...(e.children??[]).flatMap(e=>getAllDescendants(e))]}n.r(t),n.d(t,{getAllDescendants:function(){return getAllDescendants}})},"./packages/packages/libs/editor-elements/src/sync/get-container.ts":function(e,t,n){n.r(t),n.d(t,{getContainer:function(){return getContainer},selectElement:function(){return selectElement}});var s=n("@elementor/editor-v1-adapters");function getContainer(e){const t=window,n=t.elementor?.getContainer?.(e);return n??null}const selectElement=e=>{try{const t=getContainer(e);(0,s.__privateRunCommand)("document/elements/select",{container:t})}catch{}}},"./packages/packages/libs/editor-elements/src/sync/get-current-document-container.ts":function(e,t,n){function getCurrentDocumentContainer(){const e=window;return e.elementor?.documents?.getCurrent?.()?.container??null}n.r(t),n.d(t,{getCurrentDocumentContainer:function(){return getCurrentDocumentContainer}})},"./packages/packages/libs/editor-elements/src/sync/get-current-document-id.ts":function(e,t,n){function getCurrentDocumentId(){const e=window;try{return e.elementor?.documents?.getCurrentId?.()??null}catch{return null}}n.r(t),n.d(t,{getCurrentDocumentId:function(){return getCurrentDocumentId}})},"./packages/packages/libs/editor-elements/src/sync/get-element-editor-settings.ts":function(e,t,n){n.r(t),n.d(t,{getElementEditorSettings:function(){return getElementEditorSettings}});var s=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");function getElementEditorSettings(e){const t=(0,s.getContainer)(e);return t?.model.get("editor_settings")??{}}},"./packages/packages/libs/editor-elements/src/sync/get-element-interactions.ts":function(e,t,n){n.r(t),n.d(t,{getElementInteractions:function(){return getElementInteractions}});var s=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");function getElementInteractions(e){const t=(0,s.getContainer)(e),n=t?.model?.get("interactions");return"string"==typeof n?JSON.parse(n):n}},"./packages/packages/libs/editor-elements/src/sync/get-element-label.ts":function(e,t,n){n.r(t),n.d(t,{getElementLabel:function(){return getElementLabel}});var s=n("./packages/packages/libs/editor-elements/src/errors.ts"),r=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts"),o=n("./packages/packages/libs/editor-elements/src/sync/get-widgets-cache.ts"),c=n("./packages/packages/libs/editor-elements/src/sync/get-selected-elements.ts");function getElementLabel(e){e||(e=(0,c.getSelectedElements)()?.[0]?.id);const t=(0,r.getContainer)(e),n=t?.model.get("widgetType")||t?.model.get("elType");if(!n)throw new s.ElementTypeNotExistsError({context:{elementId:e}});const i=(0,o.getWidgetsCache)()?.[n]?.title;if(!i)throw new s.ElementLabelNotExistsError({context:{elementType:n}});return i}},"./packages/packages/libs/editor-elements/src/sync/get-element-setting.ts":function(e,t,n){n.r(t),n.d(t,{getElementSetting:function(){return getElementSetting},getElementSettings:function(){return getElementSettings}});var s=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");const getElementSetting=(e,t)=>{const n=(0,s.getContainer)(e);return n?.settings?.get(t)??null},getElementSettings=(e,t)=>Object.fromEntries(t.map(t=>[t,getElementSetting(e,t)]))},"./packages/packages/libs/editor-elements/src/sync/get-element-styles.ts":function(e,t,n){n.r(t),n.d(t,{getElementStyles:function(){return getElementStyles}});var s=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");const getElementStyles=e=>{const t=(0,s.getContainer)(e);return t?.model.get("styles")||null}},"./packages/packages/libs/editor-elements/src/sync/get-element-type.ts":function(e,t,n){n.r(t),n.d(t,{getElementType:function(){return getElementType}});var s=n("./packages/packages/libs/editor-elements/src/sync/get-widgets-cache.ts");function getElementType(e){if(!e)return null;const t=(0,s.getWidgetsCache)(),n=t?.[e];return n?.atomic_controls&&n?.atomic_props_schema?{key:e,controls:n.atomic_controls,propsSchema:n.atomic_props_schema,dependenciesPerTargetMapping:n.dependencies_per_target_mapping??{},title:n.title,styleStates:n.atomic_style_states??[],pseudoStates:n.atomic_pseudo_states??[]}:null}},"./packages/packages/libs/editor-elements/src/sync/get-elements.ts":function(e,t,n){n.r(t),n.d(t,{getElements:function(){return getElements}});var s=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts"),r=n("./packages/packages/libs/editor-elements/src/sync/get-current-document-container.ts");function getElements(e){const t=e?(0,s.getContainer)(e):(0,r.getCurrentDocumentContainer)();if(!t)return[];const n=[...t.model.get("elements")??[]].flatMap(e=>getElements(e.get("id")));return[t,...n]}},"./packages/packages/libs/editor-elements/src/sync/get-selected-elements.ts":function(e,t,n){n.r(t),n.d(t,{getSelectedElement:function(){return getSelectedElement},getSelectedElements:function(){return getSelectedElements}});var s=n("./packages/packages/libs/editor-elements/src/sync/get-element-type.ts");function getSelectedElements(){const e=window;return(e.elementor?.selection?.getElements?.()??[]).reduce((e,t)=>{const n=t.model.get("widgetType")||t.model.get("elType");return n&&e.push({id:t.model.get("id"),type:n}),e},[])}function getSelectedElement(){const e=getSelectedElements(),[t]=e,n=(0,s.getElementType)(t?.type);return 1===e.length&&n&&t?{element:t,elementType:n}:{element:null,elementType:null}}},"./packages/packages/libs/editor-elements/src/sync/get-widgets-cache.ts":function(e,t,n){function getWidgetsCache(){const e=window;return e?.elementor?.widgetsCache||null}n.r(t),n.d(t,{getWidgetsCache:function(){return getWidgetsCache}})},"./packages/packages/libs/editor-elements/src/sync/model-utils.ts":function(e,t,n){function findChildRecursive(e,t){const n=e.get("elements")??[];for(const e of n){if(t(e))return{model:e};const n=findChildRecursive(e,t);if(n)return n}return null}function getElementChildren(e,t){return(e.get("elements")??[]).filter(e=>!t||t(e)).map(e=>({model:e}))}n.r(t),n.d(t,{findChildRecursive:function(){return findChildRecursive},getElementChildren:function(){return getElementChildren}})},"./packages/packages/libs/editor-elements/src/sync/move-element.ts":function(e,t,n){n.r(t),n.d(t,{moveElement:function(){return moveElement}});var s=n("./packages/packages/libs/editor-elements/src/sync/create-element.ts"),r=n("./packages/packages/libs/editor-elements/src/sync/delete-element.ts");function moveElement({element:e,targetContainer:t,options:n={}}){const o=e.lookup?.(),c=t.lookup?.();if(!o)throw new Error(`Element not found: ${e.id}`);if(!c)throw new Error(`Target container not found: ${t.id}`);const i=o.model.toJSON();(0,r.deleteElement)({container:o,options:{...n,useHistory:!1}});return(0,s.createElement)({container:c,model:i,options:{edit:!1,...n,useHistory:!1}})}},"./packages/packages/libs/editor-elements/src/sync/move-elements.ts":function(e,t,n){n.r(t),n.d(t,{moveElements:function(){return moveElements}});var s=n("@elementor/editor-v1-adapters"),r=n("@wordpress/i18n"),o=n("./packages/packages/libs/editor-elements/src/sync/move-element.ts");const moveElements=({moves:e,title:t,subtitle:n=(0,r.__)("Elements moved","elementor"),onMoveElements:c,onRestoreElements:i})=>(0,s.undoable)({do:({moves:e})=>{const t=[];return c?.(),e.forEach(({element:e,targetContainer:n,options:s})=>{const r=e.lookup?.()??e,c=n.lookup?.()??n;if(!r)throw new Error("Element not found");if(!c)throw new Error("Target container not found");if(!r.parent)throw new Error("Element has no parent container");const i=r.parent,l=i.children?.indexOf(r)??-1,a=(0,o.moveElement)({element:r,targetContainer:c,options:{...s,useHistory:!1}});t.push({element:a,originalContainer:i,originalIndex:l,targetContainer:c,options:s})}),{movedElements:t}},undo:(e,{movedElements:t})=>{i?.(),[...t].reverse().forEach(({element:e,originalContainer:t,originalIndex:n})=>{const s=e.lookup?.(),r=t.lookup?.();s&&r&&(0,o.moveElement)({element:s,targetContainer:r,options:{useHistory:!1,at:n>=0?n:void 0}})})},redo:(e,{movedElements:t})=>{const n=[];return c?.(),t.forEach(({element:e,originalContainer:t,originalIndex:s,targetContainer:r,options:c})=>{const i=e.lookup?.(),l=t.lookup?.(),a=r.lookup?.();if(!i||!l||!a)return;const m=(0,o.moveElement)({element:i,targetContainer:a,options:{...c,useHistory:!1}});n.push({element:m,originalContainer:l,originalIndex:s,targetContainer:a,options:c})}),{movedElements:n}}},{title:t,subtitle:n})({moves:e})},"./packages/packages/libs/editor-elements/src/sync/remove-elements.ts":function(e,t,n){n.r(t),n.d(t,{removeElements:function(){return removeElements}});var s=n("@elementor/editor-v1-adapters"),r=n("@wordpress/i18n"),o=n("./packages/packages/libs/editor-elements/src/sync/create-element.ts"),c=n("./packages/packages/libs/editor-elements/src/sync/delete-element.ts"),i=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");const removeElements=({elementIds:e,title:t,subtitle:n=(0,r.__)("Item removed","elementor"),onRemoveElements:l,onRestoreElements:a})=>(0,s.undoable)({do:({elementIds:e})=>{const t=[];return e.forEach(e=>{const n=(0,i.getContainer)(e);n?.parent&&t.push({container:n,parent:n.parent,model:n.model.toJSON(),at:n.view?._index??0})}),l?.(),t.forEach(({container:e})=>{(0,c.deleteElement)({container:e,options:{useHistory:!1}})}),{removedElements:t}},undo:(e,{removedElements:t})=>{a?.(),[...t].reverse().forEach(({parent:e,model:t,at:n})=>{const s=e.lookup?.();s&&(0,o.createElement)({container:s,model:t,options:{useHistory:!1,at:n}})})},redo:(e,{removedElements:t})=>{l?.();const n=[];return t.forEach(({container:e,parent:t,model:s,at:r})=>{const o=e.lookup?.(),i=t.lookup?.();o&&i&&((0,c.deleteElement)({container:o,options:{useHistory:!1}}),n.push({container:o,parent:i,model:s,at:r}))}),{removedElements:n}}},{title:t,subtitle:n})({elementIds:e})},"./packages/packages/libs/editor-elements/src/sync/replace-element.ts":function(e,t,n){n.r(t),n.d(t,{replaceElement:function(){return replaceElement}});var s=n("./packages/packages/libs/editor-elements/src/errors.ts"),r=n("./packages/packages/libs/editor-elements/src/sync/create-element.ts"),o=n("./packages/packages/libs/editor-elements/src/sync/delete-element.ts"),c=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");const replaceElement=({currentElementId:e,newElement:t,withHistory:n=!0})=>{const l=(0,c.getContainer)(e);if(!l)throw new s.ElementNotFoundError({context:{elementId:e}});const{container:a,index:m}=function getNewElementContainer(e,t){const{parent:n}=e;if(!n)throw new s.ElementParentNotFoundError({context:{elementId:e.id}});const o=e.view?._index??0;if(-1===o)throw new s.ElementIndexNotFoundError({context:{elementId:e.id}});let c={container:n,index:o};"document"===n.id&&"widget"===t.elType&&(c=function createWrapperForWidget(e,t){const n=(0,r.createElement)({container:e,model:{elType:i},options:{at:t,useHistory:!1}});return{container:n,index:0}}(n,o));return c}(l,t),d=(0,r.createElement)({container:a,model:t,options:{at:m,useHistory:n}});return(0,o.deleteElement)({container:l,options:{useHistory:n}}),d};const i="e-flexbox"},"./packages/packages/libs/editor-elements/src/sync/update-element-editor-settings.ts":function(e,t,n){n.r(t),n.d(t,{updateElementEditorSettings:function(){return updateElementEditorSettings}});var s=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");const updateElementEditorSettings=({elementId:e,settings:t})=>{const n=(0,r.getContainer)(e);if(!n)throw new Error(`Element with id ${e} not found`);const o=n.model.get("editor_settings")??{};n.model.set("editor_settings",{...o,...t}),(0,s.__privateRunCommandSync)("document/save/set-is-modified",{status:!0},{internal:!0})}},"./packages/packages/libs/editor-elements/src/sync/update-element-interactions.ts":function(e,t,n){n.r(t),n.d(t,{playElementInteractions:function(){return playElementInteractions},updateElementInteractions:function(){return updateElementInteractions}});var s=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");const updateElementInteractions=({elementId:e,interactions:t})=>{const n=(0,r.getContainer)(e);if(!n)throw new Error(`Element with id ${e} not found`);n.model.set("interactions",t),window.dispatchEvent(new CustomEvent("elementor/element/update_interactions")),(0,s.__privateRunCommandSync)("document/save/set-is-modified",{status:!0},{internal:!0})},playElementInteractions=(e,t)=>{window.top?.dispatchEvent(new CustomEvent("atomic/play_interactions",{detail:{elementId:e,interactionId:t}}))}},"./packages/packages/libs/editor-elements/src/sync/update-element-settings.ts":function(e,t,n){n.r(t),n.d(t,{updateElementSettings:function(){return updateElementSettings}});var s=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/libs/editor-elements/src/sync/get-container.ts");const updateElementSettings=({id:e,props:t,withHistory:n=!0})=>{const o=(0,r.getContainer)(e);if(!o)return;const c={container:o,settings:{...t}};n?(0,s.__privateRunCommandSync)("document/elements/settings",c):(0,s.__privateRunCommandSync)("document/elements/set-settings",c,{internal:!0})}},"./packages/packages/libs/editor-elements/src/types.ts":function(e,t,n){n.r(t)},"@elementor/editor-props":function(e){e.exports=window.elementorV2.editorProps},"@elementor/editor-styles":function(e){e.exports=window.elementorV2.editorStyles},"@elementor/editor-v1-adapters":function(e){e.exports=window.elementorV2.editorV1Adapters},"@elementor/utils":function(e){e.exports=window.elementorV2.utils},"@wordpress/i18n":function(e){e.exports=window.wp.i18n}},t={};function __webpack_require__(n){var s=t[n];if(void 0!==s)return s.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(e,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};!function(){__webpack_require__.r(n),__webpack_require__.d(n,{ELEMENT_STYLE_CHANGE_EVENT:function(){return R.ELEMENT_STYLE_CHANGE_EVENT},createElement:function(){return c.createElement},createElementStyle:function(){return O.createElementStyle},createElements:function(){return i.createElements},deleteElement:function(){return l.deleteElement},deleteElementStyle:function(){return D.deleteElementStyle},dropElement:function(){return a.dropElement},duplicateElement:function(){return m.duplicateElement},duplicateElements:function(){return d.duplicateElements},findChildRecursive:function(){return w.findChildRecursive},generateElementId:function(){return u.generateElementId},getAllDescendants:function(){return v.getAllDescendants},getAnchoredAncestorId:function(){return L.getAnchoredAncestorId},getAnchoredDescendantId:function(){return L.getAnchoredDescendantId},getContainer:function(){return p.getContainer},getCurrentDocumentContainer:function(){return g.getCurrentDocumentContainer},getCurrentDocumentId:function(){return E.getCurrentDocumentId},getElementChildrenWithFallback:function(){return w.getElementChildren},getElementEditorSettings:function(){return k.getElementEditorSettings},getElementInteractions:function(){return M.getElementInteractions},getElementLabel:function(){return _.getElementLabel},getElementSetting:function(){return f.getElementSetting},getElementSettings:function(){return f.getElementSettings},getElementStyles:function(){return y.getElementStyles},getElementType:function(){return b.getElementType},getElements:function(){return h.getElements},getLinkInLinkRestriction:function(){return L.getLinkInLinkRestriction},getSelectedElements:function(){return C.getSelectedElements},getWidgetsCache:function(){return S.getWidgetsCache},isElementAnchored:function(){return L.isElementAnchored},moveElement:function(){return I.moveElement},moveElements:function(){return q.moveElements},playElementInteractions:function(){return P.playElementInteractions},removeElements:function(){return T.removeElements},replaceElement:function(){return x.replaceElement},selectElement:function(){return p.selectElement},shouldCreateNewLocalStyle:function(){return O.shouldCreateNewLocalStyle},styleRerenderEvents:function(){return R.styleRerenderEvents},updateElementEditorSettings:function(){return A.updateElementEditorSettings},updateElementInteractions:function(){return P.updateElementInteractions},updateElementSettings:function(){return N.updateElementSettings},updateElementStyle:function(){return H.updateElementStyle},useElementChildren:function(){return e.useElementChildren},useElementEditorSettings:function(){return t.useElementEditorSettings},useParentElement:function(){return s.useParentElement},useSelectedElement:function(){return r.useSelectedElement},useSelectedElementSettings:function(){return o.useSelectedElementSettings}});__webpack_require__("./packages/packages/libs/editor-elements/src/types.ts");var e=__webpack_require__("./packages/packages/libs/editor-elements/src/hooks/use-element-children.ts"),t=__webpack_require__("./packages/packages/libs/editor-elements/src/hooks/use-element-editor-settings.ts"),s=__webpack_require__("./packages/packages/libs/editor-elements/src/hooks/use-parent-element.ts"),r=__webpack_require__("./packages/packages/libs/editor-elements/src/hooks/use-selected-element.ts"),o=__webpack_require__("./packages/packages/libs/editor-elements/src/hooks/use-selected-element-settings.ts"),c=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/create-element.ts"),i=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/create-elements.ts"),l=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/delete-element.ts"),a=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/drop-element.ts"),m=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/duplicate-element.ts"),d=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/duplicate-elements.ts"),u=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/generate-element-id.ts"),p=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-container.ts"),g=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-current-document-container.ts"),E=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-current-document-id.ts"),k=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-element-editor-settings.ts"),_=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-element-label.ts"),f=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-element-setting.ts"),y=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-element-styles.ts"),b=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-element-type.ts"),v=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-all-descendants.ts"),w=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/model-utils.ts"),h=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-elements.ts"),C=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-selected-elements.ts"),S=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-widgets-cache.ts"),I=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/move-element.ts"),q=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/move-elements.ts"),T=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/remove-elements.ts"),x=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/replace-element.ts"),A=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/update-element-editor-settings.ts"),N=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/update-element-settings.ts"),L=__webpack_require__("./packages/packages/libs/editor-elements/src/link-restriction.ts"),R=__webpack_require__("./packages/packages/libs/editor-elements/src/styles/consts.ts"),O=__webpack_require__("./packages/packages/libs/editor-elements/src/styles/create-element-style.ts"),D=__webpack_require__("./packages/packages/libs/editor-elements/src/styles/delete-element-style.ts"),H=__webpack_require__("./packages/packages/libs/editor-elements/src/styles/update-element-style.ts"),M=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/get-element-interactions.ts"),P=__webpack_require__("./packages/packages/libs/editor-elements/src/sync/update-element-interactions.ts")}(),(window.elementorV2=window.elementorV2||{}).editorElements=n}(),window.elementorV2.editorElements?.init?.();
1 +(function(_elementor_editor_v1_adapters, _elementor_session, _elementor_editor_props, _wordpress_i18n, _elementor_utils, _elementor_editor_styles) {
2 +
3 +//#region \0rolldown/runtime.js
4 + var __defProp = Object.defineProperty;
5 + var __name = (target, value) => __defProp(target, "name", {
6 + value,
7 + configurable: true
8 + });
9 + var __exportAll = (all, no_symbols) => {
10 + let target = {};
11 + for (var name in all) {
12 + __defProp(target, name, {
13 + get: all[name],
14 + enumerable: true
15 + });
16 + }
17 + if (!no_symbols) {
18 + __defProp(target, Symbol.toStringTag, { value: "Module" });
19 + }
20 + return target;
21 + };
22 +
23 +//#endregion
24 +
25 +//#region packages/packages/libs/editor-elements/src/sync/get-container.ts
26 + function getContainer(id) {
27 + return window.elementor?.getContainer?.(id) ?? null;
28 + }
29 + var selectElement = (elementId) => {
30 + try {
31 + (0, _elementor_editor_v1_adapters.__privateRunCommand)("document/elements/select", { container: getContainer(elementId) });
32 + } catch {}
33 + };
34 +
35 +//#endregion
36 +//#region packages/packages/libs/editor-elements/src/sync/resolve-element.ts
37 + function isConnected(container) {
38 + if (!container) return false;
39 + if (!container.view?.el) return true;
40 + return container.view.el.isConnected;
41 + }
42 + function resolveContainer(container, id) {
43 + const looked = container.lookup?.();
44 + if (isConnected(looked)) return looked;
45 + const byId = getContainer(id);
46 + if (isConnected(byId)) return byId;
47 + return null;
48 + }
49 + function getDocumentUtils() {
50 + return window.$e?.components?.get?.("document")?.utils;
51 + }
52 + function findModelInDocument(id) {
53 + return getDocumentUtils()?.findModelById?.(id) ?? null;
54 + }
55 + function addModelToParent(parentId, childData, options) {
56 + return getDocumentUtils()?.addModelToParent?.(parentId, childData, options) ?? false;
57 + }
58 + function removeModelFromParent(parentId, childId) {
59 + return getDocumentUtils()?.removeModelFromParent?.(parentId, childId) ?? false;
60 + }
61 +
62 +//#endregion
63 +//#region packages/packages/libs/editor-elements/src/sync/resolve-insert-index.ts
64 + function resolveInsertIndex(position, elements) {
65 + const lastIndex = elements.length;
66 + switch (position.kind) {
67 + case "first": return 0;
68 + case "last": return lastIndex;
69 + case "index": {
70 + const index = typeof position.value === "number" ? position.value : lastIndex;
71 + return Math.max(0, Math.min(index, lastIndex));
72 + }
73 + case "after_type": {
74 + const anchor = elements.findIndex((element) => element.elType === position.value);
75 + return anchor >= 0 ? anchor + 1 : lastIndex;
76 + }
77 + case "before_type": {
78 + const anchor = elements.findIndex((element) => element.elType === position.value);
79 + return anchor >= 0 ? anchor : lastIndex;
80 + }
81 + default: return lastIndex;
82 + }
83 + }
84 +
85 +//#endregion
86 +//#region packages/packages/libs/editor-elements/src/children-dependencies/stash.ts
87 + var STASH_KEY_PREFIX = "elementor/editor-state";
88 + var STASH_KEY_SEGMENT = "children-deps";
89 + function createChildrenStash() {
90 + return {
91 + get(elementId, childType) {
92 + return (0, _elementor_session.getSessionStorageItem)(buildStashKey(elementId, childType));
93 + },
94 + save(elementId, childType, data) {
95 + (0, _elementor_session.setSessionStorageItem)(buildStashKey(elementId, childType), data);
96 + },
97 + clear(elementId, childType) {
98 + (0, _elementor_session.removeSessionStorageItem)(buildStashKey(elementId, childType));
99 + },
100 + clearAllForElement(elementId) {
101 + const prefix = buildElementStashPrefix(elementId);
102 + for (let index = sessionStorage.length - 1; index >= 0; index--) {
103 + const key = sessionStorage.key(index);
104 + if (key?.startsWith(prefix)) (0, _elementor_session.removeSessionStorageItem)(key);
105 + }
106 + }
107 + };
108 + }
109 + function buildStashKey(elementId, childType) {
110 + return `${STASH_KEY_PREFIX}/${elementId}/${STASH_KEY_SEGMENT}/${childType}`;
111 + }
112 + function buildElementStashPrefix(elementId) {
113 + return `${STASH_KEY_PREFIX}/${elementId}/${STASH_KEY_SEGMENT}/`;
114 + }
115 +
116 +//#endregion
117 +//#region packages/packages/libs/editor-elements/src/sync/generate-element-id.ts
118 + var generateElementId = () => {
119 + return window.elementorCommon?.helpers?.getUniqueId?.() ?? `el-${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
120 + };
121 +
122 +//#endregion
123 +//#region packages/packages/libs/editor-elements/src/children-dependencies/utils.ts
124 + function evaluateWhen(when, settings) {
125 + return (0, _elementor_editor_props.isDependencyMet)(when, settings).isMet;
126 + }
127 + function ensureModelId(model) {
128 + const { skipDefaultChildren: _skipDefaultChildren, ...rest } = model;
129 + return rest.id ? rest : {
130 + ...rest,
131 + id: generateElementId()
132 + };
133 + }
134 + function resolveChildModelData(elementId, rule, stash) {
135 + const stashed = rule.stash ? stash.get(elementId, rule.child_type) : void 0;
136 + return {
137 + modelData: ensureModelId(stashed ?? rule.default_model ?? { elType: rule.child_type }),
138 + wasStashed: Boolean(stashed)
139 + };
140 + }
141 +
142 +//#endregion
143 +//#region packages/packages/libs/editor-elements/src/children-dependencies/bind-settings-reconcile.ts
144 + function bindSettingsReconcile({ model, elementConfig }) {
145 + const stash = createChildrenStash();
146 + const rules = elementConfig?.children_dependencies;
147 + if (!rules?.length) return () => {};
148 + const settingsModel = model.get("settings");
149 + const elementId = model.get("id");
150 + if (!settingsModel?.on || !settingsModel?.off || !elementId) return () => {};
151 + const lastMet = /* @__PURE__ */ new Map();
152 + rules.forEach((rule) => {
153 + lastMet.set(rule.child_type, evaluateWhen(rule.when, settingsModel.toJSON()));
154 + });
155 + const onChange = () => {
156 + const currentSettings = settingsModel.toJSON();
157 + rules.forEach((rule) => {
158 + const previous = lastMet.get(rule.child_type) ?? false;
159 + const current = evaluateWhen(rule.when, currentSettings);
160 + if (previous === current) return;
161 + lastMet.set(rule.child_type, current);
162 + if (current) attachChildFromRule(elementId, rule, stash);
163 + else detachChildFromRule(elementId, rule, stash);
164 + });
165 + };
166 + settingsModel.on("change", onChange);
167 + return () => {
168 + settingsModel.off?.("change", onChange);
169 + stash.clearAllForElement(elementId);
170 + };
171 + }
172 + function attachChildFromRule(parentId, rule, stash) {
173 + const currentChildren = getDirectChildData(getContainer(parentId) ?? void 0);
174 + if (currentChildren.some((child) => child.elType === rule.child_type)) return;
175 + const { modelData, wasStashed } = resolveChildModelData(parentId, rule, stash);
176 + if (!addModelToParent(parentId, modelData, { at: resolveInsertIndex(rule.position, currentChildren) })) return;
177 + if (wasStashed) stash.clear(parentId, rule.child_type);
178 + requestNavigatorRefresh(parentId);
179 + }
180 + function detachChildFromRule(parentId, rule, stash) {
181 + const child = (getContainer(parentId) ?? void 0)?.children?.find((candidate) => candidate.model.get("elType") === rule.child_type);
182 + if (!child) return;
183 + const childSnapshot = child.model.toJSON();
184 + if (!removeModelFromParent(parentId, child.id)) return;
185 + if (rule.stash) stash.save(parentId, rule.child_type, childSnapshot);
186 + requestNavigatorRefresh(parentId);
187 + }
188 + function requestNavigatorRefresh(parentId) {
189 + if (typeof window === "undefined" || typeof window.dispatchEvent !== "function") return;
190 + window.dispatchEvent(new CustomEvent("elementor/navigator/refresh-children", { detail: { elementId: parentId } }));
191 + }
192 + function getDirectChildData(parent) {
193 + return (parent?.children ?? []).map((child) => child.model.toJSON());
194 + }
195 +
196 +//#endregion
197 +//#region packages/packages/libs/editor-elements/src/children-dependencies/reconcile-initial-children.ts
198 + function reconcileInitialChildren({ elementId, elementConfig, attributes }) {
199 + const stash = createChildrenStash();
200 + const rules = elementConfig?.children_dependencies;
201 + if (!rules?.length) return;
202 + const elements = [...attributes.elements ?? []];
203 + const settings = attributes.settings ?? {};
204 + rules.forEach((rule) => {
205 + const isMet = evaluateWhen(rule.when, settings);
206 + const existingIndex = elements.findIndex((element) => element.elType === rule.child_type);
207 + const isPresent = existingIndex >= 0;
208 + if (isMet && !isPresent) {
209 + const { modelData, wasStashed } = resolveChildModelData(elementId, rule, stash);
210 + const insertAt = resolveInsertIndex(rule.position, elements);
211 + elements.splice(insertAt, 0, modelData);
212 + if (wasStashed) stash.clear(elementId, rule.child_type);
213 + return;
214 + }
215 + if (!isMet && isPresent) {
216 + const [removed] = elements.splice(existingIndex, 1);
217 + if (rule.stash && removed) stash.save(elementId, rule.child_type, removed);
218 + }
219 + });
220 + attributes.elements = elements;
221 + }
222 +
223 +//#endregion
224 +//#region packages/packages/libs/editor-elements/src/sync/model-utils.ts
225 + function findChildRecursive(model, predicate) {
226 + const childModels = model.get("elements") ?? [];
227 + for (const childModel of childModels) {
228 + if (predicate(childModel)) return { model: childModel };
229 + const found = findChildRecursive(childModel, predicate);
230 + if (found) return found;
231 + }
232 + return null;
233 + }
234 + function getElementChildren(model, predicate) {
235 + return (model.get("elements") ?? []).filter((childModel) => !predicate || predicate(childModel)).map((childModel) => ({ model: childModel }));
236 + }
237 +
238 +//#endregion
239 +//#region packages/packages/libs/editor-elements/src/hooks/use-element-children.ts
240 + function toElementModel({ model }) {
241 + return {
242 + id: model.get("id"),
243 + editorSettings: model.get("editor_settings") ?? {}
244 + };
245 + }
246 + function useElementChildren(elementId, childrenTypes, { includeSelfAsParent = false } = {}) {
247 + return (0, _elementor_editor_v1_adapters.__privateUseListenTo)([
248 + (0, _elementor_editor_v1_adapters.v1ReadyEvent)(),
249 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/create"),
250 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/delete"),
251 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/update"),
252 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/set-settings")
253 + ], () => {
254 + const model = getContainer(elementId)?.model;
255 + if (!model) return {};
256 + return Object.entries(childrenTypes).reduce((acc, [parentType, childType]) => {
257 + const parent = includeSelfAsParent && model.get("elType") === parentType ? { model } : findChildRecursive(model, (m) => m.get("elType") === parentType);
258 + if (!parent) {
259 + acc[childType] = [];
260 + return acc;
261 + }
262 + acc[childType] = getElementChildren(parent.model, (m) => m.get("elType") === childType).map(toElementModel);
263 + return acc;
264 + }, {});
265 + }, [elementId]);
266 + }
267 +
268 +//#endregion
269 +//#region packages/packages/libs/editor-elements/src/sync/get-element-editor-settings.ts
270 + function getElementEditorSettings(elementId) {
271 + return getContainer(elementId)?.model.get("editor_settings") ?? {};
272 + }
273 +
274 +//#endregion
275 +//#region packages/packages/libs/editor-elements/src/hooks/use-element-editor-settings.ts
276 + var useElementEditorSettings = (elementId) => {
277 + return (0, _elementor_editor_v1_adapters.__privateUseListenTo)((0, _elementor_editor_v1_adapters.windowEvent)("elementor/element/update_editor_settings"), () => getElementEditorSettings(elementId), [elementId]);
278 + };
279 +
280 +//#endregion
281 +//#region packages/packages/libs/editor-elements/src/hooks/use-parent-element.ts
282 + function useParentElement(elementId) {
283 + return (0, _elementor_editor_v1_adapters.__privateUseListenTo)([(0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/create")], () => {
284 + if (!elementId) return null;
285 + const element = window?.elementor?.getContainer?.(elementId);
286 + if (!element) return null;
287 + return element.parent;
288 + }, [elementId]);
289 + }
290 +
291 +//#endregion
292 +//#region packages/packages/libs/editor-elements/src/sync/get-widgets-cache.ts
293 + function getWidgetsCache() {
294 + return window?.elementor?.widgetsCache || null;
295 + }
296 +
297 +//#endregion
298 +//#region packages/packages/libs/editor-elements/src/sync/get-element-type.ts
299 + function getElementType(type) {
300 + if (!type) return null;
301 + const elementType = getWidgetsCache()?.[type];
302 + if (!elementType?.atomic_controls) return null;
303 + if (!elementType?.atomic_props_schema) return null;
304 + return {
305 + key: type,
306 + controls: elementType.atomic_controls,
307 + propsSchema: elementType.atomic_props_schema,
308 + dependenciesPerTargetMapping: elementType.dependencies_per_target_mapping ?? {},
309 + title: elementType.title,
310 + styleStates: elementType.atomic_style_states ?? [],
311 + pseudoStates: elementType.atomic_pseudo_states ?? []
312 + };
313 + }
314 +
315 +//#endregion
316 +//#region packages/packages/libs/editor-elements/src/sync/get-selected-elements.ts
317 + function getSelectedElements() {
318 + return (window.elementor?.selection?.getElements?.() ?? []).reduce((acc, el) => {
319 + const type = el.model.get("widgetType") || el.model.get("elType");
320 + if (type) acc.push({
321 + id: el.model.get("id"),
322 + type
323 + });
324 + return acc;
325 + }, []);
326 + }
327 + function getSelectedElement() {
328 + const elements = getSelectedElements();
329 + const [element] = elements;
330 + const elementType = getElementType(element?.type);
331 + if (elements.length !== 1 || !elementType || !element) return {
332 + element: null,
333 + elementType: null
334 + };
335 + return {
336 + element,
337 + elementType
338 + };
339 + }
340 +
341 +//#endregion
342 +//#region packages/packages/libs/editor-elements/src/hooks/use-selected-element.ts
343 + function useSelectedElement() {
344 + return (0, _elementor_editor_v1_adapters.__privateUseListenTo)([
345 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/select"),
346 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/deselect"),
347 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/select-all"),
348 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/deselect-all")
349 + ], getSelectedElement);
350 + }
351 +
352 +//#endregion
353 +//#region packages/packages/libs/editor-elements/src/sync/get-element-setting.ts
354 + var getElementSetting = (elementId, settingKey) => {
355 + return getContainer(elementId)?.settings?.get(settingKey) ?? null;
356 + };
357 + var getElementSettings = (elementId, settingKey) => {
358 + return Object.fromEntries(settingKey.map((key) => [key, getElementSetting(elementId, key)]));
359 + };
360 +
361 +//#endregion
362 +//#region packages/packages/libs/editor-elements/src/hooks/use-selected-element-settings.ts
363 + function useSelectedElementSettings() {
364 + return (0, _elementor_editor_v1_adapters.__privateUseListenTo)([
365 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/select"),
366 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/deselect"),
367 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/select-all"),
368 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/deselect-all"),
369 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/set-settings")
370 + ], () => {
371 + const { element, elementType } = getSelectedElement();
372 + if (!element || !elementType) return {
373 + element: null,
374 + elementType: null,
375 + settings: null
376 + };
377 + return {
378 + element,
379 + elementType,
380 + settings: getElementSettings(element.id, Object.keys(elementType.propsSchema))
381 + };
382 + });
383 + }
384 +
385 +//#endregion
386 +//#region packages/packages/libs/editor-elements/src/sync/create-element.ts
387 + function createElement({ container, model, options }) {
388 + return (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/elements/create", {
389 + container,
390 + model,
391 + options: {
392 + edit: false,
393 + ...options
394 + }
395 + });
396 + }
397 +
398 +//#endregion
399 +//#region packages/packages/libs/editor-elements/src/sync/delete-element.ts
400 + function deleteElement({ container, options = {} }) {
401 + (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/elements/delete", {
402 + container,
403 + options
404 + });
405 + }
406 +
407 +//#endregion
408 +//#region packages/packages/libs/editor-elements/src/sync/create-elements.ts
409 + var createElements = ({ elements, title, subtitle = (0, _wordpress_i18n.__)("Item added", "elementor") }) => {
410 + return (0, _elementor_editor_v1_adapters.undoable)({
411 + do: ({ elements: elementsParam }) => {
412 + const createdElements = [];
413 + elementsParam.forEach(({ container, options, ...elementParams }) => {
414 + const parentContainer = container.lookup?.() ?? container;
415 + if (!parentContainer) throw new Error("Parent container not found");
416 + const element = createElement({
417 + container: parentContainer,
418 + ...elementParams,
419 + options: {
420 + ...options,
421 + useHistory: false
422 + }
423 + });
424 + createdElements.push({
425 + container: element,
426 + parentContainer,
427 + model: element.model?.toJSON() || {},
428 + options,
429 + containerId: element.id,
430 + parentContainerId: parentContainer.id
431 + });
432 + });
433 + return { createdElements };
434 + },
435 + undo: (_, { createdElements }) => {
436 + [...createdElements].reverse().forEach(({ container, containerId, parentContainerId }) => {
437 + const freshContainer = resolveContainer(container, containerId);
438 + if (freshContainer) {
439 + deleteElement({
440 + container: freshContainer,
441 + options: { useHistory: false }
442 + });
443 + return;
444 + }
445 + removeModelFromParent(parentContainerId, containerId);
446 + });
447 + },
448 + redo: (_, { createdElements }) => {
449 + const newElements = [];
450 + createdElements.forEach(({ parentContainer, parentContainerId, model, options }) => {
451 + const freshParent = resolveContainer(parentContainer, parentContainerId);
452 + if (freshParent) {
453 + const element = createElement({
454 + container: freshParent,
455 + model,
456 + options: {
457 + ...options,
458 + useHistory: false
459 + }
460 + });
461 + newElements.push({
462 + container: element,
463 + parentContainer: freshParent,
464 + model: element.model.toJSON(),
465 + options,
466 + containerId: element.id,
467 + parentContainerId: freshParent.id
468 + });
469 + return;
470 + }
471 + addModelToParent(parentContainerId, model);
472 + newElements.push({
473 + container: parentContainer,
474 + parentContainer,
475 + model,
476 + options,
477 + containerId: model.id ?? "",
478 + parentContainerId
479 + });
480 + });
481 + return { createdElements: newElements };
482 + }
483 + }, {
484 + title,
485 + subtitle
486 + })({ elements });
487 + };
488 +
489 +//#endregion
490 +//#region packages/packages/libs/editor-elements/src/sync/drop-element.ts
491 + function dropElement({ containerId, model, options }) {
492 + const container = getContainer(containerId);
493 + if (!container) throw new Error(`Container with ID "${containerId}" not found`);
494 + return (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("preview/drop", {
495 + container,
496 + model,
497 + options
498 + });
499 + }
500 +
501 +//#endregion
502 +//#region packages/packages/libs/editor-elements/src/sync/duplicate-element.ts
503 + function duplicateElement({ element, options = {} }) {
504 + const currentIndex = element.view?._index ?? 0;
505 + return (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/elements/duplicate", {
506 + container: element,
507 + options: {
508 + at: options.clone !== false ? currentIndex + 1 : void 0,
509 + edit: false,
510 + ...options
511 + }
512 + });
513 + }
514 +
515 +//#endregion
516 +//#region packages/packages/libs/editor-elements/src/sync/duplicate-elements.ts
517 + var duplicateElements = ({ elementIds, title, subtitle = (0, _wordpress_i18n.__)("Item duplicated", "elementor"), onDuplicateElements, onRestoreElements }) => {
518 + return (0, _elementor_editor_v1_adapters.undoable)({
519 + do: ({ elementIds: elementIdsToDuplicate }) => {
520 + onDuplicateElements?.();
521 + const duplicatedElements = [];
522 + elementIdsToDuplicate.forEach((elementId) => {
523 + const originalContainer = getContainer(elementId);
524 + if (!originalContainer?.parent) return;
525 + const duplicatedElement = duplicateElement({
526 + element: originalContainer,
527 + options: { useHistory: false }
528 + });
529 + if (!duplicatedElement.parent) return;
530 + duplicatedElements.push({
531 + container: duplicatedElement,
532 + parentContainer: duplicatedElement.parent,
533 + model: duplicatedElement.model.toJSON(),
534 + at: duplicatedElement.view?._index,
535 + containerId: duplicatedElement.id,
536 + parentContainerId: duplicatedElement.parent.id
537 + });
538 + });
539 + return { duplicatedElements };
540 + },
541 + undo: (_, { duplicatedElements }) => {
542 + onRestoreElements?.();
543 + [...duplicatedElements].reverse().forEach(({ container, containerId, parentContainerId }) => {
544 + const freshContainer = resolveContainer(container, containerId);
545 + if (freshContainer) {
546 + deleteElement({
547 + container: freshContainer,
548 + options: { useHistory: false }
549 + });
550 + return;
551 + }
552 + removeModelFromParent(parentContainerId, containerId);
553 + });
554 + },
555 + redo: (_, { duplicatedElements: previousElements }) => {
556 + onDuplicateElements?.();
557 + const duplicatedElements = [];
558 + previousElements.forEach(({ parentContainer, parentContainerId, model, at }) => {
559 + const freshParent = resolveContainer(parentContainer, parentContainerId);
560 + if (freshParent) {
561 + const createdElement = createElement({
562 + container: freshParent,
563 + model,
564 + options: {
565 + useHistory: false,
566 + clone: false,
567 + at
568 + }
569 + });
570 + duplicatedElements.push({
571 + container: createdElement,
572 + parentContainer: freshParent,
573 + model,
574 + at,
575 + containerId: createdElement.id,
576 + parentContainerId: freshParent.id
577 + });
578 + return;
579 + }
580 + addModelToParent(parentContainerId, model, { at });
581 + duplicatedElements.push({
582 + container: parentContainer,
583 + parentContainer,
584 + model,
585 + at,
586 + containerId: model.id ?? "",
587 + parentContainerId
588 + });
589 + });
590 + return { duplicatedElements };
591 + }
592 + }, {
593 + title,
594 + subtitle
595 + })({ elementIds });
596 + };
597 +
598 +//#endregion
599 +//#region packages/packages/libs/editor-elements/src/sync/get-preview-element-dom.ts
600 + function getPreviewElementDOM(id) {
601 + try {
602 + const fromContainer = getContainer(id)?.view?.el;
603 + if (fromContainer) return fromContainer;
604 + return queryPreviewDOMByElementId(id);
605 + } catch {
606 + return null;
607 + }
608 + }
609 + function queryPreviewDOMByElementId(id) {
610 + const previewDocument = window.elementor?.getPreviewContainer?.()?.view?.el?.ownerDocument;
611 + if (!previewDocument) return null;
612 + return previewDocument.querySelector(`[data-id="${id}"]`);
613 + }
614 +
615 +//#endregion
616 +//#region packages/packages/libs/editor-elements/src/sync/get-current-document-container.ts
617 + function getCurrentDocumentContainer() {
618 + return window.elementor?.documents?.getCurrent?.()?.container ?? null;
619 + }
620 +
621 +//#endregion
622 +//#region packages/packages/libs/editor-elements/src/sync/get-current-document-id.ts
623 + function getCurrentDocumentId() {
624 + const extendedWindow = window;
625 + try {
626 + return extendedWindow.elementor?.documents?.getCurrentId?.() ?? null;
627 + } catch {
628 + return null;
629 + }
630 + }
631 +
632 +//#endregion
633 +//#region packages/packages/libs/editor-elements/src/sync/get-element-icon.ts
634 + function getElementIcon(elementId) {
635 + const container = getContainer(elementId);
636 + const type = container?.model.get("widgetType") || container?.model.get("elType");
637 + if (!type) return null;
638 + return getWidgetsCache()?.[type]?.icon ?? null;
639 + }
640 +
641 +//#endregion
642 +//#region packages/packages/libs/editor-elements/src/errors.ts
643 + var ElementNotFoundError = (0, _elementor_utils.createError)({
644 + code: "element_not_found",
645 + message: "Element not found."
646 + });
647 + var StyleNotFoundError = (0, _elementor_utils.createError)({
648 + code: "style_not_found",
649 + message: "Style not found."
650 + });
651 + var ElementTypeNotExistsError = (0, _elementor_utils.createError)({
652 + code: "element_type_not_exists",
653 + message: "Element type does not exist."
654 + });
655 + var ElementLabelNotExistsError = (0, _elementor_utils.createError)({
656 + code: "element_label_not_exists",
657 + message: "Element label does not exist."
658 + });
659 + var ElementParentNotFoundError = (0, _elementor_utils.createError)({
660 + code: "element_parent_not_found",
661 + message: "Element parent not found."
662 + });
663 + var ElementIndexNotFoundError = (0, _elementor_utils.createError)({
664 + code: "element_index_not_found",
665 + message: "Element index not found."
666 + });
667 +
668 +//#endregion
669 +//#region packages/packages/libs/editor-elements/src/sync/get-element-label.ts
670 + function getElementLabel(elementId) {
671 + if (!elementId) elementId = getSelectedElements()?.[0]?.id;
672 + const container = getContainer(elementId);
673 + const type = container?.model.get("widgetType") || container?.model.get("elType");
674 + if (!type) throw new ElementTypeNotExistsError({ context: { elementId } });
675 + const label = getWidgetsCache()?.[type]?.title;
676 + if (!label) throw new ElementLabelNotExistsError({ context: { elementType: type } });
677 + return label;
678 + }
679 +
680 +//#endregion
681 +//#region packages/packages/libs/editor-elements/src/sync/get-element-title.ts
682 + function extractString(value) {
683 + if (typeof value === "string") return value || null;
684 + if (value && typeof value === "object" && "value" in value && typeof value.value === "string") return value.value || null;
685 + return null;
686 + }
687 + function getElementTitle(elementId) {
688 + const editorTitle = extractString(getElementEditorSettings(elementId)?.title);
689 + if (editorTitle) return editorTitle;
690 + const legacyTitle = extractString(getElementSetting(elementId, "_title"));
691 + if (legacyTitle) return legacyTitle;
692 + const presetTitle = extractString(getElementSetting(elementId, "presetTitle"));
693 + if (presetTitle) return presetTitle;
694 + try {
695 + return getElementLabel(elementId);
696 + } catch {
697 + return null;
698 + }
699 + }
700 +
701 +//#endregion
702 +//#region packages/packages/libs/editor-elements/src/sync/get-element-styles.ts
703 + var getElementStyles = (elementID) => {
704 + return getContainer(elementID)?.model.get("styles") || null;
705 + };
706 +
707 +//#endregion
708 +//#region packages/packages/libs/editor-elements/src/sync/get-all-descendants.ts
709 + function getAllDescendants(container) {
710 + return [container, ...(container.children ?? []).flatMap((child) => getAllDescendants(child))];
711 + }
712 +
713 +//#endregion
714 +//#region packages/packages/libs/editor-elements/src/sync/get-elements.ts
715 + function getElements(root) {
716 + const container = root ? getContainer(root) : getCurrentDocumentContainer();
717 + if (!container) return [];
718 + return [container, ...[...container.model.get("elements") ?? []].flatMap((childModel) => getElements(childModel.get("id")))];
719 + }
720 +
721 +//#endregion
722 +//#region packages/packages/libs/editor-elements/src/sync/move-element.ts
723 + function moveElement({ element, targetContainer, options = {} }) {
724 + const resolvedElement = element.lookup?.();
725 + const resolvedTarget = targetContainer.lookup?.();
726 + if (!resolvedElement) throw new Error(`Element not found: ${element.id}`);
727 + if (!resolvedTarget) throw new Error(`Target container not found: ${targetContainer.id}`);
728 + const modelToRecreate = resolvedElement.model.toJSON();
729 + deleteElement({
730 + container: resolvedElement,
731 + options: {
732 + ...options,
733 + useHistory: false
734 + }
735 + });
736 + return createElement({
737 + container: resolvedTarget,
738 + model: modelToRecreate,
739 + options: {
740 + edit: false,
741 + ...options,
742 + useHistory: false
743 + }
744 + });
745 + }
746 +
747 +//#endregion
748 +//#region packages/packages/libs/editor-elements/src/sync/move-elements.ts
749 + var moveElements = ({ moves: movesToMake, title, subtitle = (0, _wordpress_i18n.__)("Elements moved", "elementor"), onMoveElements, onRestoreElements }) => {
750 + return (0, _elementor_editor_v1_adapters.undoable)({
751 + do: ({ moves }) => {
752 + const movedElements = [];
753 + onMoveElements?.();
754 + moves.forEach(({ element, targetContainer, options }) => {
755 + const sourceElement = element.lookup?.() ?? element;
756 + const target = targetContainer.lookup?.() ?? targetContainer;
757 + if (!sourceElement) throw new Error("Element not found");
758 + if (!target) throw new Error("Target container not found");
759 + if (!sourceElement.parent) throw new Error("Element has no parent container");
760 + const originalContainer = sourceElement.parent;
761 + const originalIndex = originalContainer.children?.indexOf(sourceElement) ?? -1;
762 + const newElement = moveElement({
763 + element: sourceElement,
764 + targetContainer: target,
765 + options: {
766 + ...options,
767 + useHistory: false
768 + }
769 + });
770 + movedElements.push({
771 + element: newElement,
772 + originalContainer,
773 + originalIndex,
774 + targetContainer: target,
775 + options,
776 + elementId: newElement.id,
777 + originalContainerId: originalContainer.id,
778 + targetContainerId: target.id
779 + });
780 + });
781 + return { movedElements };
782 + },
783 + undo: (_, { movedElements }) => {
784 + onRestoreElements?.();
785 + [...movedElements].reverse().forEach(({ element, elementId, originalContainer, originalContainerId, originalIndex }) => {
786 + const freshElement = resolveContainer(element, elementId);
787 + const freshOriginalContainer = resolveContainer(originalContainer, originalContainerId);
788 + if (!freshElement || !freshOriginalContainer) return;
789 + moveElement({
790 + element: freshElement,
791 + targetContainer: freshOriginalContainer,
792 + options: {
793 + useHistory: false,
794 + at: originalIndex >= 0 ? originalIndex : void 0
795 + }
796 + });
797 + });
798 + },
799 + redo: (_, { movedElements }) => {
800 + const newMovedElements = [];
801 + onMoveElements?.();
802 + movedElements.forEach(({ element, elementId, originalContainer, originalContainerId, originalIndex, targetContainer, targetContainerId, options }) => {
803 + const freshElement = resolveContainer(element, elementId);
804 + const freshOriginalContainer = resolveContainer(originalContainer, originalContainerId);
805 + const freshTarget = resolveContainer(targetContainer, targetContainerId);
806 + if (!freshElement || !freshOriginalContainer || !freshTarget) return;
807 + const newElement = moveElement({
808 + element: freshElement,
809 + targetContainer: freshTarget,
810 + options: {
811 + ...options,
812 + useHistory: false
813 + }
814 + });
815 + newMovedElements.push({
816 + element: newElement,
817 + originalContainer: freshOriginalContainer,
818 + originalIndex,
819 + targetContainer: freshTarget,
820 + options,
821 + elementId: newElement.id,
822 + originalContainerId: freshOriginalContainer.id,
823 + targetContainerId: freshTarget.id
824 + });
825 + });
826 + return { movedElements: newMovedElements };
827 + }
828 + }, {
829 + title,
830 + subtitle
831 + })({ moves: movesToMake });
832 + };
833 +
834 +//#endregion
835 +//#region packages/packages/libs/editor-elements/src/sync/remove-elements.ts
836 + var removeElements = ({ elementIds, title, subtitle = (0, _wordpress_i18n.__)("Item removed", "elementor"), onRemoveElements, onRestoreElements }) => {
837 + return (0, _elementor_editor_v1_adapters.undoable)({
838 + do: ({ elementIds: elementIdsParam }) => {
839 + const removedElements = [];
840 + elementIdsParam.forEach((elementId) => {
841 + const container = getContainer(elementId);
842 + if (container?.parent) removedElements.push({
843 + container,
844 + parent: container.parent,
845 + model: container.model.toJSON(),
846 + at: container.view?._index ?? 0,
847 + containerId: container.id,
848 + parentId: container.parent.id
849 + });
850 + });
851 + onRemoveElements?.();
852 + removedElements.forEach(({ container }) => {
853 + deleteElement({
854 + container,
855 + options: { useHistory: false }
856 + });
857 + });
858 + return { removedElements };
859 + },
860 + undo: (_, { removedElements }) => {
861 + onRestoreElements?.();
862 + [...removedElements].reverse().forEach(({ parent, parentId, model, at }) => {
863 + const freshParent = resolveContainer(parent, parentId);
864 + if (freshParent) {
865 + createElement({
866 + container: freshParent,
867 + model,
868 + options: {
869 + useHistory: false,
870 + at
871 + }
872 + });
873 + return;
874 + }
875 + addModelToParent(parentId, model, { at });
876 + });
877 + },
878 + redo: (_, { removedElements }) => {
879 + onRemoveElements?.();
880 + const newRemovedElements = [];
881 + removedElements.forEach(({ container, parent, model, at, containerId, parentId }) => {
882 + const freshContainer = resolveContainer(container, containerId);
883 + const freshParent = resolveContainer(parent, parentId);
884 + if (freshContainer && freshParent) {
885 + deleteElement({
886 + container: freshContainer,
887 + options: { useHistory: false }
888 + });
889 + newRemovedElements.push({
890 + container: freshContainer,
891 + parent: freshParent,
892 + model,
893 + at,
894 + containerId,
895 + parentId
896 + });
897 + return;
898 + }
899 + removeModelFromParent(parentId, containerId);
900 + newRemovedElements.push({
901 + container,
902 + parent,
903 + model,
904 + at,
905 + containerId,
906 + parentId
907 + });
908 + });
909 + return { removedElements: newRemovedElements };
910 + }
911 + }, {
912 + title,
913 + subtitle
914 + })({ elementIds });
915 + };
916 +
917 +//#endregion
918 +//#region packages/packages/libs/editor-elements/src/sync/replace-element.ts
919 + var replaceElement = ({ currentElementId, newElement, withHistory = true }) => {
920 + const currentElementContainer = getContainer(currentElementId);
921 + if (!currentElementContainer) throw new ElementNotFoundError({ context: { elementId: currentElementId } });
922 + const { container, index } = getNewElementContainer(currentElementContainer, newElement);
923 + const newElementInstance = createElement({
924 + container,
925 + model: newElement,
926 + options: {
927 + at: index,
928 + useHistory: withHistory
929 + }
930 + });
931 + deleteElement({
932 + container: currentElementContainer,
933 + options: { useHistory: withHistory }
934 + });
935 + return newElementInstance;
936 + };
937 + function getNewElementContainer(currentElementContainer, newElement) {
938 + const { parent } = currentElementContainer;
939 + if (!parent) throw new ElementParentNotFoundError({ context: { elementId: currentElementContainer.id } });
940 + const elementIndex = currentElementContainer.view?._index ?? 0;
941 + if (elementIndex === -1) throw new ElementIndexNotFoundError({ context: { elementId: currentElementContainer.id } });
942 + let location = {
943 + container: parent,
944 + index: elementIndex
945 + };
946 + if (parent.id === "document" && newElement.elType === "widget") location = createWrapperForWidget(parent, elementIndex);
947 + return location;
948 + }
949 + var DEFAULT_CONTAINER_TYPE = "e-flexbox";
950 + function createWrapperForWidget(parent, elementIndex) {
951 + return {
952 + container: createElement({
953 + container: parent,
954 + model: { elType: DEFAULT_CONTAINER_TYPE },
955 + options: {
956 + at: elementIndex,
957 + useHistory: false
958 + }
959 + }),
960 + index: 0
961 + };
962 + }
963 +
964 +//#endregion
965 +//#region packages/packages/libs/editor-elements/src/sync/update-element-editor-settings.ts
966 + var updateElementEditorSettings = ({ elementId, settings }) => {
967 + const element = getContainer(elementId);
968 + if (!element) throw new Error(`Element with id ${elementId} not found`);
969 + const editorSettings = element.model.get("editor_settings") ?? {};
970 + element.model.set("editor_settings", {
971 + ...editorSettings,
972 + ...settings
973 + });
974 + (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/save/set-is-modified", { status: true }, { internal: true });
975 + };
976 +
977 +//#endregion
978 +//#region packages/packages/libs/editor-elements/src/sync/update-element-settings.ts
979 + var updateElementSettings = ({ id, props, withHistory = true }) => {
980 + const container = getContainer(id);
981 + if (!container) return;
982 + const args = {
983 + container,
984 + settings: { ...props }
985 + };
986 + if (withHistory) (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/elements/settings", args);
987 + else (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/elements/set-settings", args, { internal: true });
988 + };
989 +
990 +//#endregion
991 +//#region packages/packages/libs/editor-elements/src/link-restriction.ts
992 + var ANCHOR_SELECTOR = "a, [data-action-link]";
993 + function getLinkInLinkRestriction(elementId, resolvedValue) {
994 + const anchoredDescendantId = getAnchoredDescendantId(elementId);
995 + if (anchoredDescendantId) return {
996 + shouldRestrict: true,
997 + reason: "descendant",
998 + elementId: anchoredDescendantId
999 + };
1000 + if (checkForInlineLink(elementId, resolvedValue)) return {
1001 + shouldRestrict: true,
1002 + reason: "descendant",
1003 + elementId
1004 + };
1005 + const ancestor = getAnchoredAncestorId(elementId);
1006 + if (ancestor) return {
1007 + shouldRestrict: true,
1008 + reason: "ancestor",
1009 + elementId: ancestor
1010 + };
1011 + return { shouldRestrict: false };
1012 + }
1013 + function getAnchoredDescendantId(elementId) {
1014 + const element = getElementDOM(elementId);
1015 + if (!element) return null;
1016 + for (const childAnchorElement of Array.from(element.querySelectorAll(ANCHOR_SELECTOR))) {
1017 + const childElementId = findElementIdOf(childAnchorElement);
1018 + if (childElementId !== elementId) return childElementId;
1019 + }
1020 + return null;
1021 + }
1022 + function getAnchoredAncestorId(elementId) {
1023 + const element = getElementDOM(elementId);
1024 + if (!element || element.parentElement === null) return null;
1025 + const parentAnchor = element.parentElement.closest(ANCHOR_SELECTOR);
1026 + return parentAnchor ? findElementIdOf(parentAnchor) : null;
1027 + }
1028 + function isElementAnchored(elementId) {
1029 + const element = getElementDOM(elementId);
1030 + if (!element) return false;
1031 + if (element.matches(ANCHOR_SELECTOR)) return true;
1032 + return doesElementContainAnchor(element);
1033 + }
1034 + function doesElementContainAnchor(element) {
1035 + for (const child of Array.from(element.children)) {
1036 + if (isElementorElement(child)) continue;
1037 + if (child.matches(ANCHOR_SELECTOR)) return true;
1038 + if (doesElementContainAnchor(child)) return true;
1039 + }
1040 + return false;
1041 + }
1042 + function findElementIdOf(element) {
1043 + return element.closest("[data-id]")?.dataset.id || null;
1044 + }
1045 + function checkForInlineLink(elementId, resolvedValue) {
1046 + const element = getElementDOM(elementId);
1047 + if (!element) return false;
1048 + if (element.matches(ANCHOR_SELECTOR)) return false;
1049 + if ((resolvedValue ?? getElementSetting(elementId, "link")?.value)?.destination) return false;
1050 + return element.querySelector(ANCHOR_SELECTOR) !== null;
1051 + }
1052 + function getElementDOM(id) {
1053 + return getPreviewElementDOM(id);
1054 + }
1055 + function isElementorElement(element) {
1056 + return element.hasAttribute("data-id");
1057 + }
1058 +
1059 +//#endregion
1060 +//#region packages/packages/libs/editor-elements/src/styles/consts.ts
1061 + var ELEMENT_STYLE_CHANGE_EVENT = "elementor/editor-v2/editor-elements/style";
1062 + var styleRerenderEvents = [
1063 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/create"),
1064 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/duplicate"),
1065 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/import"),
1066 + (0, _elementor_editor_v1_adapters.commandEndEvent)("document/elements/paste"),
1067 + (0, _elementor_editor_v1_adapters.windowEvent)(ELEMENT_STYLE_CHANGE_EVENT)
1068 + ];
1069 +
1070 +//#endregion
1071 +//#region packages/packages/libs/editor-elements/src/styles/mutate-element-styles.ts
1072 + function mutateElementStyles(elementId, mutator) {
1073 + const container = getContainer(elementId);
1074 + if (!container) throw new ElementNotFoundError({ context: { elementId } });
1075 + const oldIds = Object.keys(container.model.get("styles") ?? {});
1076 + const styles = mutateStyles(container, mutator);
1077 + clearRemovedClasses(container, {
1078 + oldIds,
1079 + newIds: Object.keys(styles)
1080 + });
1081 + notifyChanges();
1082 + return styles;
1083 + }
1084 + function mutateStyles(container, mutator) {
1085 + const styles = structuredClone(container.model.get("styles")) ?? {};
1086 + const entries = Object.entries(mutator(styles)).map(([styleId, style]) => {
1087 + style.variants = removeEmptyVariants(style);
1088 + return [styleId, style];
1089 + }).filter(([, style]) => {
1090 + return !isStyleEmpty(style);
1091 + });
1092 + const mutatedStyles = Object.fromEntries(entries);
1093 + container.model.set("styles", mutatedStyles);
1094 + return mutatedStyles;
1095 + }
1096 + function removeEmptyVariants(style) {
1097 + return style.variants.filter(({ props, custom_css: customCss }) => Object.keys(props).length > 0 || customCss?.raw);
1098 + }
1099 + function isStyleEmpty(style) {
1100 + return style.variants.length === 0;
1101 + }
1102 + function clearRemovedClasses(container, { oldIds, newIds }) {
1103 + const removedIds = oldIds.filter((id) => !newIds.includes(id));
1104 + if (!removedIds.length) return;
1105 + const classesProps = structuredClone(getClassesProps(container));
1106 + classesProps.forEach(([, prop]) => {
1107 + prop.value = prop.value.filter((value) => !removedIds.includes(value));
1108 + });
1109 + updateElementSettings({
1110 + id: container.id,
1111 + props: Object.fromEntries(classesProps),
1112 + withHistory: false
1113 + });
1114 + }
1115 + function getClassesProps(container) {
1116 + return Object.entries(container.settings.toJSON()).filter((prop) => {
1117 + const [, value] = prop;
1118 + return _elementor_editor_props.classesPropTypeUtil.isValid(value);
1119 + });
1120 + }
1121 + function notifyChanges() {
1122 + dispatchChangeEvent();
1123 + (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/save/set-is-modified", { status: true }, { internal: true });
1124 + }
1125 + function dispatchChangeEvent() {
1126 + window.dispatchEvent(new CustomEvent(ELEMENT_STYLE_CHANGE_EVENT));
1127 + }
1128 +
1129 +//#endregion
1130 +//#region packages/packages/libs/editor-elements/src/styles/create-element-style.ts
1131 + function createElementStyle({ styleId, elementId, classesProp, label, meta, props, custom_css: customCss = null, additionalVariants = [] }) {
1132 + let id = styleId;
1133 + mutateElementStyles(elementId, (styles) => {
1134 + id ?? (id = (0, _elementor_editor_styles.generateId)(`e-${elementId}-`, Object.keys(styles)));
1135 + const variants = [{
1136 + meta,
1137 + props,
1138 + custom_css: customCss
1139 + }, ...additionalVariants];
1140 + styles[id] = {
1141 + id,
1142 + label,
1143 + type: "class",
1144 + variants
1145 + };
1146 + addStyleToClassesProp(elementId, classesProp, id);
1147 + return styles;
1148 + });
1149 + return id;
1150 + }
1151 + function addStyleToClassesProp(elementId, classesProp, styleId) {
1152 + const base = getElementSetting(elementId, classesProp);
1153 + const classesPropValue = _elementor_editor_props.classesPropTypeUtil.create((prev) => {
1154 + return [...prev ?? [], styleId];
1155 + }, { base });
1156 + updateElementSettings({
1157 + id: elementId,
1158 + props: { [classesProp]: classesPropValue },
1159 + withHistory: false
1160 + });
1161 + }
1162 + function shouldCreateNewLocalStyle(payload) {
1163 + return !payload?.styleId && !payload?.provider;
1164 + }
1165 +
1166 +//#endregion
1167 +//#region packages/packages/libs/editor-elements/src/styles/delete-element-style.ts
1168 + function deleteElementStyle(elementId, styleId) {
1169 + mutateElementStyles(elementId, (styles) => {
1170 + delete styles[styleId];
1171 + return styles;
1172 + });
1173 + }
1174 +
1175 +//#endregion
1176 +//#region packages/packages/libs/editor-elements/src/styles/update-element-style.ts
1177 + function updateElementStyle(args) {
1178 + mutateElementStyles(args.elementId, (styles) => {
1179 + const style = styles[args.styleId];
1180 + if (!style) throw new StyleNotFoundError({ context: { styleId: args.styleId } });
1181 + const variant = (0, _elementor_editor_styles.getVariantByMeta)(style, args.meta);
1182 + const customCss = ("custom_css" in args ? args.custom_css : variant?.custom_css) ?? null;
1183 + if (variant) {
1184 + variant.props = (0, _elementor_editor_props.mergeProps)(variant.props, args.props);
1185 + variant.custom_css = customCss?.raw ? customCss : null;
1186 + } else style.variants.push({
1187 + meta: args.meta,
1188 + props: args.props,
1189 + custom_css: customCss
1190 + });
1191 + return styles;
1192 + });
1193 + }
1194 +
1195 +//#endregion
1196 +//#region packages/packages/libs/editor-elements/src/sync/get-element-interactions.ts
1197 + function getElementInteractions(elementId) {
1198 + const interactions = getContainer(elementId)?.model?.get("interactions");
1199 + if (typeof interactions === "string") return JSON.parse(interactions);
1200 + return interactions;
1201 + }
1202 +
1203 +//#endregion
1204 +//#region packages/packages/libs/editor-elements/src/utils/get-default-style-tag-from-preview.ts
1205 + var DEFAULT_STYLE_CLASS_PREFIX = "e-default-";
1206 + function parseDefaultStyleTagFromClassList(classList) {
1207 + for (const className of classList) if (className.startsWith("e-default-")) return className.slice(10);
1208 + return null;
1209 + }
1210 + function getDefaultStyleTagFromPreviewElement(elementId) {
1211 + const renderRoot = getAtomicElementRenderRoot(elementId);
1212 + if (!renderRoot) return null;
1213 + return parseDefaultStyleTagFromClassList(renderRoot.classList);
1214 + }
1215 + function getAtomicElementRenderRoot(elementId) {
1216 + const view = getContainerView(elementId);
1217 + if (view?.getDomElement) {
1218 + const domElement = view.getDomElement().get?.(0);
1219 + if (domElement) return domElement;
1220 + }
1221 + const wrapper = view?.el ?? getPreviewElementDOM(elementId);
1222 + if (!wrapper) return null;
1223 + if (wrapper.hasAttribute("data-id")) return wrapper;
1224 + const firstChild = wrapper.firstElementChild;
1225 + if (firstChild instanceof HTMLElement) return firstChild;
1226 + return wrapper;
1227 + }
1228 + function getContainerView(elementId) {
1229 + return getContainer(elementId)?.view ?? null;
1230 + }
1231 +
1232 +//#endregion
1233 +//#region packages/packages/libs/editor-elements/src/sync/update-element-interactions.ts
1234 + var updateElementInteractions = ({ elementId, interactions }) => {
1235 + const element = getContainer(elementId);
1236 + if (!element) throw new Error(`Element with id ${elementId} not found`);
1237 + element.model.set("interactions", interactions);
1238 + window.dispatchEvent(new CustomEvent("elementor/element/update_interactions"));
1239 + (0, _elementor_editor_v1_adapters.__privateRunCommandSync)("document/save/set-is-modified", { status: true }, { internal: true });
1240 + };
1241 + var playElementInteractions = (elementId, interactionId) => {
1242 + window.top?.dispatchEvent(new CustomEvent("atomic/play_interactions", { detail: {
1243 + elementId,
1244 + interactionId
1245 + } }));
1246 + };
1247 +
1248 +//#endregion
1249 +//#region packages/packages/libs/editor-elements/src/index.ts
1250 + var src_exports = /* @__PURE__ */ __exportAll({
1251 + DEFAULT_STYLE_CLASS_PREFIX: () => DEFAULT_STYLE_CLASS_PREFIX,
1252 + ELEMENT_STYLE_CHANGE_EVENT: () => ELEMENT_STYLE_CHANGE_EVENT,
1253 + addModelToParent: () => addModelToParent,
1254 + bindSettingsReconcile: () => bindSettingsReconcile,
1255 + createElement: () => createElement,
1256 + createElementStyle: () => createElementStyle,
1257 + createElements: () => createElements,
1258 + deleteElement: () => deleteElement,
1259 + deleteElementStyle: () => deleteElementStyle,
1260 + dropElement: () => dropElement,
1261 + duplicateElement: () => duplicateElement,
1262 + duplicateElements: () => duplicateElements,
1263 + evaluateWhen: () => evaluateWhen,
1264 + findChildRecursive: () => findChildRecursive,
1265 + findModelInDocument: () => findModelInDocument,
1266 + generateElementId: () => generateElementId,
1267 + getAllDescendants: () => getAllDescendants,
1268 + getAnchoredAncestorId: () => getAnchoredAncestorId,
1269 + getAnchoredDescendantId: () => getAnchoredDescendantId,
1270 + getContainer: () => getContainer,
1271 + getCurrentDocumentContainer: () => getCurrentDocumentContainer,
1272 + getCurrentDocumentId: () => getCurrentDocumentId,
1273 + getDefaultStyleTagFromPreviewElement: () => getDefaultStyleTagFromPreviewElement,
1274 + getElementChildrenWithFallback: () => getElementChildren,
1275 + getElementEditorSettings: () => getElementEditorSettings,
1276 + getElementIcon: () => getElementIcon,
1277 + getElementInteractions: () => getElementInteractions,
1278 + getElementLabel: () => getElementLabel,
1279 + getElementSetting: () => getElementSetting,
1280 + getElementSettings: () => getElementSettings,
1281 + getElementStyles: () => getElementStyles,
1282 + getElementTitle: () => getElementTitle,
1283 + getElementType: () => getElementType,
1284 + getElements: () => getElements,
1285 + getLinkInLinkRestriction: () => getLinkInLinkRestriction,
1286 + getPreviewElementDOM: () => getPreviewElementDOM,
1287 + getSelectedElements: () => getSelectedElements,
1288 + getWidgetsCache: () => getWidgetsCache,
1289 + isElementAnchored: () => isElementAnchored,
1290 + moveElement: () => moveElement,
1291 + moveElements: () => moveElements,
1292 + parseDefaultStyleTagFromClassList: () => parseDefaultStyleTagFromClassList,
1293 + playElementInteractions: () => playElementInteractions,
1294 + reconcileInitialChildren: () => reconcileInitialChildren,
1295 + removeElements: () => removeElements,
1296 + removeModelFromParent: () => removeModelFromParent,
1297 + replaceElement: () => replaceElement,
1298 + resolveContainer: () => resolveContainer,
1299 + resolveInsertIndex: () => resolveInsertIndex,
1300 + selectElement: () => selectElement,
1301 + shouldCreateNewLocalStyle: () => shouldCreateNewLocalStyle,
1302 + styleRerenderEvents: () => styleRerenderEvents,
1303 + updateElementEditorSettings: () => updateElementEditorSettings,
1304 + updateElementInteractions: () => updateElementInteractions,
1305 + updateElementSettings: () => updateElementSettings,
1306 + updateElementStyle: () => updateElementStyle,
1307 + useElementChildren: () => useElementChildren,
1308 + useElementEditorSettings: () => useElementEditorSettings,
1309 + useParentElement: () => useParentElement,
1310 + useSelectedElement: () => useSelectedElement,
1311 + useSelectedElementSettings: () => useSelectedElementSettings
1312 + });
1313 +
1314 +//#endregion
1315 +//#region \0elementor-package-library-entry
1316 + (window.elementorV2 = window.elementorV2 || {}).editorElements = src_exports;
1317 +
1318 +//#endregion
1319 +})(elementorV2.editorV1Adapters, elementorV2.session, elementorV2.editorProps, wp.i18n, elementorV2.utils, elementorV2.editorStyles);
1320 +window.elementorV2.editorElements?.init?.();
3 1321 //# sourceMappingURL=editor-elements.js.map