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.2 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 All 455 releases
← All changes | assets/js/packages/editor-components/editor-components.js +2933 -2 4.1.0-dev3 → 4.3.1 View file →
@@ -1,3 +1,2934 @@
1 -/*! For license information please see editor-components.js.LICENSE.txt */
2 -!function(){"use strict";var e={"./packages/packages/core/editor-components/src/api.ts":function(e,t,n){n.r(t),n.d(t,{apiClient:function(){return c},getParams:function(){return getParams}});var o=n("@elementor/editor-v1-adapters"),r=n("@elementor/http-client");const s="elementor/v1/components",getParams=e=>({action:"get_document_config",unique_id:`document-config-${e}`,data:{id:e}}),c={get:()=>(0,r.httpService)().get(`${s}`).then(e=>e.data.data),create:e=>(0,r.httpService)().post(`${s}`,e).then(e=>e.data.data),updateStatuses:(e,t)=>(0,r.httpService)().put(`${s}/status`,{ids:e,status:t}),getComponentConfig:e=>o.ajax.load(getParams(e)),invalidateComponentConfigCache:e=>o.ajax.invalidateCache(getParams(e)),getComponentLockStatus:async e=>await(0,r.httpService)().get(`${s}/lock-status`,{params:{componentId:e}}).then(e=>{const{is_current_user_allow_to_edit:t,locked_by:n}=e.data.data;return{isAllowedToSwitchDocument:t,lockedBy:n||""}}),lockComponent:async e=>await(0,r.httpService)().post(`${s}/lock`,{componentId:e}).then(e=>e.data),unlockComponent:async e=>await(0,r.httpService)().post(`${s}/unlock`,{componentId:e}).then(e=>e.data),getOverridableProps:async e=>await(0,r.httpService)().get(`${s}/overridable-props`,{params:{"componentIds[]":e}}).then(e=>e.data),updateArchivedComponents:async(e,t)=>await(0,r.httpService)().post(`${s}/archive`,{componentIds:e,status:t}).then(e=>e.data.data),updateComponentTitle:(e,t)=>(0,r.httpService)().post(`${s}/update-titles`,{components:e,status:t}).then(e=>e.data.data),validate:async e=>await(0,r.httpService)().post(`${s}/create-validate`,e).then(e=>e.data)}},"./packages/packages/core/editor-components/src/component-instance-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceTransformer:function(){return a}});var o=n("@elementor/editor-canvas"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts"),c=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts");const a=(0,o.createTransformer)(async({component_id:e,overrides:t})=>{const n=(0,s.selectUnpublishedComponents)((0,r.__getState)()).find(({uid:t})=>t===e),o=t?.reduce((e,t)=>({...e,...t}),{});if(n)return{elements:structuredClone(n.elements),overrides:o};if("number"!=typeof e)throw new Error(`Component ID "${e}" not valid.`);const a=await(0,c.getComponentDocumentData)(e);return{elements:a?.elements??[],overrides:o}})},"./packages/packages/core/editor-components/src/component-overridable-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentOverridableTransformer:function(){return r}});var o=n("@elementor/editor-canvas");const r=(0,o.createTransformer)((e,t)=>{const{overrides:n}=t.renderContext??{},r=n?.[e.override_key];if(r){return function isOriginValueOverride(e){return"override"===e.$$type}(e.origin_value)?function transformOverride(e,t,n){const r=o.settingsTransformersRegistry.get("override");if(!r)return null;const s=r(e.origin_value.value,t);if(!s)return null;const[c]=Object.keys(s);return{[c]:n}}(e,t,r):r}return e.origin_value})},"./packages/packages/core/editor-components/src/component-override-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentOverrideTransformer:function(){return r}});var o=n("@elementor/editor-canvas");const r=(0,o.createTransformer)(e=>{const{override_key:t,override_value:n}=e;return{[t]:n}})},"./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentSearch:function(){return ComponentSearch}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),c=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const ComponentSearch=()=>{const{inputValue:e,handleChange:t}=(0,a.useSearch)();return o.createElement(s.Stack,{direction:"row",gap:.5,sx:{width:"100%",px:2,py:1.5}},o.createElement(s.Box,{sx:{flexGrow:1}},o.createElement(s.TextField,{role:"search",fullWidth:!0,size:"tiny",value:e,placeholder:(0,c.__)("Search","elementor"),onChange:e=>t(e.target.value),InputProps:{startAdornment:o.createElement(s.InputAdornment,{position:"start"},o.createElement(r.SearchIcon,{fontSize:"tiny"}))}})))}},"./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentItem:function(){return a},ComponentName:function(){return ComponentName}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),c=n("@elementor/ui");function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},_extends.apply(null,arguments)}const a=(0,o.forwardRef)(({component:e,disabled:t=!0,draggable:n,onDragStart:r,onDragEnd:a,onClick:p,isEditing:l=!1,error:d=null,nameSlot:m,endSlot:u,...g},v)=>o.createElement(c.ListItemButton,_extends({disabled:t,draggable:n,onDragStart:r,onDragEnd:a,shape:"rounded",ref:v,sx:{border:"solid 1px",borderColor:"divider",py:.5,px:1,display:"flex",width:"100%",alignItems:"center",gap:1}},g),o.createElement(c.Box,{display:"flex",alignItems:"center",gap:1,minWidth:0,flexGrow:1,onClick:p},o.createElement(c.ListItemIcon,{size:"tiny"},o.createElement(s.ComponentsIcon,{fontSize:"tiny"})),o.createElement(i,{isActive:l,isError:!!d},o.createElement(c.Box,{display:"flex",flex:1,minWidth:0,flexGrow:1},m??o.createElement(ComponentName,{name:e.name})))),u)),i=(0,c.styled)(c.Box,{shouldForwardProp:e=>"isActive"!==e&&"isError"!==e})(({theme:e,isActive:t,isError:n})=>({display:"flex",width:"100%",flexGrow:1,borderRadius:e.spacing(.5),border:getIndicatorBorder({isActive:t,isError:n,theme:e}),padding:`0 ${e.spacing(1)}`,marginLeft:t?e.spacing(1):0,minWidth:0})),getIndicatorBorder=({isActive:e,isError:t,theme:n})=>t?`2px solid ${n.palette.error.main}`:e?`2px solid ${n.palette.secondary.main}`:"none";function ComponentName({name:e,editable:t}){return t?.isEditing?o.createElement(r.EditableField,_extends({ref:t.ref,as:c.Typography,variant:"caption"},t.getProps())):o.createElement(r.EllipsisWithTooltip,{title:e,as:c.Typography,variant:"caption",color:"text.primary"})}},"./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsList:function(){return ComponentsList},EmptySearchResult:function(){return EmptySearchResult},useFilteredComponents:function(){return useFilteredComponents}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),c=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-components/src/hooks/use-components.ts"),i=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),p=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),l=n("./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx"),m=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const u={fontSize:"0.875rem !important",fontWeight:"500 !important"};function ComponentsList(){const{components:e,isLoading:t,searchValue:n}=useFilteredComponents();if(t)return o.createElement(d.LoadingComponents,null);return!e?.length?n.length?o.createElement(EmptySearchResult,null):(0,p.isProOutdatedForComponents)()?o.createElement(ProOutdatedEmptyState,null):(0,p.isProComponentsSupported)()?o.createElement(EmptyState,null):o.createElement(ProUpgradeEmptyState,null):o.createElement(s.List,{sx:{display:"flex",flexDirection:"column",gap:1,px:2}},e.map(e=>o.createElement(l.ComponentItem,{key:e.uid,component:e})))}const ProUpgradeEmptyState=()=>o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,c.__)("Create Reusable Components","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:200}},(0,c.__)("Create design elements that sync across your entire site.","elementor"))),o.createElement(s.Button,{variant:"contained",color:"promotion",size:"small",startIcon:o.createElement(r.CrownFilledIcon,null),href:"https://go.elementor.com/go-pro-components/",target:"_blank",rel:"noopener noreferrer"},(0,c.__)("Upgrade now","elementor"))),ProOutdatedEmptyState=()=>o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4,maxWidth:268,m:"auto"},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,c.__)("Create Reusable Components","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary"},(0,c.__)("Create design elements that sync across your entire site.","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{mt:1}},(0,c.__)("To create components, update Elementor Pro to the latest version.","elementor"))),o.createElement(s.Button,{variant:"text",color:"info",size:"small",href:"/wp-admin/plugins.php",target:"_blank",rel:"noopener noreferrer"},(0,c.__)("Update Elementor Pro","elementor"))),EmptyState=()=>{const{canCreate:e}=(0,i.useComponentsPermissions)();return o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,c.__)("No components yet","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:200}},(0,c.__)("Components are reusable blocks that sync across your site.","elementor"),o.createElement("br",null),e?(0,c.__)("Create once, use everywhere.","elementor"):(0,c.__)("With your current role, you cannot create components. Contact an administrator to create one.","elementor")),o.createElement(s.Link,{href:"http://go.elementor.com/components-guide-article",target:"_blank",rel:"noopener noreferrer",variant:"caption",color:"info.main"},(0,c.__)("Learn more about components","elementor"))),e&&o.createElement(o.Fragment,null,o.createElement(s.Divider,{sx:{width:"100%"}}),o.createElement(s.Stack,{alignItems:"center",gap:1,width:"100%"},o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,c.__)("Create your first one:","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:228}},(0,c.__)('Right-click any div-block or flexbox on your canvas or structure and select "Create component"',"elementor")))))},EmptySearchResult=()=>{const{searchValue:e,clearSearch:t}=(0,m.useSearch)();return o.createElement(s.Stack,{color:"text.secondary",pt:5,alignItems:"center",gap:1,overflow:"hidden",justifySelf:"center"},o.createElement(r.ComponentsIcon,null),o.createElement(s.Box,{sx:{width:"100%"}},o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"inherit",sx:u},(0,c.__)("Sorry, nothing matched","elementor")),e&&o.createElement(s.Typography,{variant:"subtitle2",color:"inherit",sx:{...u,display:"flex",width:"100%",justifyContent:"center"}},o.createElement("span",null,"“"),o.createElement("span",{style:{maxWidth:"80%",overflow:"hidden",textOverflow:"ellipsis"}},e),o.createElement("span",null,"”."))),o.createElement(s.Typography,{align:"center",variant:"caption",color:"inherit"},(0,c.__)("Try something else.","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"inherit"},o.createElement(s.Link,{color:"secondary",variant:"caption",component:"button",onClick:t},(0,c.__)("Clear & try again","elementor"))))},useFilteredComponents=()=>{const{components:e,isLoading:t}=(0,a.useComponents)(),{searchValue:n}=(0,m.useSearch)();return{components:e.filter(e=>e.name.toLowerCase().includes(n.toLowerCase())),isLoading:t,searchValue:n}}},"./packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsProNotification:function(){return ComponentsProNotification},UPGRADE_URL:function(){return c}});var o=n("react"),r=n("@wordpress/i18n"),s=n("./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx");const c="https://go.elementor.com/go-pro-components-exist-footer/";function ComponentsProNotification(){return o.createElement(s.ComponentsUpgradeAlert,{title:(0,r.__)("Create new components","elementor"),description:(0,r.__)("Creating new components requires an active Pro subscription.","elementor"),upgradeUrl:c})}},"./packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpdateNotification:function(){return ComponentsUpdateNotification}});var o=n("react"),r=n("@wordpress/i18n"),s=n("./packages/packages/core/editor-components/src/components/components-update-alert.tsx");function ComponentsUpdateNotification(){return o.createElement(s.ComponentsUpdateAlert,{title:(0,r.__)("Create new Components","elementor"),description:(0,r.__)("To create new components, update Elementor Pro to the latest version.","elementor")})}},"./packages/packages/core/editor-components/src/components/components-tab/components.tsx":function(e,t,n){n.r(t),n.d(t,{Components:function(){return Components}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/ui"),c=n("./packages/packages/core/editor-components/src/hooks/use-components.ts"),a=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),i=n("./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx"),p=n("./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx"),l=n("./packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx"),m=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const u="components-full-height-panel",ComponentsContent=()=>{const{components:e,isLoading:t}=(0,c.useComponents)(),n=!t&&e.length>0,r=!(0,a.isProComponentsSupported)()&&n,m=(0,a.isProOutdatedForComponents)();return(0,o.useLayoutEffect)(()=>{let e=document.getElementById(u);return e||(e=document.createElement("style"),e.id=u,e.textContent="\n#elementor-panel-page-elements {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n}\n\n#elementor-panel-elements {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n}\n\n#elementor-panel-elements-wrapper {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n}\n",document.head.appendChild(e)),()=>{document.getElementById(u)?.remove()}},[]),o.createElement(s.Stack,{justifyContent:"space-between",sx:{flex:1,minHeight:0}},n&&o.createElement(i.ComponentSearch,null),o.createElement(p.ComponentsList,null),r&&(m?o.createElement(d.ComponentsUpdateNotification,null):o.createElement(l.ComponentsProNotification,null)))},Components=()=>o.createElement(r.ThemeProvider,null,o.createElement(m.SearchProvider,{localStorageKey:"elementor-components-search"},o.createElement(ComponentsContent,null)))},"./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx":function(e,t,n){n.r(t),n.d(t,{LoadingComponents:function(){return LoadingComponents}});var o=n("react"),r=n("@elementor/ui");const s=Array.from({length:3},(e,t)=>t),LoadingComponents=()=>o.createElement(r.Stack,{"aria-label":"Loading components",gap:1.5,sx:{pointerEvents:"none",position:"relative",maxHeight:"300px",overflow:"hidden",px:1,"&:after":{position:"absolute",bottom:0,content:'""',left:0,width:"100%",height:"40%",pointerEvents:"none",zIndex:1}}},s.map(e=>o.createElement(r.Box,{key:e,display:"flex",alignItems:"center",gap:1.5,sx:{py:.75,px:1.5,opacity:0,animation:`e-loading-fade-in 0.4s ease-out ${80*e}ms forwards`,"@keyframes e-loading-fade-in":{from:{opacity:0,transform:"translateY(4px)"},to:{opacity:1,transform:"translateY(0)"}}}},o.createElement(r.Skeleton,{animation:"wave",variant:"rounded",width:24,height:24}),o.createElement(r.Skeleton,{animation:"wave",variant:"rounded",width:"60%",height:14}))))},"./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx":function(e,t,n){n.r(t),n.d(t,{SearchProvider:function(){return SearchProvider},useSearch:function(){return useSearch}});var o=n("react"),r=n("@elementor/utils");const s=(0,o.createContext)(void 0),SearchProvider=({children:e,localStorageKey:t})=>{const{debouncedValue:n,handleChange:c,inputValue:a}=(0,r.useSearchState)({localStorageKey:t});return o.createElement(s.Provider,{value:{handleChange:c,clearSearch:()=>{c("")},searchValue:n,inputValue:a}},e)},useSearch=()=>{const e=(0,o.useContext)(s);if(!e)throw new Error("useSearch must be used within a SearchProvider");return e}},"./packages/packages/core/editor-components/src/components/components-update-alert.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpdateAlert:function(){return ComponentsUpdateAlert}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),c=n("@wordpress/i18n");const a="/wp-admin/plugins.php";function ComponentsUpdateAlert({title:e,description:t}){return o.createElement(s.Box,{sx:{mt:"auto",position:"sticky",bottom:0}},o.createElement(s.Alert,{variant:"standard",color:"info",icon:o.createElement(r.InfoCircleFilledIcon,{fontSize:"tiny"}),role:"status",size:"small",action:o.createElement(s.AlertAction,{variant:"contained",color:"info",href:a,target:"_blank",rel:"noopener noreferrer"},(0,c.__)("Upgrade Now","elementor")),sx:{m:2,mt:1}},o.createElement(s.AlertTitle,null,e),o.createElement(s.Typography,{variant:"caption"},t)))}},"./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpgradeAlert:function(){return ComponentsUpgradeAlert}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),c=n("@wordpress/i18n");function ComponentsUpgradeAlert({title:e,description:t,upgradeUrl:n}){return o.createElement(s.Box,{sx:{mt:"auto",position:"sticky",bottom:0}},o.createElement(s.Alert,{variant:"standard",color:"promotion",icon:o.createElement(r.CrownFilledIcon,{fontSize:"tiny"}),role:"status",size:"small",action:o.createElement(s.AlertAction,{variant:"contained",color:"promotion",href:n,target:"_blank",rel:"noopener noreferrer"},(0,c.__)("Upgrade now","elementor")),sx:{m:2,mt:1}},o.createElement(s.AlertTitle,null,e),o.createElement(s.Typography,{variant:"caption"},t)))}},"./packages/packages/core/editor-components/src/components/control-label.tsx":function(e,t,n){n.r(t),n.d(t,{ControlLabel:function(){return ControlLabel}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/ui");const ControlLabel=({children:e,...t})=>o.createElement(s.Stack,{direction:"row",alignItems:"center",justifyItems:"start",gap:.25},o.createElement(r.ControlFormLabel,t,e),o.createElement(r.ControlAdornments,null))},"./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx":function(e,t,n){n.r(t),n.d(t,{DetachInstanceConfirmationDialog:function(){return DetachInstanceConfirmationDialog},openDetachConfirmDialog:function(){return openDetachConfirmDialog}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),c=n("@wordpress/i18n");function DetachInstanceConfirmationDialog({open:e,onClose:t,onConfirm:n}){return o.createElement(r.ConfirmationDialog,{open:e,onClose:t},o.createElement(r.ConfirmationDialog.Title,{icon:s.AlertTriangleFilledIcon,iconColor:"secondary"},(0,c.__)("Detach from Component?","elementor")),o.createElement(r.ConfirmationDialog.Content,null,o.createElement(r.ConfirmationDialog.ContentText,null,(0,c.__)("Detaching this instance will break its link to the Component. Changes to the Component will no longer apply. Continue?","elementor"))),o.createElement(r.ConfirmationDialog.Actions,{onClose:t,onConfirm:n,confirmLabel:(0,c.__)("Detach","elementor"),color:"primary"}))}function openDetachConfirmDialog(e){(0,r.openDialog)({component:o.createElement(DetachInstanceConfirmationDialog,{open:!0,onClose:r.closeDialog,onConfirm:()=>{(0,r.closeDialog)(),e()}})})}},"./packages/packages/core/editor-components/src/components/errors.ts":function(e,t,n){n.r(t),n.d(t,{OverrideControlInnerElementNotFoundError:function(){return r},OverrideControlPropTypeNotFoundError:function(){return s}});var o=n("@elementor/utils");const r=(0,o.createError)({code:"override_control_inner_element_not_found",message:"Component inner element not found for override control. The element may have been deleted without updating the overridable props, or the component has not finished rendering yet."}),s=(0,o.createError)({code:"override_control_prop_type_not_found",message:"Prop type not found for override control."})},"./packages/packages/core/editor-components/src/components/in-edit-mode.tsx":function(e,t,n){n.r(t),n.d(t,{openEditModeDialog:function(){return openEditModeDialog}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),c=n("@elementor/ui"),a=n("@wordpress/i18n");const openEditModeDialog=e=>{(0,r.openDialog)({component:o.createElement(EditModeDialog,{lockedBy:e})})},EditModeDialog=({lockedBy:e})=>{const t=(0,a.__)("%s is currently editing this document","elementor").replace("%s",e);return o.createElement(o.Fragment,null,o.createElement(c.DialogHeader,{logo:!1},o.createElement(c.Box,{display:"flex",alignItems:"center",gap:1},o.createElement(c.Icon,{color:"secondary"},o.createElement(s.InfoCircleFilledIcon,{fontSize:"medium"})),o.createElement(c.Typography,{variant:"subtitle1"},t))),o.createElement(c.DialogContent,null,o.createElement(c.Stack,{spacing:2,direction:"column"},o.createElement(c.Typography,{variant:"body2"},(0,a.__)("You can wait for them to finish or reach out to coordinate your changes together.","elementor")),o.createElement(c.DialogActions,null,o.createElement(c.Button,{color:"secondary",variant:"contained",onClick:r.closeDialog},(0,a.__)("Close","elementor"))))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx":function(e,t,n){n.r(t),n.d(t,{DetachAction:function(){return DetachAction}});var o=n("react"),r=n("@elementor/editor-notifications"),s=n("@elementor/icons"),c=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts"),i=n("./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx"),p=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx");const DetachAction=({componentInstanceId:e,componentId:t})=>{const[n,l]=(0,o.useState)(!1),d=(0,c.__)("Detach from Component","elementor");return o.createElement(o.Fragment,null,o.createElement(p.EditComponentAction,{label:d,icon:s.DetachIcon,onClick:()=>{l(!0)}}),o.createElement(i.DetachInstanceConfirmationDialog,{open:n,onClose:()=>{l(!1)},onConfirm:async()=>{l(!1);try{await(0,a.detachComponentInstance)({instanceId:e,componentId:t,trackingInfo:getDetachTrackingInfo()})}catch{(0,r.notify)({type:"error",message:(0,c.__)("Failed to detach component instance.","elementor"),id:"detach-component-instance-failed"})}}}))};function getDetachTrackingInfo(){const e=window,t=e?.elementorCommon?.eventsManager?.config;return t?{location:t.locations.components.instanceEditingPanel,trigger:t.triggers.click}:{location:"",trigger:""}}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx":function(e,t,n){n.r(t),n.d(t,{EmptyState:function(){return EmptyState}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),c=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts");const EmptyState=({onEditComponent:e})=>{const{canEdit:t}=(0,a.useComponentsPermissions)(),n=t?(0,c.__)("Edit the component to add properties, manage them or update the design across all instances.","elementor"):(0,c.__)("With your current role, you cannot edit this component. Contact an administrator to add properties.","elementor");return o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",color:"text.secondary",sx:{p:2.5,pt:8,pb:5.5,mt:1},gap:1.5},o.createElement(r.ComponentPropListIcon,{fontSize:"large"}),o.createElement(s.Typography,{align:"center",variant:"subtitle2"},(0,c.__)("No properties yet","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",maxWidth:"170px"},n),t&&o.createElement(s.Button,{variant:"outlined",color:"secondary",size:"small",sx:{mt:1},disabled:!e,onClick:e},o.createElement(r.PencilIcon,{fontSize:"small"}),(0,c.__)("Edit component","elementor")))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx":function(e,t,n){n.r(t),n.d(t,{InstanceEditingPanel:function(){return InstanceEditingPanel}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),c=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),i=n("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),p=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),l=n("./packages/packages/core/editor-components/src/components/components-update-alert.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx"),m=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx"),u=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx"),g=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx"),v=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx"),f=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts");const k="https://go.elementor.com/go-pro-components-Instance-edit-footer/";function InstanceEditingPanel(){const{canEdit:e}=(0,a.useComponentsPermissions)(),t=(0,f.useInstancePanelData)();if(!t)return null;const{componentId:n,component:y,overrides:_,overridableProps:C,groups:h,isEmpty:b,componentInstanceId:E}=t,I=(0,c.__)("Edit %s","elementor").replace("%s",y.name),P=o.createElement(s.Stack,{direction:"row",gap:.5},o.createElement(m.DetachAction,{componentInstanceId:E,componentId:n}),e&&o.createElement(v.EditComponentAction,{disabled:!0,label:I,icon:r.PencilIcon}));return o.createElement(s.Box,{"data-testid":"instance-editing-panel",sx:{display:"flex",flexDirection:"column",height:"100%"}},o.createElement(i.ComponentInstanceProvider,{componentId:n,overrides:_,overridableProps:C},o.createElement(v.InstancePanelHeader,{componentName:y.name,actions:P}),o.createElement(g.InstancePanelBody,{groups:h,isEmpty:b,emptyState:o.createElement(u.EmptyState,null),componentInstanceId:E})),!(0,p.isProComponentsSupported)()&&((0,p.isProOutdatedForComponents)()?o.createElement(l.ComponentsUpdateAlert,{title:(0,c.__)("Edit Component","elementor"),description:(0,c.__)("To edit components, update Elementor Pro to the latest version.","elementor")}):o.createElement(d.ComponentsUpgradeAlert,{title:(0,c.__)("Edit components","elementor"),description:(0,c.__)("Editing components requires an active Pro subscription.","elementor"),upgradeUrl:k})))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx":function(e,t,n){n.r(t),n.d(t,{InstancePanelBody:function(){return InstancePanelBody}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-editing-panel"),c=n("@elementor/editor-panels"),a=n("@elementor/ui"),i=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx");function InstancePanelBody({groups:e,isEmpty:t,emptyState:n,componentInstanceId:p}){return o.createElement(c.PanelBody,null,o.createElement(r.ControlAdornmentsProvider,{items:(0,s.getFieldIndicators)("settings")},t?n:o.createElement(a.Stack,{direction:"column",alignItems:"stretch"},e.map(e=>o.createElement(o.Fragment,{key:e.id+p},o.createElement(i.OverridePropsGroup,{group:e}),o.createElement(a.Divider,null))))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx":function(e,t,n){n.r(t),n.d(t,{EditComponentAction:function(){return EditComponentAction},InstancePanelHeader:function(){return InstancePanelHeader}});var o=n("react"),r=n("@elementor/editor-panels"),s=n("@elementor/editor-ui"),c=n("@elementor/icons"),a=n("@elementor/ui");function InstancePanelHeader({componentName:e,actions:t}){return o.createElement(r.PanelHeader,{sx:{justifyContent:"start",px:2}},o.createElement(a.Stack,{direction:"row",alignItems:"center",flexGrow:1,gap:1,maxWidth:"100%"},o.createElement(c.ComponentsIcon,{fontSize:"small",sx:{color:"text.tertiary"}}),o.createElement(s.EllipsisWithTooltip,{title:e,as:r.PanelHeaderTitle,sx:{flexGrow:1}}),t))}function EditComponentAction({label:e,onClick:t,disabled:n=!1,icon:r}){return o.createElement(a.Tooltip,{title:e},o.createElement(a.IconButton,{size:"tiny",onClick:t,"aria-label":e,disabled:n},o.createElement(r,{fontSize:"tiny"})))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx":function(e,t,n){n.r(t),n.d(t,{OverridePropControl:function(){return OverridePropControl}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-editing-panel"),c=n("@elementor/ui"),a=n("./packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts"),i=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),p=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),l=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),d=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),m=n("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),u=n("./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx"),g=n("./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts"),v=n("./packages/packages/core/editor-components/src/store/store.ts"),f=n("./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts"),k=n("./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts"),y=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),_=n("./packages/packages/core/editor-components/src/components/control-label.tsx"),C=n("./packages/packages/core/editor-components/src/components/errors.ts"),h=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/correct-exposed-empty-override.ts"),b=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/resolve-element-settings.ts"),E=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-override-dependencies.ts"),I=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-resolved-inner-element.ts");function OverridePropControl({overrideKey:e}){const t=(0,m.useComponentOverridableProps)().props[e];return t?o.createElement(s.SettingsField,{bind:"component_instance",propDisplayName:t.label},o.createElement(OverrideControl,{overridableProp:t})):null}function OverrideControl({overridableProp:e}){const t=(0,s.useElement)(),{value:n,setValue:P}=(0,r.useBoundProp)(l.componentInstancePropTypeUtil),x=(0,v.useCurrentComponentId)(),w=(0,m.useComponentId)(),S=(0,m.useComponentOverridableProps)(),O=(0,m.useComponentInstanceOverrides)(),T=(0,a.useControlsByWidgetType)(e.originPropFields?.widgetType??e.widgetType),D=(0,r.getControlReplacements)(),U=(0,k.getMatchingOverride)(O,e.overrideKey),{propKey:A}=e.originPropFields??e,V=(0,f.getPropTypeForComponentOverride)(e);if(!V)throw new C.OverrideControlPropTypeNotFoundError({context:{overridableProp:e}});const{elementId:N,elementType:L,resolvedElementSettings:M,resolvedOriginValues:B}=(0,I.useResolvedInnerElement)(e),{overrideValue:z,isDisabled:F,isHidden:R}=(0,E.useOverrideControlDependencies)({existingOverride:U,resolvedElementSettings:M,elementType:L,elementId:N,propKey:A});if(R)return null;const{propValue:q,baseValue:j}=function resolveOverrideValues(e,t,n,o){const r=(0,b.unwrapOverridableSettings)(n),c=r[o]??null,a=(0,s.isDynamicPropValue)(c),i=a&&!e,p=i?c:t,l=e||a?null:c;return{propValue:p,baseValue:l}}(U,z,B,A),$={[e.overrideKey]:q},K={[e.overrideKey]:j},{control:W,controlProps:G,layout:H}=function getControlParams(e,t,n){const o=e[t.propKey],{value:r}=o,c=function getControlLayout(e){return e.value.meta?.layout||s.controlsRegistry.getLayout(e.value.type)}(o),a=function populateChildControlProps(e){if(e.childControlType){const t=s.controlsRegistry.get(e.childControlType),n=s.controlsRegistry.getPropTypeUtil(e.childControlType);e={...e,childControlConfig:{component:t,props:e.childControlProps||{},propTypeUtil:n}}}return e}(r.props);"custom"===c&&(a.label=n??r.label);return{control:o,controlProps:a,layout:c}}(T,e.originPropFields??e,e.label),Y=(0,s.createTopLevelObjectType)({schema:{[e.overrideKey]:V}});return o.createElement(u.OverridablePropProvider,{value:d.componentOverridablePropTypeUtil.extract(U)??void 0,componentInstanceElement:t},o.createElement(s.ElementProvider,{element:{id:N,type:L.key},elementType:L,settings:M},o.createElement(r.PropProvider,{propType:Y,value:$,setValue:(t,o,r)=>{let c=function getTempNewValueForDynamicProp(e,t,n){const o=null===n;if(o&&(0,s.isDynamicPropValue)(t))return e.default??null;return n}(V,q,t[e.overrideKey]);c=(0,h.correctExposedEmptyOverride)(c,U);const a=function createOverrideValue({matchingOverride:e,overrideKey:t,overrideValue:n,componentId:o}){const r=d.componentOverridablePropTypeUtil.extract(e),s=d.componentOverridablePropTypeUtil.extract(n),c=s??r;if(c){const e=i.componentInstanceOverridePropTypeUtil.create({override_key:t,override_value:(0,y.resolveOverridePropValue)(n),schema_source:{type:"component",id:o}});return d.componentOverridablePropTypeUtil.create({override_key:c.override_key,origin_value:e})}return i.componentInstanceOverridePropTypeUtil.create({override_key:t,override_value:n,schema_source:{type:"component",id:o}})}({matchingOverride:U,overrideKey:e.overrideKey,overrideValue:c,componentId:w});let l=(O??[]).filter(e=>function isValidOverride(e,t){const n=d.componentOverridablePropTypeUtil.isValid(t)?t.value.origin_value?.value.override_key:t.value.override_key;return!!e.props[n]}(S,e)).map(e=>e===U?a:e);U||(l=[...l,a]),P({...n,overrides:p.componentInstanceOverridesPropTypeUtil.create(l)},o,r);const m=d.componentOverridablePropTypeUtil.extract(a);if(m&&x){if(e.originPropFields)return void(0,g.updateOverridableProp)(x,m,e.originPropFields);const t={elType:e.elType,widgetType:e.widgetType,propKey:e.propKey,elementId:e.elementId};(0,g.updateOverridableProp)(x,m,t)}},baseValue:K,isDisabled:F},o.createElement(r.PropKeyProvider,{bind:e.overrideKey},o.createElement(r.ControlReplacementsProvider,{replacements:D},o.createElement(c.Box,{mb:1.5},o.createElement(s.ControlTypeContainer,{layout:H},"custom"!==H&&o.createElement(_.ControlLabel,null,e.label),o.createElement(OriginalControl,{control:W,controlProps:G}))))))))}function OriginalControl({control:e,controlProps:t}){const{value:n}=e;return o.createElement(s.BaseControl,{type:n.type,props:t})}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx":function(e,t,n){n.r(t),n.d(t,{OverridePropsGroup:function(){return OverridePropsGroup}});var o=n("react"),r=n("@elementor/editor-editing-panel"),s=n("@elementor/editor-ui"),c=n("@elementor/ui"),a=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx");function OverridePropsGroup({group:e}){const[t,n]=(0,r.useStateByElement)(e.id,!0),i=(0,o.useId)(),p=`label-${i}`,l=`content-${i}`,d=e.label;return o.createElement(c.Box,{"aria-label":`${d} section`},o.createElement(c.ListItemButton,{id:p,"aria-controls":l,"aria-label":`${d} section`,onClick:()=>{n(!t)},p:0,sx:{"&:hover":{backgroundColor:"transparent"}}},o.createElement(c.Stack,{direction:"row",alignItems:"center",justifyItems:"start",flexGrow:1,gap:.5},o.createElement(c.ListItemText,{secondary:d,secondaryTypographyProps:{color:"text.primary",variant:"caption",fontWeight:"bold"},sx:{flexGrow:0,flexShrink:1,marginInlineEnd:1}})),o.createElement(s.CollapseIcon,{open:t,color:"secondary",fontSize:"tiny"})),o.createElement(c.Collapse,{id:l,"aria-labelledby":p,in:t,timeout:"auto"},o.createElement(c.Stack,{direction:"column",gap:1,p:2},e.props.map(e=>o.createElement(a.OverridePropControl,{key:e,overrideKey:e})))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts":function(e,t,n){n.r(t),n.d(t,{useInstancePanelData:function(){return useInstancePanelData}});var o=n("@elementor/editor-editing-panel"),r=n("./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),c=n("./packages/packages/core/editor-components/src/store/store.ts");function useInstancePanelData(){const{element:e,settings:t}=function useComponentInstanceSettings(){const{element:e,settings:t}=(0,o.useElement)();return{element:e,settings:s.componentInstancePropTypeUtil.extract(t.component_instance)}}(),n=t?.component_id?.value,a=t?.overrides?.value,i=(0,c.useComponent)(n??null),p=e?.id,l=(0,r.useSanitizeOverridableProps)(n??null,p);if(!(n&&l&&i&&p))return null;const d=l.groups.order.map(e=>l.groups.items[e]??null).filter(e=>null!==e&&e.props.length>0),m=0===d.length||0===Object.keys(l.props).length;return{componentId:n,component:i,overrides:a,overridableProps:l,groups:d,isEmpty:m,componentInstanceId:p}}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/correct-exposed-empty-override.ts":function(e,t,n){n.r(t),n.d(t,{correctExposedEmptyOverride:function(){return correctExposedEmptyOverride}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");function correctExposedEmptyOverride(e,t){const n=o.componentOverridablePropTypeUtil.extract(e);return n&&null===t?o.componentOverridablePropTypeUtil.create({override_key:n.override_key,origin_value:null}):e}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/resolve-element-settings.ts":function(e,t,n){n.r(t),n.d(t,{applyOverridesToSettings:function(){return applyOverridesToSettings},unwrapOverridableSettings:function(){return unwrapOverridableSettings}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");function applyOverridesToSettings(e,t){const n={};for(const[r,s]of Object.entries(e)){const e=o.componentOverridablePropTypeUtil.extract(s);if(!e){n[r]=s;continue}const c=t[e.override_key];if(c)if(c.outermostKey&&c.outermostKey!==e.override_key){const t=e.origin_value;n[r]=o.componentOverridablePropTypeUtil.create({override_key:c.outermostKey,origin_value:c.value??t})}else n[r]=c.value??s;else n[r]=s}return n}function unwrapOverridableSettings(e){const t={};for(const[n,r]of Object.entries(e)){const e=o.componentOverridablePropTypeUtil.extract(r);e?t[n]=e.origin_value:t[n]=r}return t}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-override-dependencies.ts":function(e,t,n){n.r(t),n.d(t,{useOverrideControlDependencies:function(){return useOverrideControlDependencies}});var o=n("react"),r=n("@elementor/editor-editing-panel"),s=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts");function useOverrideControlDependencies({existingOverride:e,resolvedElementSettings:t,elementId:n,elementType:c,propKey:a}){return(0,o.useMemo)(()=>{const{isDisabled:o,isHidden:i}=(0,r.extractDependencyEffect)(a,c.propsSchema,t),p=e?(0,s.resolveOverridePropValue)(e):null,l={...t,[a]:p},d=(0,r.getElementSettingsWithDefaults)(c.propsSchema,l),m=(0,r.extractOrderedDependencies)(c.dependenciesPerTargetMapping??{});return{overrideValue:(0,r.getUpdatedValues)(l,m,c.propsSchema,d,n)[a],isDisabled:o,isHidden:i}},[e,t,a,c.propsSchema,c.dependenciesPerTargetMapping,n])}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-resolved-inner-element.ts":function(e,t,n){n.r(t),n.d(t,{useResolvedInnerElement:function(){return useResolvedInnerElement}});var o=n("react"),r=n("@elementor/editor-editing-panel"),s=n("@elementor/editor-elements"),c=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),i=n("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),p=n("./packages/packages/core/editor-components/src/utils/resolve-overrides-chain.ts"),l=n("./packages/packages/core/editor-components/src/components/errors.ts"),d=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/utils/resolve-element-settings.ts");function useResolvedInnerElement(e){const t=(0,r.useElement)(),n=(0,i.useComponentId)(),m=(0,i.useComponentInstanceOverrides)(),{elementId:u,widgetType:g,elType:v}=e.originPropFields??e,f="widget"===v?g:v,k=(0,s.getElementType)(f);if(!k)throw new Error(`Element type not found for ${f}`);const{elementId:y,overridesMapping:_}=(0,o.useMemo)(()=>{const o=(0,p.resolveOverridesChain)({outerOverridableProp:e,outerInstanceId:t.element.id});if(o.isChainBroken)throw new l.OverrideControlInnerElementNotFoundError({context:{componentId:n,elementId:u}});return{elementId:o.innerElement.id,overridesMapping:o.overridesMapping}},[e,t.element.id,n,u]),C=(0,o.useMemo)(()=>{const e=(0,s.getElementSettings)(y,Object.keys(k?.propsSchema??{}));return(0,d.applyOverridesToSettings)(e,_)},[y,k?.propsSchema,_]),h=(0,o.useMemo)(()=>{const e=(0,d.applyOverridesToSettings)(C,function formatOverridesToApply(e){if(!e)return{};const t={};for(const n of e){const e=a.componentOverridablePropTypeUtil.extract(n);let o=n;e&&(o=e.origin_value);const r=c.componentInstanceOverridePropTypeUtil.extract(o);r&&(t[r.override_key]={value:r.override_value})}return t}(m));return(0,d.unwrapOverridableSettings)(e)},[C,m]);return{elementId:y,elementType:k,resolvedOriginValues:C,resolvedElementSettings:h}}},"./packages/packages/core/editor-components/src/components/load-template-components.tsx":function(e,t,n){n.r(t),n.d(t,{LoadTemplateComponents:function(){return LoadTemplateComponents}});var o=n("react"),r=n("@elementor/editor-templates"),s=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts");const LoadTemplateComponents=()=>(0,r.isHandlingTemplateStyles)()?o.createElement(LoadTemplateComponentsInternal,null):null;function LoadTemplateComponentsInternal(){const e=(0,r.useLoadedTemplates)();return(0,o.useEffect)(()=>{(0,s.loadComponentsAssets)(e.flatMap(e=>e??[]))},[e]),null}},"./packages/packages/core/editor-components/src/consts.ts":function(e,t,n){n.r(t),n.d(t,{COMPONENT_WIDGET_TYPE:function(){return o}});const o="e-component"},"./packages/packages/core/editor-components/src/create-component-type.ts":function(e,t,n){n.r(t),n.d(t,{COMPONENT_WIDGET_TYPE:function(){return f},createComponentType:function(){return createComponentType}});var o=n("@elementor/editor-canvas"),r=n("@elementor/editor-documents"),s=n("@elementor/editor-notifications"),c=n("@elementor/store"),a=n("@elementor/utils"),i=n("@wordpress/i18n"),p=n("./packages/packages/core/editor-components/src/api.ts"),l=n("./packages/packages/core/editor-components/src/store/store.ts"),d=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts"),m=n("./packages/packages/core/editor-components/src/utils/format-component-elements-id.ts"),u=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),g=n("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),v=n("./packages/packages/core/editor-components/src/utils/tracking.ts");const f="e-component",k="https://go.elementor.com/go-pro-components-Instance-edit-canvas-double-click/",y="https://go.elementor.com/go-pro-components-Instance-edit-context-menu/",_="/wp-admin/plugins.php",C="component-edit-upgrade",h="component-edit-update",b=2e3;function notifyComponentEditUpdate(){(0,s.notify)({type:"info",id:h,message:(0,i.__)("To edit components, update Elementor Pro to the latest version.","elementor"),additionalActionProps:[{size:"small",variant:"contained",color:"info",href:_,target:"_blank",children:(0,i.__)("Update Now","elementor")}]})}const updateGroups=(e,t)=>{const n=new Map(Object.entries(t.disable??{})),o=new Map(Object.entries(t.add??{}));return e.map(e=>{const t=n.get(e.name)??[],r=o.get(e.name),s=e.actions.map(e=>t.includes(e.name)?{...e,isEnabled:()=>!1}:e);return r&&s.splice(r.index,0,...r.actions),{...e,actions:s}})};function createComponentType(e){const t=window.elementor.modules.elements.types.Widget,n=function createComponentView(e){const t=window;return class extends((0,o.createTemplatedElementView)(e)){eventsManagerConfig=t.elementorCommon.eventsManager.config;#e;isComponentCurrentlyEdited(){const e=(0,r.getCurrentDocument)();return e?.id===this.getComponentId()}getRenderContext(){const e=this.getNamespaceKey(),t=this._parent?.getRenderContext?.(),n=t?.[e];if(!this.#e)return t;const o=this.#e.overrides??{},r=n?.overrides??{};return{...t,[e]:{overrides:{...r,...o}}}}getResolverRenderContext(){const e=this.getNamespaceKey(),t=this.getRenderContext();return t?.[e]}afterSettingsResolve(e){const n=e.component_instance;if(n){this.#e={overrides:n.overrides??{}};const o=this.model.get("id"),r=n.elements??[],s=(0,m.formatComponentElementsId)(r,[o]);this.collection=t.elementor.createBackboneElementsCollection(s),this.collection.models.forEach(setInactiveRecursively),e.component_instance="<template data-children-placeholder></template>"}return e}getDomElement(){return this.children.findByIndex(0)?.getDomElement()??this.$el}attachBuffer(e,t){const n=e.$el.find("[data-children-placeholder]").get(0);n?n.replaceWith(t):super.attachBuffer(e,t)}getComponentId(){const e=this.options?.model?.get("settings")?.get("component_instance")?.value;return e.component_id.value}getContextMenuGroups(){const e=super.getContextMenuGroups().filter(e=>"save"!==e.name);if(!this.getComponentId())return e;return updateGroups(e,this._getContextMenuConfig())}_getContextMenuConfig(){const e=isUserAdministrator(),t=(0,a.hasProInstalled)(),n=(0,u.isProOutdatedForComponents)(),o={name:"edit component",icon:"eicon-edit",title:()=>(0,i.__)("Edit Component","elementor"),...!t&&!n&&{shortcut:`<a href="${y}" target="_blank" onclick="event.stopPropagation()" class="${"elementor-context-menu-list__item__shortcut__promotion-badge"}"><i class="eicon-upgrade-crown"></i></a>`,hasShortcutAction:!0},isEnabled:()=>(0,u.isProComponentsSupported)()||n,callback:(e,t)=>this.editComponent(t)},r={name:"detach instance",icon:"eicon-chain-broken",title:()=>(0,i.__)("Detach from Component","elementor"),isEnabled:()=>!0,callback:(e,t)=>this.detachInstance(t)};return{add:{general:{index:1,actions:e?[o,r]:[r]}},disable:{clipboard:["pasteStyle","resetStyle"]}}}async switchDocument(){const{isAllowedToSwitchDocument:t,lockedBy:n}=await p.apiClient.getComponentLockStatus(this.getComponentId());t?(0,g.switchToComponent)(this.getComponentId(),this.model.get("id"),this.el):e.showLockedByModal?.(n||"")}editComponent({trigger:e,location:t,secondaryLocation:n}){if((0,u.isProOutdatedForComponents)())return void notifyComponentEditUpdate();if(!(0,u.isProComponentsSupported)()||this.isComponentCurrentlyEdited())return;this.switchDocument();const o=this.model.get("editor_settings");(0,v.trackComponentEvent)({action:"edited",source:"user",component_uid:o?.component_uid,component_name:o?.title,location:t,secondary_location:n,trigger:e})}detachInstance({trigger:t,location:n,secondaryLocation:o}){const r=this.getComponentId(),c=this.model.get("id");if(!r||!c)return;const handleConfirm=async()=>{try{await(0,d.detachComponentInstance)({instanceId:c,componentId:r,trackingInfo:{location:n,secondaryLocation:o,trigger:t}})}catch{(0,s.notify)({type:"error",message:(0,i.__)("Failed to detach component instance.","elementor"),id:"detach-component-instance-failed"})}};e.showDetachConfirmDialog?.(handleConfirm)}handleDblClick(e){if(e.stopPropagation(),!isUserAdministrator())return;if((0,u.isProOutdatedForComponents)())return void notifyComponentEditUpdate();if(!(0,a.hasProInstalled)())return void function notifyComponentEditUpgrade(){(0,s.notify)({type:"promotion",id:C,message:(0,i.__)("Editing components requires an active Pro subscription.","elementor"),autoHideDuration:b,additionalActionProps:[{size:"small",variant:"contained",color:"promotion",href:k,target:"_blank",children:(0,i.__)("Upgrade Now","elementor")}]})}();const{triggers:t,locations:n,secondaryLocations:o}=this.eventsManagerConfig;this.editComponent({trigger:t.doubleClick,location:n.canvas,secondaryLocation:o.canvasElement})}events(){return{...super.events(),dblclick:this.handleDblClick}}attributes(){return{...super.attributes(),"data-elementor-id":this.getComponentId()}}}}({...e});return class extends t{getType(){return e.type}getView(){return n}getModel(){return function createComponentModel(){const e=window,t=e.elementor.modules.elements.types.Widget,n=new t,o=n.getModel();return o.extend({initialize(e,t){o.prototype.initialize.call(this,e,t);const n=this.get("settings")?.get("component_instance");if(n?.value){const e=n.value.component_id?.value;e&&"number"==typeof e&&this.set("componentId",e)}this.set("isGlobal",!0)},getTitle(){const e=this.get("editor_settings"),t=e?.title;if(t)return t;const n=e?.component_uid;if(n){const e=(0,l.selectComponentByUid)((0,c.__getState)(),n);if(e?.name)return e.name}return window.elementor.getElementData(this).title},getComponentId(){return this.get("componentId")||null},getComponentName(){return this.getTitle()},getComponentUid(){const e=this.get("editor_settings");return e?.component_uid||null}})}()}}}function setInactiveRecursively(e){const t=e.get("editSettings");t&&t.set("inactive",!0);const n=e.get("elements");n&&n.forEach(e=>{setInactiveRecursively(e)})}function isUserAdministrator(){const e=window;return e.elementor.config?.user?.is_administrator??!1}},"./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts":function(e,t,n){n.r(t),n.d(t,{useComponentsPermissions:function(){return useComponentsPermissions}});var o=n("@elementor/editor-current-user");const useComponentsPermissions=()=>{const{isAdmin:e}=(0,o.useCurrentUserCapabilities)();return{canCreate:e,canEdit:e,canDelete:e,canRename:e}}},"./packages/packages/core/editor-components/src/hooks/use-components.ts":function(e,t,n){n.r(t),n.d(t,{useComponents:function(){return useComponents}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");const useComponents=()=>({components:(0,o.__useSelector)(r.selectComponents),isLoading:(0,o.__useSelector)(r.selectLoadIsPending)})},"./packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts":function(e,t,n){n.r(t),n.d(t,{useControlsByWidgetType:function(){return useControlsByWidgetType}});var o=n("@elementor/editor-elements");function useControlsByWidgetType(e){const t=(0,o.getElementType)(e);if(!t)return{};return function getControlsByBind(e){return e.reduce((e,t)=>({...e,[t.value.bind]:t}),{})}(iterateControls(t.controls))}function iterateControls(e){return e.map(e=>"control"===e.type&&"bind"in e.value?e:"section"===e.type?iterateControls(e.value.items):null).filter(Boolean).flat()}},"./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{useSanitizeOverridableProps:function(){return useSanitizeOverridableProps}});var o=n("./packages/packages/core/editor-components/src/store/store.ts"),r=n("./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts");function useSanitizeOverridableProps(e,t){const n=(0,o.useOverridableProps)(e),s=(0,o.useIsSanitizedComponent)(e,"overridableProps");if(n&&e)return s?n:(0,r.filterValidOverridableProps)(n,t)}},"./packages/packages/core/editor-components/src/init.ts":function(e,t,n){n.r(t),n.d(t,{init:function(){return init}});var o=n("@elementor/editor"),r=n("@elementor/editor-canvas"),s=n("@elementor/editor-documents"),c=n("@elementor/editor-editing-panel"),a=n("@elementor/editor-elements-panel"),i=n("@elementor/editor-styles-repository"),p=n("@elementor/editor-v1-adapters"),l=n("@elementor/store"),d=n("@wordpress/i18n"),m=n("./packages/packages/core/editor-components/src/component-instance-transformer.ts"),u=n("./packages/packages/core/editor-components/src/component-overridable-transformer.ts"),g=n("./packages/packages/core/editor-components/src/component-override-transformer.ts"),v=n("./packages/packages/core/editor-components/src/components/components-tab/components.tsx"),f=n("./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx"),k=n("./packages/packages/core/editor-components/src/components/in-edit-mode.tsx"),y=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx"),_=n("./packages/packages/core/editor-components/src/components/load-template-components.tsx"),C=n("./packages/packages/core/editor-components/src/create-component-type.ts"),h=n("./packages/packages/core/editor-components/src/populate-store.ts"),b=n("./packages/packages/core/editor-components/src/prevent-circular-nesting.ts"),E=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts"),I=n("./packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts"),P=n("./packages/packages/core/editor-components/src/store/components-styles-provider.ts"),x=n("./packages/packages/core/editor-components/src/store/store.ts"),w=n("./packages/packages/core/editor-components/src/sync/before-save.ts"),S=n("./packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts");function init(){i.stylesRepository.register(P.componentsStylesProvider),(0,l.__registerSlice)(x.slice),(0,r.registerElementType)(C.COMPONENT_WIDGET_TYPE,e=>(0,C.createComponentType)({...e,showLockedByModal:k.openEditModeDialog,showDetachConfirmDialog:f.openDetachConfirmDialog})),window.elementorCommon.__beforeSave=w.beforeSave,(0,a.injectTab)({id:"components",label:(0,d.__)("Components","elementor"),component:v.Components,position:1}),(0,o.injectIntoLogic)({id:"components-populate-store",component:h.PopulateStore}),(0,p.registerDataHook)("after","editor/documents/attach-preview",async()=>{const{id:e,config:t}=(0,s.getV1CurrentDocument)();e&&(0,I.removeComponentStyles)(e),await(0,E.loadComponentsAssets)(t?.elements??[])}),(0,o.injectIntoLogic)({id:"templates",component:_.LoadTemplateComponents}),(0,c.registerEditingPanelReplacement)({id:"component-instance-edit-panel",condition:(e,t)=>"e-component"===t.key,component:y.InstanceEditingPanel}),r.settingsTransformersRegistry.register("component-instance",m.componentInstanceTransformer),r.settingsTransformersRegistry.register("overridable",u.componentOverridableTransformer),r.settingsTransformersRegistry.register("override",g.componentOverrideTransformer),(0,b.initCircularNestingPrevention)(),(0,S.initLoadComponentDataAfterInstanceAdded)()}},"./packages/packages/core/editor-components/src/populate-store.ts":function(e,t,n){n.r(t),n.d(t,{PopulateStore:function(){return PopulateStore}});var o=n("react"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/thunks.ts");function PopulateStore(){return(0,o.useEffect)(()=>{(0,r.__dispatch)((0,s.loadComponents)())},[]),null}},"./packages/packages/core/editor-components/src/prevent-circular-nesting.ts":function(e,t,n){n.r(t),n.d(t,{extractComponentIdsFromElements:function(){return extractComponentIdsFromElements},initCircularNestingPrevention:function(){return initCircularNestingPrevention},wouldCreateCircularNesting:function(){return wouldCreateCircularNesting}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-notifications"),s=n("@elementor/editor-v1-adapters"),c=n("@elementor/store"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/store/store.ts");const p="e-component",l={type:"default",message:(0,a.__)("Can't add this component - components that contain each other can't be nested.","elementor"),id:"circular-component-nesting-blocked"};function initCircularNestingPrevention(){(0,s.blockCommand)({command:"document/elements/create",condition:blockCircularCreate}),(0,s.blockCommand)({command:"document/elements/move",condition:blockCircularMove}),(0,s.blockCommand)({command:"document/elements/paste",condition:blockCircularPaste})}function wouldCreateCircularNesting(e){if(void 0===e)return!1;const t=(0,c.__getState)(),n=(0,i.selectCurrentComponentId)(t),o=(0,i.selectPath)(t);return null!==n&&(e===n||o.some(t=>t.componentId===e))}function extractComponentIdFromElement(e){return e.widgetType!==p?null:e.settings?.component_instance?.value?.component_id?.value??null}function extractComponentIdsFromElements(e){const t=[];for(const n of e){const e=extractComponentIdFromElement(n);null!==e&&t.push(e),n.elements?.length&&t.push(...extractComponentIdsFromElements(n.elements))}return t}function blockCircularCreate(e){const t=function extractComponentIdFromModel(e){return e&&e.widgetType===p?e.settings?.component_instance?.value?.component_id?.value??null:null}(e.model);if(null===t)return!1;const n=wouldCreateCircularNesting(t);return n&&(0,r.notify)(l),n}function blockCircularMove(e){const{containers:t=[e.container]}=e,n=t.some(e=>{if(!e)return!1;return(0,o.getAllDescendants)(e).some(e=>{const t=function extractComponentIdFromContainer(e){const t=e.model?.get?.("widgetType");if(t!==p)return null;const n=e.model?.get?.("settings"),o=n?.get?.("component_instance");return o?.value?.component_id?.value??null}(e);return null!==t&&wouldCreateCircularNesting(t)})});return n&&(0,r.notify)(l),n}function blockCircularPaste(e){const{storageType:t}=e;if("localstorage"!==t)return!1;const n=window?.elementorCommon?.storage?.get();if(!n?.clipboard?.elements)return!1;const o=extractComponentIdsFromElements(n.clipboard.elements).some(wouldCreateCircularNesting);return o&&(0,r.notify)(l),o}},"./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceOverridePropTypeUtil:function(){return s}});var o=n("@elementor/editor-props"),r=n("@elementor/schema");const s=(0,o.createPropUtils)("override",r.z.object({override_key:r.z.string(),override_value:r.z.unknown(),schema_source:r.z.object({type:r.z.literal("component"),id:r.z.number()})}))},"./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceOverridesPropTypeUtil:function(){return a}});var o=n("@elementor/editor-props"),r=n("@elementor/schema"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),c=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");const a=(0,o.createPropUtils)("overrides",r.z.array(r.z.union([s.componentInstanceOverridePropTypeUtil.schema,c.componentOverridablePropTypeUtil.schema])).optional().default([]))},"./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstancePropTypeUtil:function(){return c}});var o=n("@elementor/editor-props"),r=n("@elementor/schema"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts");const c=(0,o.createPropUtils)("component-instance",r.z.object({component_id:o.numberPropTypeUtil.schema,overrides:r.z.optional(s.componentInstanceOverridesPropTypeUtil.schema)}))},"./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentOverridablePropTypeUtil:function(){return s}});var o=n("@elementor/editor-props"),r=n("@elementor/schema");const s=(0,o.createPropUtils)("overridable",r.z.object({override_key:r.z.string(),origin_value:r.z.object({$$type:r.z.string(),value:r.z.unknown()}).nullable()}))},"./packages/packages/core/editor-components/src/provider/component-instance-context.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentInstanceProvider:function(){return ComponentInstanceProvider},useComponentId:function(){return useComponentId},useComponentInstanceOverrides:function(){return useComponentInstanceOverrides},useComponentOverridableProps:function(){return useComponentOverridableProps}});var o=n("react");const r=(0,o.createContext)(null);function ComponentInstanceProvider({children:e,...t}){return o.createElement(r.Provider,{value:t},e)}function useComponentInstanceContext(){const e=(0,o.useContext)(r);if(!e)throw new Error("useComponentInstanceContext must be used within a ComponentInstanceProvider");return e}const useComponentId=()=>useComponentInstanceContext().componentId,useComponentInstanceOverrides=()=>useComponentInstanceContext().overrides,useComponentOverridableProps=()=>useComponentInstanceContext().overridableProps},"./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx":function(e,t,n){n.r(t),n.d(t,{OverridablePropProvider:function(){return OverridablePropProvider},useComponentInstanceElement:function(){return useComponentInstanceElement},useOverridablePropValue:function(){return useOverridablePropValue}});var o=n("react");const r=(0,o.createContext)(null);function OverridablePropProvider({children:e,...t}){return o.createElement(r.Provider,{value:t},e)}const useOverridablePropValue=()=>(0,o.useContext)(r)?.value,useComponentInstanceElement=()=>(0,o.useContext)(r)?.componentInstanceElement},"./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsAssets:function(){return loadComponentsAssets}});var o=n("@elementor/editor-documents"),r=n("./packages/packages/core/editor-components/src/utils/get-component-documents.ts"),s=n("./packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts"),c=n("./packages/packages/core/editor-components/src/store/actions/load-components-styles.ts");async function loadComponentsAssets(e){const t=await(0,r.getComponentDocuments)(e);!function updateDocumentState(e){const t=[...e.values()].some(o.isDocumentDirty);t&&(0,o.setDocumentModifiedStatus)(!0)}(t),(0,c.loadComponentsStyles)(t),await(0,s.loadComponentsOverridableProps)([...t.keys()])}},"./packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsOverridableProps:function(){return loadComponentsOverridableProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");async function loadComponentsOverridableProps(e){const t=e.filter(e=>!(0,s.selectIsOverridablePropsLoaded)((0,o.__getState)(),e));if(!t.length)return;const{data:n}=await r.apiClient.getOverridableProps(t);(0,o.__dispatch)(s.slice.actions.loadOverridableProps(n))}},"./packages/packages/core/editor-components/src/store/actions/load-components-styles.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsStyles:function(){return loadComponentsStyles}});var o=n("@elementor/editor-global-classes"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function loadComponentsStyles(e){if(!e.size)return;const t=(0,s.selectStyles)((0,r.__getState)()),n=new Map([...e.entries()].filter(([e])=>!t[e]));n.size&&function addStyles(e){const t=Object.fromEntries([...e.entries()].map(([e,t])=>((0,o.addDocumentClasses)(e),[e,extractStylesFromDocument(t)])));(0,r.__dispatch)(s.slice.actions.addStyles(t))}(n)}function extractStylesFromDocument(e){return e.elements?.length?e.elements.flatMap(extractStylesFromElement):[]}function extractStylesFromElement(e){return[...Object.values(e.styles??{}),...(e.elements??[]).flatMap(extractStylesFromElement)]}},"./packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts":function(e,t,n){n.r(t),n.d(t,{removeComponentStyles:function(){return removeComponentStyles}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function removeComponentStyles(e){r.apiClient.invalidateComponentConfigCache(e),(0,o.__dispatch)(s.slice.actions.removeStyles({id:e}))}},"./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts":function(e,t,n){n.r(t),n.d(t,{updateOverridableProp:function(){return updateOverridableProp}});var o=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),r=n("./packages/packages/core/editor-components/src/store/dispatchers.ts"),s=n("./packages/packages/core/editor-components/src/store/selectors.ts");function updateOverridableProp(e,t,n){const c=s.componentsSelectors.getOverridableProps(e);if(!c)return;const a=c.props[t.override_key];if(!a)return;const i=(0,o.resolveOverridePropValue)(t.origin_value),p=n?{originValue:i,originPropFields:n}:{originValue:i},l={...c,props:{...c.props,[a.overrideKey]:{...a,...p}}};r.componentsActions.setOverridableProps(e,l)}},"./packages/packages/core/editor-components/src/store/components-styles-provider.ts":function(e,t,n){n.r(t),n.d(t,{componentsStylesProvider:function(){return a}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-styles-repository"),s=n("@elementor/store"),c=n("./packages/packages/core/editor-components/src/store/store.ts");const a=(0,r.createStylesProvider)({key:"components-styles",priority:100,subscribe:e=>(0,s.__subscribeWithSelector)(e=>e[c.SLICE_NAME],()=>{e()}),actions:{all:()=>{const e=(0,o.getCurrentDocumentId)();return(0,c.selectFlatStyles)((0,s.__getState)(),e)},get:e=>(0,c.selectFlatStyles)((0,s.__getState)()).find(t=>t.id===e)??null}})},"./packages/packages/core/editor-components/src/store/dispatchers.ts":function(e,t,n){n.r(t),n.d(t,{componentsActions:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function safeDispatch(){return(0,o.__getStore)()?.dispatch}const s={add(e){(0,o.__dispatch)(r.slice.actions.add(e))},load(e){(0,o.__dispatch)(r.slice.actions.load(e))},addUnpublished(e){(0,o.__dispatch)(r.slice.actions.addUnpublished(e))},removeUnpublished(e){(0,o.__dispatch)(r.slice.actions.removeUnpublished(e))},resetUnpublished(){(0,o.__dispatch)(r.slice.actions.resetUnpublished())},removeStyles(e){(0,o.__dispatch)(r.slice.actions.removeStyles({id:e}))},addStyles(e){(0,o.__dispatch)(r.slice.actions.addStyles(e))},addCreatedThisSession(e){(0,o.__dispatch)(r.slice.actions.addCreatedThisSession(e))},removeCreatedThisSession(e){(0,o.__dispatch)(r.slice.actions.removeCreatedThisSession(e))},archive(e){(0,o.__dispatch)(r.slice.actions.archive(e))},setCurrentComponentId(e){safeDispatch()?.(r.slice.actions.setCurrentComponentId(e))},setPath(e){safeDispatch()?.(r.slice.actions.setPath(e))},setOverridableProps(e,t){(0,o.__dispatch)(r.slice.actions.setOverridableProps({componentId:e,overridableProps:t}))},rename(e,t){(0,o.__dispatch)(r.slice.actions.rename({componentUid:e,name:t}))},cleanUpdatedComponentNames(){(0,o.__dispatch)(r.slice.actions.cleanUpdatedComponentNames())},updateComponentSanitizedAttribute(e,t){(0,o.__dispatch)(r.slice.actions.updateComponentSanitizedAttribute({componentId:e,attribute:t}))},resetSanitizedComponents(){(0,o.__dispatch)(r.slice.actions.resetSanitizedComponents())}}},"./packages/packages/core/editor-components/src/store/extensible-slice.ts":function(e,t,n){n.r(t),n.d(t,{__resetExtraReducers:function(){return __resetExtraReducers},createComponentsAction:function(){return createComponentsAction},registerComponentsReducer:function(){return registerComponentsReducer},slice:function(){return i}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store-types.ts"),s=n("./packages/packages/core/editor-components/src/store/thunks.ts");const c=new Map;function registerComponentsReducer(e,t){c.set(`${r.SLICE_NAME}/${e}`,t)}function createComponentsAction(e){const t=(0,o.__createAction)(`${r.SLICE_NAME}/${e}`);return{action:t,register(t){registerComponentsReducer(e,t)},dispatch(e){(0,o.__dispatch)(t(e))}}}function __resetExtraReducers(){c.clear()}const a=(0,o.__createSlice)({name:r.SLICE_NAME,initialState:r.initialState,reducers:{add:(e,{payload:t})=>{Array.isArray(t)?e.data=[...t,...e.data]:e.data.unshift(t)},load:(e,{payload:t})=>{e.data=t},addUnpublished:(e,{payload:t})=>{e.unpublishedData.unshift(t)},removeUnpublished:(e,{payload:t})=>{const n=Array.isArray(t)?t:[t];e.unpublishedData=e.unpublishedData.filter(e=>!n.includes(e.uid))},resetUnpublished:e=>{e.unpublishedData=[]},removeStyles(e,{payload:t}){const{[t.id]:n,...o}=e.styles;e.styles=o},addStyles:(e,{payload:t})=>{e.styles={...e.styles,...t}},addCreatedThisSession:(e,{payload:t})=>{e.createdThisSession.push(t)},removeCreatedThisSession:(e,{payload:t})=>{e.createdThisSession=e.createdThisSession.filter(e=>e!==t)},archive:(e,{payload:t})=>{const n=e.data.find(e=>e.id===t);n&&(n.isArchived=!0,e.archivedThisSession.push(t))},setCurrentComponentId:(e,{payload:t})=>{e.currentComponentId=t},setPath:(e,{payload:t})=>{e.path=t},setOverridableProps:(e,{payload:t})=>{const n=e.data.find(e=>e.id===t.componentId);n&&(n.overridableProps=t.overridableProps)},loadOverridableProps:(e,{payload:t})=>{Object.keys(t).forEach(n=>{const o=Number(n),r=t[o],s=e.data.find(e=>e.id===o);s&&r&&(s.overridableProps=r)})},rename:(e,{payload:t})=>{const n=e.data.find(e=>e.uid===t.componentUid);n&&(n.id&&(e.updatedComponentNames[n.id]=t.name),n.name=t.name)},cleanUpdatedComponentNames:e=>{e.updatedComponentNames={}},updateComponentSanitizedAttribute:(e,{payload:{componentId:t,attribute:n}})=>{e.sanitized[t]||(e.sanitized[t]={}),e.sanitized[t][n]=!0},resetSanitizedComponents:e=>{e.sanitized={}}},extraReducers:e=>{e.addCase(s.loadComponents.fulfilled,(e,{payload:t})=>{e.data=t,e.loadStatus="idle"}),e.addCase(s.loadComponents.pending,e=>{e.loadStatus="pending"}),e.addCase(s.loadComponents.rejected,e=>{e.loadStatus="error"})}}),i={...a,reducer(e,t){const n=a.reducer(e,t),o=c.get(t.type);if(!o||!n)return n;const r=structuredClone(n);return o(r,t),r}}},"./packages/packages/core/editor-components/src/store/selectors.ts":function(e,t,n){n.r(t),n.d(t,{componentsSelectors:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");const s={getOverridableProps(e){return(0,r.selectOverridableProps)((0,o.__getState)(),e)},getCurrentComponent(){return(0,r.selectCurrentComponent)((0,o.__getState)())},getCurrentComponentId(){const e=function safeGetState(){return(0,o.__getStore)()?.getState()}();return e?(0,r.selectCurrentComponentId)(e):null},getUnpublishedComponents(){return(0,r.selectUnpublishedComponents)((0,o.__getState)())},getUpdatedComponentNames(){return(0,r.selectUpdatedComponentNames)((0,o.__getState)())},getArchivedThisSession(){return(0,r.selectArchivedThisSession)((0,o.__getState)())},getCreatedThisSession(){return(0,r.selectCreatedThisSession)((0,o.__getState)())},getComponents(){return(0,r.selectComponents)((0,o.__getState)())},getComponentByUid(e){return(0,r.selectComponentByUid)((0,o.__getState)(),e)}}},"./packages/packages/core/editor-components/src/store/store-types.ts":function(e,t,n){n.r(t),n.d(t,{SLICE_NAME:function(){return r},initialState:function(){return o}});const o={data:[],unpublishedData:[],loadStatus:"idle",styles:{},createdThisSession:[],archivedThisSession:[],path:[],currentComponentId:null,updatedComponentNames:{},sanitized:{}},r="components"},"./packages/packages/core/editor-components/src/store/store.ts":function(e,t,n){n.r(t),n.d(t,{SLICE_NAME:function(){return r.SLICE_NAME},__resetExtraReducers:function(){return s.__resetExtraReducers},createComponentsAction:function(){return s.createComponentsAction},initialState:function(){return r.initialState},registerComponentsReducer:function(){return s.registerComponentsReducer},selectArchivedThisSession:function(){return selectArchivedThisSession},selectComponent:function(){return selectComponent},selectComponentByUid:function(){return selectComponentByUid},selectComponents:function(){return c},selectCreatedThisSession:function(){return d},selectCurrentComponent:function(){return k},selectCurrentComponentId:function(){return f},selectData:function(){return selectData},selectFlatStyles:function(){return l},selectIsOverridablePropsLoaded:function(){return g},selectLoadIsError:function(){return p},selectLoadIsPending:function(){return i},selectOverridableProps:function(){return u},selectPath:function(){return v},selectStyles:function(){return selectStyles},selectUnpublishedComponents:function(){return a},selectUpdatedComponentNames:function(){return y},slice:function(){return s.slice},useComponent:function(){return useComponent},useCurrentComponent:function(){return useCurrentComponent},useCurrentComponentId:function(){return useCurrentComponentId},useIsSanitizedComponent:function(){return useIsSanitizedComponent},useOverridableProps:function(){return useOverridableProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store-types.ts"),s=n("./packages/packages/core/editor-components/src/store/extensible-slice.ts");const selectData=e=>e[r.SLICE_NAME].data,selectArchivedThisSession=e=>e[r.SLICE_NAME].archivedThisSession,selectLoadStatus=e=>e[r.SLICE_NAME].loadStatus,selectUnpublishedData=e=>e[r.SLICE_NAME].unpublishedData,getCurrentComponentId=e=>e[r.SLICE_NAME].currentComponentId,selectComponent=(e,t)=>e[r.SLICE_NAME].data.find(e=>e.id===t),useComponent=e=>(0,o.__useSelector)(t=>e?selectComponent(t,e):null),selectComponentByUid=(e,t)=>e[r.SLICE_NAME].data.find(e=>e.uid===t)??e[r.SLICE_NAME].unpublishedData.find(e=>e.uid===t),c=(0,o.__createSelector)(selectData,selectUnpublishedData,(e,t)=>[...t.map(e=>({uid:e.uid,name:e.name,overridableProps:e.overridableProps})),...e.filter(e=>!e.isArchived)]),a=(0,o.__createSelector)(selectUnpublishedData,e=>e),i=(0,o.__createSelector)(selectLoadStatus,e=>"pending"===e),p=(0,o.__createSelector)(selectLoadStatus,e=>"error"===e),selectStyles=e=>e[r.SLICE_NAME].styles??{},l=(0,o.__createSelector)(e=>e[r.SLICE_NAME].styles??{},(e,t=null)=>t,(e,t)=>null===t?Object.values(e).flat():Object.entries(e).filter(([e])=>e!==String(t)).map(([,e])=>e).flat()),d=(0,o.__createSelector)(e=>e[r.SLICE_NAME].createdThisSession,e=>e),m={props:{},groups:{items:{},order:[]}},u=(0,o.__createSelector)(selectComponent,e=>{if(e)return e.overridableProps??m}),useOverridableProps=e=>(0,o.__useSelector)(t=>e?u(t,e):null),g=(0,o.__createSelector)(selectComponent,e=>!!e?.overridableProps),v=(0,o.__createSelector)(e=>e[r.SLICE_NAME].path,e=>e),f=(0,o.__createSelector)(getCurrentComponentId,e=>e),k=(0,o.__createSelector)(selectData,getCurrentComponentId,(e,t)=>e.find(e=>e.id===t)),useCurrentComponentId=()=>(0,o.__useSelector)(f),useCurrentComponent=()=>(0,o.__useSelector)(k),y=(0,o.__createSelector)(e=>e[r.SLICE_NAME].updatedComponentNames,e=>Object.entries(e).map(([e,t])=>({componentId:Number(e),title:t}))),useIsSanitizedComponent=(e,t)=>{const n=(0,o.__useSelector)(e=>e[r.SLICE_NAME].sanitized);return!!e&&!!n[e]?.[t]}},"./packages/packages/core/editor-components/src/store/thunks.ts":function(e,t,n){n.r(t),n.d(t,{loadComponents:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts");const s=(0,o.__createAsyncThunk)("components/load",async()=>await r.apiClient.get())},"./packages/packages/core/editor-components/src/sync/before-save.ts":function(e,t,n){n.r(t),n.d(t,{beforeSave:function(){return beforeSave}});var o=n("./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts");const beforeSave=({container:e,status:t})=>{const n=e?.model.get("elements").toJSON?.()??[];return(0,o.publishDraftComponentsInPageBeforeSave)({elements:n,status:t})}},"./packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts":function(e,t,n){n.r(t),n.d(t,{initLoadComponentDataAfterInstanceAdded:function(){return initLoadComponentDataAfterInstanceAdded}});var o=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts");function initLoadComponentDataAfterInstanceAdded(){(0,o.registerDataHook)("after","document/elements/paste",(e,t)=>{load(t)}),(0,o.registerDataHook)("after","document/elements/import",(e,t)=>{load(t)})}function load(e){const t=Array.isArray(e)?e:[e];(0,r.loadComponentsAssets)(t.map(e=>e.model.toJSON()))}},"./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts":function(e,t,n){n.r(t),n.d(t,{publishDraftComponentsInPageBeforeSave:function(){return publishDraftComponentsInPageBeforeSave}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-notifications"),s=n("@elementor/http-client"),c=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-components/src/api.ts"),i=n("./packages/packages/core/editor-components/src/utils/get-component-documents.ts");const p="insufficient_permissions",l="https://go.elementor.com/go-pro-components-Instance-draft-failure/",d="component-publish-upgrade";async function publishDraftComponentsInPageBeforeSave({status:e,elements:t}){if("publish"!==e)return;const n=[...(await(0,i.getComponentDocuments)(t)).values()].filter(o.isDocumentDirty).map(e=>e.id);if(0!==n.length){try{await a.apiClient.updateStatuses(n,"publish")}catch(e){if(function isInsufficientPermissionsError(e){return e instanceof s.AxiosError&&e.response?.data?.code===p}(e))return void function notifyPublishUpgrade(){(0,r.notify)({type:"promotion",id:d,message:(0,c.__)("You have unpublished component on this page. You need a pro version to publish it.","elementor"),additionalActionProps:[{size:"small",variant:"contained",color:"promotion",href:l,target:"_blank",children:(0,c.__)("Upgrade Now","elementor")}]})}();throw e}n.forEach(e=>(0,o.invalidateDocumentData)(e))}}},"./packages/packages/core/editor-components/src/utils/component-document-data.ts":function(e,t,n){n.r(t),n.d(t,{getComponentDocumentData:function(){return getComponentDocumentData}});var o=n("@elementor/editor-documents");const getComponentDocumentData=async e=>{const t=(0,o.getV1DocumentsManager)();try{return await t.request(e)}catch{return null}}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts":function(e,t,n){n.r(t),n.d(t,{detachComponentInstance:function(){return detachComponentInstance}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-v1-adapters"),s=n("@elementor/store"),c=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),i=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),p=n("./packages/packages/core/editor-components/src/store/store.ts"),l=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts"),d=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),m=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts");async function detachComponentInstance({instanceId:e,componentId:t,trackingInfo:n}){const u=(0,o.getContainer)(e);if(!u)throw new Error(`Instance container with ID "${e}" not found.`);const g=await(0,l.getComponentDocumentData)(t);if(!g)throw new Error(`Component with ID "${t}" not found.`);const v=g.elements?.[0];if(!v)throw new Error(`Component with ID "${t}" has no root element.`);const f=(0,r.undoable)({do:()=>{const r=function extractInstanceOverrides(e){const t=e.model.toJSON().settings,n=i.componentInstancePropTypeUtil.extract(t?.component_instance),o=a.componentInstanceOverridesPropTypeUtil.extract(n?.overrides);return o??[]}(u),c=(0,m.resolveDetachedInstance)(v,r),l=(0,p.selectCurrentComponentId)((0,s.__getState)()),g=l?(0,p.selectOverridableProps)((0,s.__getState)(),l)??null:null,f=u.model.toJSON(),k=(0,o.replaceElement)({currentElementId:e,newElement:c,withHistory:!1}),y=(0,p.selectComponent)((0,s.__getState)(),t)?.uid;return(0,d.trackComponentEvent)({action:"detached",source:"user",component_uid:y,instance_id:e,location:n.location,secondary_location:n.secondaryLocation,trigger:n.trigger}),{detachedElement:k,detachedInstanceElementData:c,editedComponentOnDetach:l,overridablePropsBeforeDetach:g,originalInstanceModel:f}},undo:(e,{detachedElement:t,originalInstanceModel:n,overridablePropsBeforeDetach:r,editedComponentOnDetach:c})=>{const a=(0,o.replaceElement)({currentElementId:t.id,newElement:n,withHistory:!1}),i=(0,p.selectCurrentComponentId)((0,s.__getState)());return i&&i===c&&r&&(0,s.__dispatch)(p.slice.actions.setOverridableProps({componentId:i,overridableProps:r})),a},redo:(e,t,n)=>{const{detachedInstanceElementData:r}=t,c=(0,p.selectCurrentComponentId)((0,s.__getState)()),a=c?(0,p.selectOverridableProps)((0,s.__getState)(),c)??null:null,i=(0,o.replaceElement)({currentElementId:n.id,newElement:r,withHistory:!1});return{...t,detachedElement:i,editedComponentOnDetach:c,overridablePropsBeforeDetach:a}}},{title:(0,c.__)("Detach from Component","elementor"),subtitle:(0,c.__)("Instance detached","elementor")});return f()}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts":function(e,t,n){n.r(t),n.d(t,{detachComponentInstance:function(){return o.detachComponentInstance}});var o=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts")},"./packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts":function(e,t,n){n.r(t),n.d(t,{regenerateLocalStyleIds:function(){return regenerateLocalStyleIds}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-props");function regenerateLocalStyleIds(e){const t=e.styles;if(!t||0===Object.keys(t).length)return{styles:void 0,settings:void 0};const n={},o={};for(const[r,s]of Object.entries(t)){const t=generateLocalStyleId(e.id);n[t]={...s,id:t},o[r]=t}const s=e.settings;if(!s||0===Object.keys(s).length)return{styles:n,settings:void 0};const c={...s};for(const[e,t]of Object.entries(c))if(isClassesProp(t)&&t.value.length>0){const n=t.value.map(e=>o[e]??e);c[e]=r.classesPropTypeUtil.create(n)}return{styles:n,settings:c}}function isClassesProp(e){return r.classesPropTypeUtil.isValid(e)}function generateLocalStyleId(e){return`e-${e}-${(0,o.generateElementId)()}`}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts":function(e,t,n){n.r(t),n.d(t,{getOverridableOverride:function(){return getOverridableOverride},resolveDetachedInstance:function(){return resolveDetachedInstance}});var o=n("@elementor/editor-elements"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),c=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts"),a=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts");function resolveDetachedInstance(e,t){const n=function createOverrideMap(e){const t=new Map;return e.forEach(e=>{let n=null;if(r.componentInstanceOverridePropTypeUtil.isValid(e)?n=e:s.componentOverridablePropTypeUtil.isValid(e)&&(n=getOverridableOverride(e)),n){const e=n.value.override_key;t.set(e,n)}}),t}(t);return resolveElementRecursive(structuredClone(e),n)}function resolveElementRecursive(e,t){if(e.id=(0,o.generateElementId)(),e.styles){const{styles:t,settings:n}=(0,c.regenerateLocalStyleIds)(e);e.styles=t,n&&(e.settings={...e.settings,...n})}return e.settings&&(e.settings=(0,a.resolveOverridableSettings)(e,t)),e.elements?.length&&(e.elements=e.elements.map(e=>resolveElementRecursive(e,t))),e}function getOverridableOverride(e){if(!s.componentOverridablePropTypeUtil.isValid(e))return null;const t=s.componentOverridablePropTypeUtil.extract(e)?.origin_value;return r.componentInstanceOverridePropTypeUtil.isValid(t)?t:null}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts":function(e,t,n){n.r(t),n.d(t,{resolveOverridableSettings:function(){return resolveOverridableSettings}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),c=n("./packages/packages/core/editor-components/src/utils/is-component-instance.ts");function resolveOverridableSettings(e,t){return(0,c.isComponentInstance)({widgetType:e.widgetType,elType:e.elType})?function resolveOverridableSettingsForComponentInstance(e,t){const n=e.settings?.component_instance;if(!r.componentInstancePropTypeUtil.isValid(n))return e.settings??{};const o=n.value.overrides?.value;if(!o?.length)return e.settings??{};const s=o.map(e=>resolvePropValue(e,t,{isOverridableOverride:!0}));return{...e.settings,component_instance:{...n,value:{...n.value,overrides:{...n.value.overrides,value:s}}}}}(e,t):function resolveOverridableSettingsForElement(e,t){const n=e.settings?{...e.settings}:{};for(const[o,r]of Object.entries(e.settings??{}))n[o]=resolvePropValue(r,t);return n}(e,t)}function resolvePropValue(e,t,n){const{isOverridableOverride:r=!1}=n??{};if(!s.componentOverridablePropTypeUtil.isValid(e))return e;const c=e.value.override_key,a=t.get(c),i=s.componentOverridablePropTypeUtil.extract(e)?.origin_value;if(!a)return i;if(r)return function resolveOverridableOverride(e,t){if(!t||!o.componentInstanceOverridePropTypeUtil.isValid(t))return null;return o.componentInstanceOverridePropTypeUtil.create({override_value:e.value.override_value,override_key:t.value.override_key,schema_source:t.value.schema_source})}(a,i);const p=o.componentInstanceOverridePropTypeUtil.extract(a)?.override_value;return p}},"./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{filterValidOverridableProps:function(){return filterValidOverridableProps},isExposedPropValid:function(){return isExposedPropValid}});var o=n("./packages/packages/core/editor-components/src/utils/resolve-overrides-chain.ts");function filterValidOverridableProps(e,t){const n={};for(const[o,r]of Object.entries(e.props))isExposedPropValid(r,t)&&(n[o]=r);const o=new Set(Object.keys(n));return{props:n,groups:{items:Object.fromEntries(Object.entries(e.groups.items).map(([e,t])=>[e,{...t,props:t.props.filter(e=>o.has(e))}])),order:e.groups.order}}}function isExposedPropValid(e,t){const{isChainBroken:n}=(0,o.resolveOverridesChain)({outerOverridableProp:e,outerInstanceId:t});return!n}},"./packages/packages/core/editor-components/src/utils/format-component-elements-id.ts":function(e,t,n){n.r(t),n.d(t,{formatComponentElementsId:function(){return formatComponentElementsId}});var o=n("@elementor/utils");const r=7;function formatComponentElementsId(e,t){return e.map(e=>{const n=[...t,e.id],s=(0,o.hashString)(n.join("_"),r);return{...e,id:s,originId:e.id,elements:e.elements?formatComponentElementsId(e.elements,n):void 0}})}},"./packages/packages/core/editor-components/src/utils/get-component-documents.ts":function(e,t,n){n.r(t),n.d(t,{getComponentDocuments:function(){return getComponentDocuments}});var o=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts"),r=n("./packages/packages/core/editor-components/src/utils/is-component-instance.ts");async function getComponentDocuments(e,t=new Map){return async function getDocumentsMap(e,t){const n=await Promise.all(e.map(async e=>{const n=await t.get(e);return n?[e,n]:null}));return new Map(n.filter(e=>null!==e))}(await getComponentIds(e,t),t)}async function getComponentIds(e,t){const n=await Promise.all(e.map(async({widgetType:e,elType:n,elements:s,settings:c})=>{const a=[];if((0,r.isComponentInstance)({widgetType:e,elType:n})){const e=c?.component_instance?.value?.component_id.value;if(!e)return a;a.push(e),t.has(e)||t.set(e,(0,o.getComponentDocumentData)(e));const n=await t.get(e);s=n?.elements}if(s?.length){const e=await getComponentIds(s,t);a.push(...e)}return a}));return[...new Set(n.flat())]}},"./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts":function(e,t,n){n.r(t),n.d(t,{getContainerByOriginId:function(){return getContainerByOriginId}});var o=n("@elementor/editor-elements");function getContainerByOriginId(e,t){if(!t)return(0,o.getContainer)(e);const n=(0,o.getContainer)(t);if(!n)return null;const r=window;return r.elementor?.getContainerByKeyValue?.({key:"originId",value:e,parent:n.view})??null}},"./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts":function(e,t,n){n.r(t),n.d(t,{getOverridableProp:function(){return getOverridableProp}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function getOverridableProp({componentId:e,overrideKey:t}){const n=(0,r.selectOverridableProps)((0,o.__getState)(),e);if(n)return n.props[t]}},"./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts":function(e,t,n){n.r(t),n.d(t,{getPropTypeForComponentOverride:function(){return getPropTypeForComponentOverride}});var o=n("@elementor/editor-elements");const getPropTypeForComponentOverride=e=>{if(e.originPropFields)return getPropType(e.originPropFields);const{widgetType:t,propKey:n}=e;return getPropType({widgetType:t,propKey:n})};function getPropType({widgetType:e,propKey:t}){const n=(0,o.getWidgetsCache)()?.[e]?.atomic_props_schema;return n?.[t]}},"./packages/packages/core/editor-components/src/utils/is-component-instance.ts":function(e,t,n){n.r(t),n.d(t,{isComponentInstance:function(){return isComponentInstance}});var o=n("./packages/packages/core/editor-components/src/consts.ts");function isComponentInstance(e){return[e.widgetType,e.elType].includes(o.COMPONENT_WIDGET_TYPE)}},"./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts":function(e,t,n){n.r(t),n.d(t,{isProComponentsSupported:function(){return isProComponentsSupported},isProOutdatedForComponents:function(){return isProOutdatedForComponents}});var o=n("@elementor/utils");const r="4.0";function isProComponentsSupported(){return(0,o.hasProInstalled)()&&(0,o.isProAtLeast)(r)}function isProOutdatedForComponents(){return(0,o.hasProInstalled)()&&!(0,o.isProAtLeast)(r)}},"./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts":function(e,t,n){n.r(t),n.d(t,{getMatchingOverride:function(){return getMatchingOverride}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");function getMatchingOverride(e,t){return e?.find(e=>{const n=r.componentOverridablePropTypeUtil.extract(e);if(n){const e=o.componentInstanceOverridePropTypeUtil.extract(n.origin_value);return e?.override_key===t}return e.value.override_key===t})??null}},"./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts":function(e,t,n){n.r(t),n.d(t,{resolveOverridePropValue:function(){return resolveOverridePropValue}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");const resolveOverridePropValue=e=>{if(r.componentOverridablePropTypeUtil.isValid(e))return function getOverridableValue(e){const t=r.componentOverridablePropTypeUtil.extract(e);if(!t)return null;const n=o.componentInstanceOverridePropTypeUtil.isValid(t.origin_value);if(n)return getOverrideValue(t.origin_value);return t.origin_value}(e);return o.componentInstanceOverridePropTypeUtil.isValid(e)?getOverrideValue(e):e};function getOverrideValue(e){const t=o.componentInstanceOverridePropTypeUtil.extract(e);return t?t.override_value:null}},"./packages/packages/core/editor-components/src/utils/resolve-overrides-chain.ts":function(e,t,n){n.r(t),n.d(t,{buildOverridesMap:function(){return buildOverridesMap},resolveOverridesChain:function(){return resolveOverridesChain}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),c=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts"),i=n("./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts");function resolveOverridesChain({outerOverridableProp:e,outerInstanceId:t,overridesMapping:n={}}){if(!e.originPropFields){const o=(0,a.getContainerByOriginId)(e.elementId,t);if(!o)throw new Error(`Inner element not found inside instance. elementId: ${e.elementId}, instanceId: ${t}`);return{isChainBroken:!1,innerElement:o,overridesMapping:n}}const p=(0,a.getContainerByOriginId)(e.elementId,t);if(!p)return{isChainBroken:!0};const{componentId:l,overrides:d}=function extractComponentInstanceSettings(e){const t=e.settings?.get("component_instance"),n=s.componentInstancePropTypeUtil.extract(t),o=n?.component_id?.value,c=r.componentInstanceOverridesPropTypeUtil.extract(n?.overrides);return{componentId:o,overrides:c}}(p);if(!l)throw new Error(`Component ID not found for current instance. currentInstanceId: ${p.id}. outerInstanceId: ${t}`);const m=buildOverridesMap(n,d??[]),u=function findOverrideByOuterKey(e,t){if(!e)return null;const n=e.find(e=>{const n=c.componentOverridablePropTypeUtil.extract(e);return!!n&&n.override_key===t}),r=c.componentOverridablePropTypeUtil.extract(n)?.origin_value;if(!r||!o.componentInstanceOverridePropTypeUtil.isValid(r))return null;return r}(d,e.overrideKey),g=o.componentInstanceOverridePropTypeUtil.extract(u)?.override_key;if(!u||!g)return{isChainBroken:!0};const v=(0,i.getOverridableProp)({componentId:l,overrideKey:g});if(!v)throw new Error(`Overridable prop not found. componentId: ${l}, overrideKey: ${g}`);return resolveOverridesChain({outerOverridableProp:v,outerInstanceId:p.id,overridesMapping:m})}function buildOverridesMap(e,t){const n={...e};for(const r of t){const t=c.componentOverridablePropTypeUtil.extract(r);if(t){const r=o.componentInstanceOverridePropTypeUtil.extract(t.origin_value);if(!r)continue;const s=t.override_key,c=r.override_key,a=r.override_value,i=e[s];if(i){const e=i.value;n[c]={value:e??a,outermostKey:i.outermostKey??s};continue}n[c]={value:a,outermostKey:s}}else{const e=o.componentInstanceOverridePropTypeUtil.extract(r);if(!e)continue;const t=e.override_key,s=e.override_value;n[t]={value:s}}}return n}},"./packages/packages/core/editor-components/src/utils/switch-to-component.ts":function(e,t,n){n.r(t),n.d(t,{buildUniqueSelector:function(){return buildUniqueSelector},expandNavigator:function(){return expandNavigator},switchToComponent:function(){return switchToComponent}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-elements"),s=n("@elementor/editor-v1-adapters");async function switchToComponent(e,t,n){const s=function getSelector(e,t){if(e)return buildUniqueSelector(e);if(t)return`[data-id="${t}"]`;return}(n,t);(0,o.invalidateDocumentData)(e),await(0,o.switchToDocument)(e,{selector:s,mode:"autosave",setAsInitial:!1,shouldScroll:!1});const c=(0,r.getCurrentDocumentContainer)(),a=c?.children?.[0];a&&((0,r.selectElement)(a.id),expandNavigator())}async function expandNavigator(){await(0,s.__privateRunCommand)("navigator/expand-all")}function buildUniqueSelector(e){const t=[];let n=e.closest("[data-id]");for(;n;){const e=n.dataset.id;n.hasAttribute("data-elementor-id")&&t.unshift(`[data-id="${e}"]`),n=n.parentElement?.closest("[data-id]")??null}if(0===t.length){const t=e.closest("[data-id]");if(t?.dataset?.id)return`[data-id="${t.dataset.id}"]`}return t.join(" ")}},"./packages/packages/core/editor-components/src/utils/tracking.ts":function(e,t,n){n.r(t),n.d(t,{onElementDrop:function(){return onElementDrop},trackComponentEvent:function(){return trackComponentEvent}});var o=n("@elementor/events"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");const trackComponentEvent=({action:e,source:t,...n})=>{if("system"===t)return;const{dispatchEvent:r,config:s}=(0,o.getMixpanel)();if(!s?.names?.components?.[e])return;const c=s.names.components[e];r?.(c,{...n,source:t,"Feature name":"Components"})},onElementDrop=(e,t)=>{if("e-component"!==t?.model?.get("widgetType"))return;const n=t.model.get("editor_settings"),o=n?.title,c=n?.component_uid,a=t.id,i=(0,s.selectCreatedThisSession)((0,r.__getState)()),p=c&&i.includes(c),l=window.elementorCommon.eventsManager.config,{locations:d,secondaryLocations:m}=l;trackComponentEvent({action:"instanceAdded",source:"user",instance_id:a,component_uid:c,component_name:o,is_same_session_reuse:p,location:d.widgetPanel,secondary_location:m.componentsTab})}},"@elementor/editor":function(e){e.exports=window.elementorV2.editor},"@elementor/editor-canvas":function(e){e.exports=window.elementorV2.editorCanvas},"@elementor/editor-controls":function(e){e.exports=window.elementorV2.editorControls},"@elementor/editor-current-user":function(e){e.exports=window.elementorV2.editorCurrentUser},"@elementor/editor-documents":function(e){e.exports=window.elementorV2.editorDocuments},"@elementor/editor-editing-panel":function(e){e.exports=window.elementorV2.editorEditingPanel},"@elementor/editor-elements":function(e){e.exports=window.elementorV2.editorElements},"@elementor/editor-elements-panel":function(e){e.exports=window.elementorV2.editorElementsPanel},"@elementor/editor-global-classes":function(e){e.exports=window.elementorV2.editorGlobalClasses},"@elementor/editor-notifications":function(e){e.exports=window.elementorV2.editorNotifications},"@elementor/editor-panels":function(e){e.exports=window.elementorV2.editorPanels},"@elementor/editor-props":function(e){e.exports=window.elementorV2.editorProps},"@elementor/editor-styles-repository":function(e){e.exports=window.elementorV2.editorStylesRepository},"@elementor/editor-templates":function(e){e.exports=window.elementorV2.editorTemplates},"@elementor/editor-ui":function(e){e.exports=window.elementorV2.editorUi},"@elementor/editor-v1-adapters":function(e){e.exports=window.elementorV2.editorV1Adapters},"@elementor/events":function(e){e.exports=window.elementorV2.events},"@elementor/http-client":function(e){e.exports=window.elementorV2.httpClient},"@elementor/icons":function(e){e.exports=window.elementorV2.icons},"@elementor/schema":function(e){e.exports=window.elementorV2.schema},"@elementor/store":function(e){e.exports=window.elementorV2.store},"@elementor/ui":function(e){e.exports=window.elementorV2.ui},"@elementor/utils":function(e){e.exports=window.elementorV2.utils},"@wordpress/i18n":function(e){e.exports=window.wp.i18n},react:function(e){e.exports=window.React}},t={};function __webpack_require__(n){var o=t[n];if(void 0!==o)return o.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,{COMPONENT_WIDGET_TYPE:function(){return u.COMPONENT_WIDGET_TYPE},ComponentInstanceProvider:function(){return h.ComponentInstanceProvider},ComponentItem:function(){return r.ComponentItem},ComponentName:function(){return r.ComponentName},ComponentSearch:function(){return o.ComponentSearch},ComponentsList:function(){return s.ComponentsList},DetachAction:function(){return m.DetachAction},EditComponentAction:function(){return l.EditComponentAction},EmptySearchResult:function(){return s.EmptySearchResult},InstanceEmptyState:function(){return i.EmptyState},InstancePanelBody:function(){return p.InstancePanelBody},InstancePanelHeader:function(){return l.InstancePanelHeader},LoadingComponents:function(){return c.LoadingComponents},OverridablePropProvider:function(){return b.OverridablePropProvider},SLICE_NAME:function(){return w.SLICE_NAME},SearchProvider:function(){return a.SearchProvider},apiClient:function(){return t.apiClient},componentInstanceOverridePropTypeUtil:function(){return k.componentInstanceOverridePropTypeUtil},componentInstanceOverridesPropTypeUtil:function(){return y.componentInstanceOverridesPropTypeUtil},componentInstancePropTypeUtil:function(){return _.componentInstancePropTypeUtil},componentOverridablePropTypeUtil:function(){return C.componentOverridablePropTypeUtil},componentsActions:function(){return P.componentsActions},componentsSelectors:function(){return x.componentsSelectors},createComponentsAction:function(){return w.createComponentsAction},filterValidOverridableProps:function(){return O.filterValidOverridableProps},getComponentDocumentData:function(){return M.getComponentDocumentData},getContainerByOriginId:function(){return T.getContainerByOriginId},getOverridableProp:function(){return D.getOverridableProp},getPropTypeForComponentOverride:function(){return U.getPropTypeForComponentOverride},init:function(){return e.init},isComponentInstance:function(){return A.isComponentInstance},loadComponentsAssets:function(){return E.loadComponentsAssets},onElementDrop:function(){return L.onElementDrop},publishDraftComponentsInPageBeforeSave:function(){return S.publishDraftComponentsInPageBeforeSave},registerComponentsReducer:function(){return w.registerComponentsReducer},resolveOverridePropValue:function(){return V.resolveOverridePropValue},selectOverridableProps:function(){return w.selectOverridableProps},selectPath:function(){return w.selectPath},slice:function(){return w.slice},switchToComponent:function(){return N.switchToComponent},trackComponentEvent:function(){return L.trackComponentEvent},updateOverridableProp:function(){return I.updateOverridableProp},useComponentInstanceElement:function(){return b.useComponentInstanceElement},useComponents:function(){return g.useComponents},useComponentsPermissions:function(){return v.useComponentsPermissions},useCurrentComponent:function(){return w.useCurrentComponent},useCurrentComponentId:function(){return w.useCurrentComponentId},useFilteredComponents:function(){return s.useFilteredComponents},useInstancePanelData:function(){return d.useInstancePanelData},useIsSanitizedComponent:function(){return w.useIsSanitizedComponent},useOverridablePropValue:function(){return b.useOverridablePropValue},useOverridableProps:function(){return w.useOverridableProps},useSanitizeOverridableProps:function(){return f.useSanitizeOverridableProps}});var e=__webpack_require__("./packages/packages/core/editor-components/src/init.ts"),t=__webpack_require__("./packages/packages/core/editor-components/src/api.ts"),o=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx"),r=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx"),s=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx"),c=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx"),a=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx"),i=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx"),p=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx"),l=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx"),d=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts"),m=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx"),u=__webpack_require__("./packages/packages/core/editor-components/src/create-component-type.ts"),g=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-components.ts"),v=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),f=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts"),k=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),y=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),_=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),C=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),h=__webpack_require__("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),b=__webpack_require__("./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx"),E=__webpack_require__("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts"),I=__webpack_require__("./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts"),P=__webpack_require__("./packages/packages/core/editor-components/src/store/dispatchers.ts"),x=__webpack_require__("./packages/packages/core/editor-components/src/store/selectors.ts"),w=__webpack_require__("./packages/packages/core/editor-components/src/store/store.ts"),S=__webpack_require__("./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts"),O=__webpack_require__("./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts"),T=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts"),D=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts"),U=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts"),A=__webpack_require__("./packages/packages/core/editor-components/src/utils/is-component-instance.ts"),V=__webpack_require__("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),N=__webpack_require__("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),L=__webpack_require__("./packages/packages/core/editor-components/src/utils/tracking.ts"),M=__webpack_require__("./packages/packages/core/editor-components/src/utils/component-document-data.ts")}(),(window.elementorV2=window.elementorV2||{}).editorComponents=n}(),window.elementorV2.editorComponents?.init?.();
1 +(function(_elementor_editor, _elementor_editor_canvas, _elementor_editor_documents, _elementor_editor_editing_panel, _elementor_editor_elements_panel, _elementor_editor_embedded_documents_manager, _elementor_editor_v1_adapters, _elementor_store, _wordpress_i18n, _elementor_http_client, react, _elementor_editor_ui, _elementor_ui, _elementor_utils, _elementor_icons, _elementor_editor_current_user, _elementor_editor_notifications, _elementor_editor_elements, _elementor_editor_props, _elementor_schema, _elementor_events, _elementor_editor_panels, _elementor_editor_controls, _elementor_editor_templates) {
2 +
3 +//#region \0rolldown/runtime.js
4 + var __create = Object.create;
5 + var __defProp$1 = Object.defineProperty;
6 + var __name = (target, value) => __defProp$1(target, "name", {
7 + value,
8 + configurable: true
9 + });
10 + var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
11 + var __getOwnPropNames = Object.getOwnPropertyNames;
12 + var __getProtoOf = Object.getPrototypeOf;
13 + var __hasOwnProp = Object.prototype.hasOwnProperty;
14 + var __exportAll = (all, no_symbols) => {
15 + let target = {};
16 + for (var name in all) {
17 + __defProp$1(target, name, {
18 + get: all[name],
19 + enumerable: true
20 + });
21 + }
22 + if (!no_symbols) {
23 + __defProp$1(target, Symbol.toStringTag, { value: "Module" });
24 + }
25 + return target;
26 + };
27 + var __copyProps = (to, from, except, desc) => {
28 + if (from && typeof from === "object" || typeof from === "function") {
29 + for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
30 + key = keys[i];
31 + if (!__hasOwnProp.call(to, key) && key !== except) {
32 + __defProp$1(to, key, {
33 + get: ((k) => from[k]).bind(null, key),
34 + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
35 + });
36 + }
37 + }
38 + }
39 + return to;
40 + };
41 + var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp$1(target, "default", {
42 + value: mod,
43 + enumerable: true
44 + }) : target, mod));
45 +
46 +//#endregion
47 +react = __toESM(react);
48 +
49 +//#region packages/packages/core/editor-components/src/store/store-types.ts
50 + var initialState = {
51 + data: [],
52 + unpublishedData: [],
53 + loadStatus: "idle",
54 + createdThisSession: [],
55 + archivedThisSession: [],
56 + path: [],
57 + currentComponentId: null,
58 + updatedComponentNames: {},
59 + sanitized: {}
60 + };
61 + var SLICE_NAME = "components";
62 +
63 +//#endregion
64 +//#region packages/packages/core/editor-components/src/api.ts
65 + var BASE_URL = "elementor/v1/components";
66 + var getParams = (id) => ({
67 + action: "get_document_config",
68 + unique_id: `document-config-${id}`,
69 + data: { id }
70 + });
71 + var apiClient = {
72 + get: () => (0, _elementor_http_client.httpService)().get(`${BASE_URL}`).then((res) => res.data.data),
73 + create: (payload) => (0, _elementor_http_client.httpService)().post(`${BASE_URL}`, payload).then((res) => res.data.data),
74 + updateStatuses: (ids, status) => (0, _elementor_http_client.httpService)().put(`${BASE_URL}/status`, {
75 + ids,
76 + status
77 + }),
78 + getComponentConfig: (id) => _elementor_editor_v1_adapters.ajax.load(getParams(id)),
79 + invalidateComponentConfigCache: (id) => _elementor_editor_v1_adapters.ajax.invalidateCache(getParams(id)),
80 + getComponentLockStatus: async (componentId) => await (0, _elementor_http_client.httpService)().get(`${BASE_URL}/lock-status`, { params: { componentId } }).then((res) => {
81 + const { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data;
82 + return {
83 + isAllowedToSwitchDocument,
84 + lockedBy: lockedBy || ""
85 + };
86 + }),
87 + lockComponent: async (componentId) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/lock`, { componentId }).then((res) => res.data),
88 + unlockComponent: async (componentId) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/unlock`, { componentId }).then((res) => res.data),
89 + getOverridableProps: async (componentIds) => await (0, _elementor_http_client.httpService)().get(`${BASE_URL}/overridable-props`, { params: { "componentIds[]": componentIds } }).then((res) => res.data),
90 + updateArchivedComponents: async (componentIds, status) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/archive`, {
91 + componentIds,
92 + status
93 + }).then((res) => res.data.data),
94 + updateComponentTitle: (updatedComponentNames, status) => (0, _elementor_http_client.httpService)().post(`${BASE_URL}/update-titles`, {
95 + components: updatedComponentNames,
96 + status
97 + }).then((res) => res.data.data),
98 + validate: async (payload) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/create-validate`, payload).then((res) => res.data)
99 + };
100 +
101 +//#endregion
102 +//#region packages/packages/core/editor-components/src/store/thunks.ts
103 + var loadComponents = (0, _elementor_store.__createAsyncThunk)("components/load", async () => {
104 + return await apiClient.get();
105 + });
106 +
107 +//#endregion
108 +//#region packages/packages/core/editor-components/src/store/extensible-slice.ts
109 + var extraReducersMap = /* @__PURE__ */ new Map();
110 + function registerComponentsReducer(name, reducer) {
111 + extraReducersMap.set(`${SLICE_NAME}/${name}`, reducer);
112 + }
113 + function createComponentsAction(name) {
114 + const action = (0, _elementor_store.__createAction)(`${SLICE_NAME}/${name}`);
115 + return {
116 + action,
117 + register(reducer) {
118 + registerComponentsReducer(name, reducer);
119 + },
120 + dispatch(payload) {
121 + (0, _elementor_store.__dispatch)(action(payload));
122 + }
123 + };
124 + }
125 + var baseSlice = (0, _elementor_store.__createSlice)({
126 + name: SLICE_NAME,
127 + initialState,
128 + reducers: {
129 + add: (state, { payload }) => {
130 + if (Array.isArray(payload)) state.data = [...payload, ...state.data];
131 + else state.data.unshift(payload);
132 + },
133 + load: (state, { payload }) => {
134 + state.data = payload;
135 + },
136 + addUnpublished: (state, { payload }) => {
137 + state.unpublishedData.unshift(payload);
138 + },
139 + removeUnpublished: (state, { payload }) => {
140 + const uidsToRemove = Array.isArray(payload) ? payload : [payload];
141 + state.unpublishedData = state.unpublishedData.filter((component) => !uidsToRemove.includes(component.uid));
142 + },
143 + resetUnpublished: (state) => {
144 + state.unpublishedData = [];
145 + },
146 + addCreatedThisSession: (state, { payload }) => {
147 + state.createdThisSession.push(payload);
148 + },
149 + removeCreatedThisSession: (state, { payload }) => {
150 + state.createdThisSession = state.createdThisSession.filter((uid) => uid !== payload);
151 + },
152 + archive: (state, { payload }) => {
153 + const component = state.data.find((comp) => comp.id === payload);
154 + if (component) {
155 + component.isArchived = true;
156 + state.archivedThisSession.push(payload);
157 + }
158 + },
159 + setCurrentComponentId: (state, { payload }) => {
160 + state.currentComponentId = payload;
161 + },
162 + setPath: (state, { payload }) => {
163 + state.path = payload;
164 + },
165 + setOverridableProps: (state, { payload }) => {
166 + const component = state.data.find((comp) => comp.id === payload.componentId);
167 + if (!component) return;
168 + component.overridableProps = payload.overridableProps;
169 + },
170 + loadOverridableProps: (state, { payload }) => {
171 + Object.keys(payload).forEach((id) => {
172 + const componentId = Number(id);
173 + const overridableProps = payload[componentId];
174 + const component = state.data.find((comp) => comp.id === componentId);
175 + if (!component || !overridableProps) return;
176 + component.overridableProps = overridableProps;
177 + });
178 + },
179 + rename: (state, { payload }) => {
180 + const component = state.data.find((comp) => comp.uid === payload.componentUid);
181 + if (!component) return;
182 + if (component.id) state.updatedComponentNames[component.id] = payload.name;
183 + component.name = payload.name;
184 + },
185 + cleanUpdatedComponentNames: (state) => {
186 + state.updatedComponentNames = {};
187 + },
188 + updateComponentSanitizedAttribute: (state, { payload: { componentId, attribute } }) => {
189 + if (!state.sanitized[componentId]) state.sanitized[componentId] = {};
190 + state.sanitized[componentId][attribute] = true;
191 + },
192 + resetSanitizedComponents: (state) => {
193 + state.sanitized = {};
194 + }
195 + },
196 + extraReducers: (builder) => {
197 + builder.addCase(loadComponents.fulfilled, (state, { payload }) => {
198 + state.data = payload;
199 + state.loadStatus = "idle";
200 + });
201 + builder.addCase(loadComponents.pending, (state) => {
202 + state.loadStatus = "pending";
203 + });
204 + builder.addCase(loadComponents.rejected, (state) => {
205 + state.loadStatus = "error";
206 + });
207 + }
208 + });
209 + var slice = {
210 + ...baseSlice,
211 + reducer(state, action) {
212 + const nextState = baseSlice.reducer(state, action);
213 + const extraReducer = extraReducersMap.get(action.type);
214 + if (!extraReducer || !nextState) return nextState;
215 + const clonedState = structuredClone(nextState);
216 + extraReducer(clonedState, action);
217 + return clonedState;
218 + }
219 + };
220 +
221 +//#endregion
222 +//#region packages/packages/core/editor-components/src/store/store.ts
223 + var selectData = (state) => state[SLICE_NAME].data;
224 + var selectArchivedThisSession = (state) => state[SLICE_NAME].archivedThisSession;
225 + var selectLoadStatus = (state) => state[SLICE_NAME].loadStatus;
226 + var selectUnpublishedData = (state) => state[SLICE_NAME].unpublishedData;
227 + var getCreatedThisSession = (state) => state[SLICE_NAME].createdThisSession;
228 + var getPath = (state) => state[SLICE_NAME].path;
229 + var getCurrentComponentId = (state) => state[SLICE_NAME].currentComponentId;
230 + var selectComponent = (state, componentId) => state[SLICE_NAME].data.find((component) => component.id === componentId);
231 + var useComponent = (componentId) => {
232 + return (0, _elementor_store.__useSelector)((state) => componentId ? selectComponent(state, componentId) : null);
233 + };
234 + var selectComponentByUid = (state, componentUid) => state["components"].data.find((component) => component.uid === componentUid) ?? state["components"].unpublishedData.find((component) => component.uid === componentUid);
235 + var selectComponents = (0, _elementor_store.__createSelector)(selectData, selectUnpublishedData, (data, unpublishedData) => [...unpublishedData.map((item) => ({
236 + uid: item.uid,
237 + name: item.name,
238 + overridableProps: item.overridableProps
239 + })), ...data.filter((component) => !component.isArchived)]);
240 + var selectUnpublishedComponents = (0, _elementor_store.__createSelector)(selectUnpublishedData, (unpublishedData) => unpublishedData);
241 + var selectLoadIsPending = (0, _elementor_store.__createSelector)(selectLoadStatus, (status) => status === "pending");
242 + var selectLoadIsError = (0, _elementor_store.__createSelector)(selectLoadStatus, (status) => status === "error");
243 + var selectCreatedThisSession = (0, _elementor_store.__createSelector)(getCreatedThisSession, (createdThisSession) => createdThisSession);
244 + var DEFAULT_OVERRIDABLE_PROPS = {
245 + props: {},
246 + groups: {
247 + items: {},
248 + order: []
249 + }
250 + };
251 + var selectOverridableProps = (0, _elementor_store.__createSelector)(selectComponent, (component) => {
252 + if (!component) return;
253 + return component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;
254 + });
255 + var useOverridableProps = (componentId) => {
256 + return (0, _elementor_store.__useSelector)((state) => componentId ? selectOverridableProps(state, componentId) : null);
257 + };
258 + var selectIsOverridablePropsLoaded = (0, _elementor_store.__createSelector)(selectComponent, (component) => {
259 + return !!component?.overridableProps;
260 + });
261 + var selectPath = (0, _elementor_store.__createSelector)(getPath, (path) => path);
262 + var selectCurrentComponentId = (0, _elementor_store.__createSelector)(getCurrentComponentId, (currentComponentId) => currentComponentId);
263 + var selectCurrentComponent = (0, _elementor_store.__createSelector)(selectData, getCurrentComponentId, (data, currentComponentId) => data.find((component) => component.id === currentComponentId));
264 + var useCurrentComponentId = () => {
265 + return (0, _elementor_store.__useSelector)(selectCurrentComponentId);
266 + };
267 + var useCurrentComponent = () => {
268 + return (0, _elementor_store.__useSelector)(selectCurrentComponent);
269 + };
270 + var selectUpdatedComponentNames = (0, _elementor_store.__createSelector)((state) => state[SLICE_NAME].updatedComponentNames, (updatedComponentNames) => Object.entries(updatedComponentNames).map(([componentId, title]) => ({
271 + componentId: Number(componentId),
272 + title
273 + })));
274 + var useSanitizedComponents = () => {
275 + return (0, _elementor_store.__useSelector)((state) => state[SLICE_NAME].sanitized);
276 + };
277 + var useIsSanitizedComponent = (componentId, key) => {
278 + const sanitizedComponents = useSanitizedComponents();
279 + if (!componentId) return false;
280 + return !!sanitizedComponents[componentId]?.[key];
281 + };
282 +
283 +//#endregion
284 +//#region packages/packages/core/editor-components/src/utils/component-document-data.ts
285 + var getComponentDocumentParams = (id) => ({
286 + action: "get_document_config",
287 + unique_id: `document-${id}`,
288 + data: { id }
289 + });
290 + var pendingRequests = /* @__PURE__ */ new Map();
291 + var getComponentDocumentData = (id) => {
292 + const pendingRequest = pendingRequests.get(id);
293 + if (pendingRequest) return pendingRequest;
294 + const request = _elementor_editor_v1_adapters.ajax.load(getComponentDocumentParams(id)).catch(() => null).finally(() => pendingRequests.delete(id));
295 + pendingRequests.set(id, request);
296 + return request;
297 + };
298 +
299 +//#endregion
300 +//#region packages/packages/core/editor-components/src/component-instance-transformer.ts
301 + var componentInstanceTransformer = (0, _elementor_editor_canvas.createTransformer)(async ({ component_id: id, overrides: overridesValue }) => {
302 + const unpublishedComponent = selectUnpublishedComponents((0, _elementor_store.__getState)()).find(({ uid }) => uid === id);
303 + const overrides = overridesValue?.reduce((acc, override) => ({
304 + ...acc,
305 + ...override
306 + }), {});
307 + if (unpublishedComponent) return {
308 + elements: structuredClone(unpublishedComponent.elements),
309 + overrides
310 + };
311 + if (typeof id !== "number") throw new Error(`Component ID "${id}" not valid.`);
312 + return {
313 + elements: (await getComponentDocumentData(id))?.elements ?? [],
314 + overrides
315 + };
316 + });
317 +
318 +//#endregion
319 +//#region packages/packages/core/editor-components/src/component-overridable-transformer.ts
320 + var componentOverridableTransformer = (0, _elementor_editor_canvas.createTransformer)((value, options) => {
321 + const { overrides } = options.renderContext ?? {};
322 + const overrideValue = overrides?.[value.override_key];
323 + if (overrideValue) {
324 + if (isOriginValueOverride(value.origin_value)) return transformOverride(value, options, overrideValue);
325 + return overrideValue;
326 + }
327 + return value.origin_value;
328 + });
329 + function transformOverride(value, options, overrideValue) {
330 + const transformer = _elementor_editor_canvas.settingsTransformersRegistry.get("override");
331 + if (!transformer) return null;
332 + const transformedValue = transformer(value.origin_value.value, options);
333 + if (!transformedValue) return null;
334 + const [key] = Object.keys(transformedValue);
335 + return { [key]: overrideValue };
336 + }
337 + function isOriginValueOverride(originValue) {
338 + return originValue.$$type === "override";
339 + }
340 +
341 +//#endregion
342 +//#region packages/packages/core/editor-components/src/component-override-transformer.ts
343 + var componentOverrideTransformer = (0, _elementor_editor_canvas.createTransformer)((override) => {
344 + const { override_key: key, override_value: overrideValue } = override;
345 + return { [key]: overrideValue };
346 + });
347 +
348 +//#endregion
349 +//#region packages/packages/core/editor-components/src/hooks/use-components.ts
350 + var useComponents = () => {
351 + return {
352 + components: (0, _elementor_store.__useSelector)(selectComponents),
353 + isLoading: (0, _elementor_store.__useSelector)(selectLoadIsPending)
354 + };
355 + };
356 +
357 +//#endregion
358 +//#region packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts
359 + var MIN_PRO_VERSION_FOR_COMPONENTS = "4.0";
360 + function isProComponentsSupported() {
361 + return (0, _elementor_utils.hasProInstalled)() && (0, _elementor_utils.isProAtLeast)(MIN_PRO_VERSION_FOR_COMPONENTS);
362 + }
363 + function isProOutdatedForComponents() {
364 + return (0, _elementor_utils.hasProInstalled)() && !(0, _elementor_utils.isProAtLeast)(MIN_PRO_VERSION_FOR_COMPONENTS);
365 + }
366 +
367 +//#endregion
368 +//#region packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx
369 + var SearchContext = (0, react.createContext)(void 0);
370 + var SearchProvider = ({ children, localStorageKey }) => {
371 + const { debouncedValue, handleChange, inputValue } = (0, _elementor_utils.useSearchState)({ localStorageKey });
372 + const clearSearch = () => {
373 + handleChange("");
374 + };
375 + return /* @__PURE__ */ react.createElement(SearchContext.Provider, { value: {
376 + handleChange,
377 + clearSearch,
378 + searchValue: debouncedValue,
379 + inputValue
380 + } }, children);
381 + };
382 + var useSearch = () => {
383 + const context = (0, react.useContext)(SearchContext);
384 + if (!context) throw new Error("useSearch must be used within a SearchProvider");
385 + return context;
386 + };
387 +
388 +//#endregion
389 +//#region packages/packages/core/editor-components/src/components/components-tab/component-search.tsx
390 + var ComponentSearch = () => {
391 + const { inputValue, handleChange } = useSearch();
392 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
393 + direction: "row",
394 + gap: .5,
395 + sx: {
396 + width: "100%",
397 + px: 2,
398 + py: 1.5
399 + }
400 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { flexGrow: 1 } }, /* @__PURE__ */ react.createElement(_elementor_ui.TextField, {
401 + role: "search",
402 + fullWidth: true,
403 + size: "tiny",
404 + value: inputValue,
405 + placeholder: (0, _wordpress_i18n.__)("Search", "elementor"),
406 + onChange: (e) => handleChange(e.target.value),
407 + InputProps: { startAdornment: /* @__PURE__ */ react.createElement(_elementor_ui.InputAdornment, { position: "start" }, /* @__PURE__ */ react.createElement(_elementor_icons.SearchIcon, { fontSize: "tiny" })) }
408 + })));
409 + };
410 +
411 +//#endregion
412 +//#region packages/packages/core/editor-components/src/hooks/use-components-permissions.ts
413 + var useComponentsPermissions = () => {
414 + const { isAdmin } = (0, _elementor_editor_current_user.useCurrentUserCapabilities)();
415 + return {
416 + canCreate: isAdmin,
417 + canEdit: isAdmin,
418 + canDelete: isAdmin,
419 + canRename: isAdmin
420 + };
421 + };
422 +
423 +//#endregion
424 +//#region packages/packages/core/editor-components/src/components/components-tab/components-item.tsx
425 + var ComponentItem = (0, react.forwardRef)(({ component, disabled = true, draggable, onDragStart, onDragEnd, onClick, isEditing = false, error = null, nameSlot, endSlot, ...props }, ref) => {
426 + return /* @__PURE__ */ react.createElement(_elementor_ui.ListItemButton, {
427 + disabled,
428 + draggable,
429 + onDragStart,
430 + onDragEnd,
431 + shape: "rounded",
432 + ref,
433 + sx: {
434 + border: "solid 1px",
435 + borderColor: "divider",
436 + py: .5,
437 + px: 1,
438 + display: "flex",
439 + width: "100%",
440 + alignItems: "center",
441 + gap: 1
442 + },
443 + ...props
444 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
445 + display: "flex",
446 + alignItems: "center",
447 + gap: 1,
448 + minWidth: 0,
449 + flexGrow: 1,
450 + onClick
451 + }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemIcon, { size: "tiny" }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, { fontSize: "tiny" })), /* @__PURE__ */ react.createElement(Indicator, {
452 + isActive: isEditing,
453 + isError: !!error
454 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
455 + display: "flex",
456 + flex: 1,
457 + minWidth: 0,
458 + flexGrow: 1
459 + }, nameSlot ?? /* @__PURE__ */ react.createElement(ComponentName, { name: component.name })))), endSlot);
460 + });
461 + var Indicator = (0, _elementor_ui.styled)(_elementor_ui.Box, { shouldForwardProp: (prop) => prop !== "isActive" && prop !== "isError" })(({ theme, isActive, isError }) => ({
462 + display: "flex",
463 + width: "100%",
464 + flexGrow: 1,
465 + borderRadius: theme.spacing(.5),
466 + border: getIndicatorBorder({
467 + isActive,
468 + isError,
469 + theme
470 + }),
471 + padding: `0 ${theme.spacing(1)}`,
472 + marginLeft: isActive ? theme.spacing(1) : 0,
473 + minWidth: 0
474 + }));
475 + var getIndicatorBorder = ({ isActive, isError, theme }) => {
476 + if (isError) return `2px solid ${theme.palette.error.main}`;
477 + if (isActive) return `2px solid ${theme.palette.secondary.main}`;
478 + return "none";
479 + };
480 + function ComponentName({ name, editable }) {
481 + if (editable?.isEditing) return /* @__PURE__ */ react.createElement(_elementor_editor_ui.EditableField, {
482 + ref: editable.ref,
483 + as: _elementor_ui.Typography,
484 + variant: "caption",
485 + ...editable.getProps()
486 + });
487 + return /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, {
488 + title: name,
489 + as: _elementor_ui.Typography,
490 + variant: "caption",
491 + color: "text.primary"
492 + });
493 + }
494 +
495 +//#endregion
496 +//#region packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx
497 + var ROWS = Array.from({ length: 3 }, (_, index) => index);
498 + var STAGGER_DELAY_MS = 80;
499 + var LoadingComponents = () => {
500 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
501 + "aria-label": "Loading components",
502 + gap: 1.5,
503 + sx: {
504 + pointerEvents: "none",
505 + position: "relative",
506 + maxHeight: "300px",
507 + overflow: "hidden",
508 + px: 1,
509 + "&:after": {
510 + position: "absolute",
511 + bottom: 0,
512 + content: "\"\"",
513 + left: 0,
514 + width: "100%",
515 + height: "40%",
516 + pointerEvents: "none",
517 + zIndex: 1
518 + }
519 + }
520 + }, ROWS.map((row) => /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
521 + key: row,
522 + display: "flex",
523 + alignItems: "center",
524 + gap: 1.5,
525 + sx: {
526 + py: .75,
527 + px: 1.5,
528 + opacity: 0,
529 + animation: `e-loading-fade-in 0.4s ease-out ${row * STAGGER_DELAY_MS}ms forwards`,
530 + "@keyframes e-loading-fade-in": {
531 + from: {
532 + opacity: 0,
533 + transform: "translateY(4px)"
534 + },
535 + to: {
536 + opacity: 1,
537 + transform: "translateY(0)"
538 + }
539 + }
540 + }
541 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Skeleton, {
542 + animation: "wave",
543 + variant: "rounded",
544 + width: 24,
545 + height: 24
546 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Skeleton, {
547 + animation: "wave",
548 + variant: "rounded",
549 + width: "60%",
550 + height: 14
551 + }))));
552 + };
553 +
554 +//#endregion
555 +//#region packages/packages/core/editor-components/src/components/components-tab/components-list.tsx
556 + var LEARN_MORE_URL = "http://go.elementor.com/components-guide-article";
557 + var UPGRADE_URL$1 = "https://go.elementor.com/go-pro-components/";
558 + var UPDATE_PLUGINS_URL$2 = "/wp-admin/plugins.php";
559 + var SUBTITLE_OVERRIDE_SX = {
560 + fontSize: "0.875rem !important",
561 + fontWeight: "500 !important"
562 + };
563 + function ComponentsList() {
564 + const { components, isLoading, searchValue } = useFilteredComponents();
565 + if (isLoading) return /* @__PURE__ */ react.createElement(LoadingComponents, null);
566 + if (!components?.length) {
567 + if (searchValue.length) return /* @__PURE__ */ react.createElement(EmptySearchResult, null);
568 + if (isProOutdatedForComponents()) return /* @__PURE__ */ react.createElement(ProOutdatedEmptyState, null);
569 + return isProComponentsSupported() ? /* @__PURE__ */ react.createElement(EmptyState$1, null) : /* @__PURE__ */ react.createElement(ProUpgradeEmptyState, null);
570 + }
571 + return /* @__PURE__ */ react.createElement(_elementor_ui.List, { sx: {
572 + display: "flex",
573 + flexDirection: "column",
574 + gap: 1,
575 + px: 2
576 + } }, components.map((component) => /* @__PURE__ */ react.createElement(ComponentItem, {
577 + key: component.uid,
578 + component
579 + })));
580 + }
581 + var ProUpgradeEmptyState = () => {
582 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
583 + alignItems: "center",
584 + justifyContent: "start",
585 + height: "100%",
586 + sx: {
587 + px: 2,
588 + py: 4
589 + },
590 + gap: 2,
591 + overflow: "hidden"
592 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
593 + alignItems: "center",
594 + gap: 1
595 + }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, {
596 + fontSize: "large",
597 + sx: { color: "text.secondary" }
598 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
599 + align: "center",
600 + variant: "subtitle2",
601 + color: "text.secondary",
602 + sx: SUBTITLE_OVERRIDE_SX
603 + }, (0, _wordpress_i18n.__)("Create Reusable Components", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
604 + align: "center",
605 + variant: "caption",
606 + color: "secondary",
607 + sx: { maxWidth: 200 }
608 + }, (0, _wordpress_i18n.__)("Create design elements that sync across your entire site.", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
609 + variant: "contained",
610 + color: "promotion",
611 + size: "small",
612 + startIcon: /* @__PURE__ */ react.createElement(_elementor_icons.CrownFilledIcon, null),
613 + href: UPGRADE_URL$1,
614 + target: "_blank",
615 + rel: "noopener noreferrer"
616 + }, (0, _wordpress_i18n.__)("Upgrade now", "elementor")));
617 + };
618 + var ProOutdatedEmptyState = () => {
619 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
620 + alignItems: "center",
621 + justifyContent: "start",
622 + height: "100%",
623 + sx: {
624 + px: 2,
625 + py: 4,
626 + maxWidth: 268,
627 + m: "auto"
628 + },
629 + gap: 2,
630 + overflow: "hidden"
631 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
632 + alignItems: "center",
633 + gap: 1
634 + }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, {
635 + fontSize: "large",
636 + sx: { color: "text.secondary" }
637 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
638 + align: "center",
639 + variant: "subtitle2",
640 + color: "text.secondary",
641 + sx: SUBTITLE_OVERRIDE_SX
642 + }, (0, _wordpress_i18n.__)("Create Reusable Components", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
643 + align: "center",
644 + variant: "caption",
645 + color: "secondary"
646 + }, (0, _wordpress_i18n.__)("Create design elements that sync across your entire site.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
647 + align: "center",
648 + variant: "caption",
649 + color: "secondary",
650 + sx: { mt: 1 }
651 + }, (0, _wordpress_i18n.__)("To create components, update Elementor Pro to the latest version.", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
652 + variant: "text",
653 + color: "info",
654 + size: "small",
655 + href: UPDATE_PLUGINS_URL$2,
656 + target: "_blank",
657 + rel: "noopener noreferrer"
658 + }, (0, _wordpress_i18n.__)("Update Elementor Pro", "elementor")));
659 + };
660 + var EmptyState$1 = /* @__PURE__ */ __name(() => {
661 + const { canCreate } = useComponentsPermissions();
662 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
663 + alignItems: "center",
664 + justifyContent: "start",
665 + height: "100%",
666 + sx: {
667 + px: 2,
668 + py: 4
669 + },
670 + gap: 2,
671 + overflow: "hidden"
672 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
673 + alignItems: "center",
674 + gap: 1
675 + }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, {
676 + fontSize: "large",
677 + sx: { color: "text.secondary" }
678 + }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
679 + align: "center",
680 + variant: "subtitle2",
681 + color: "text.secondary",
682 + sx: SUBTITLE_OVERRIDE_SX
683 + }, (0, _wordpress_i18n.__)("No components yet", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
684 + align: "center",
685 + variant: "caption",
686 + color: "secondary",
687 + sx: { maxWidth: 200 }
688 + }, (0, _wordpress_i18n.__)("Components are reusable blocks that sync across your site.", "elementor"), /* @__PURE__ */ react.createElement("br", null), canCreate ? (0, _wordpress_i18n.__)("Create once, use everywhere.", "elementor") : (0, _wordpress_i18n.__)("With your current role, you cannot create components. Contact an administrator to create one.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Link, {
689 + href: LEARN_MORE_URL,
690 + target: "_blank",
691 + rel: "noopener noreferrer",
692 + variant: "caption",
693 + color: "info.main"
694 + }, (0, _wordpress_i18n.__)("Learn more about components", "elementor"))), canCreate && /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.Divider, { sx: { width: "100%" } }), /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
695 + alignItems: "center",
696 + gap: 1,
697 + width: "100%"
698 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
699 + align: "center",
700 + variant: "subtitle2",
701 + color: "text.secondary",
702 + sx: SUBTITLE_OVERRIDE_SX
703 + }, (0, _wordpress_i18n.__)("Create your first one:", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
704 + align: "center",
705 + variant: "caption",
706 + color: "secondary",
707 + sx: { maxWidth: 228 }
708 + }, (0, _wordpress_i18n.__)("Right-click any div-block or flexbox on your canvas or structure and select \"Create component\"", "elementor")))));
709 + }, "EmptyState");
710 + var EmptySearchResult = () => {
711 + const { searchValue, clearSearch } = useSearch();
712 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
713 + color: "text.secondary",
714 + pt: 5,
715 + alignItems: "center",
716 + gap: 1,
717 + overflow: "hidden",
718 + justifySelf: "center"
719 + }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, null), /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { width: "100%" } }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
720 + align: "center",
721 + variant: "subtitle2",
722 + color: "inherit",
723 + sx: SUBTITLE_OVERRIDE_SX
724 + }, (0, _wordpress_i18n.__)("Sorry, nothing matched", "elementor")), searchValue && /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
725 + variant: "subtitle2",
726 + color: "inherit",
727 + sx: {
728 + ...SUBTITLE_OVERRIDE_SX,
729 + display: "flex",
730 + width: "100%",
731 + justifyContent: "center"
732 + }
733 + }, /* @__PURE__ */ react.createElement("span", null, "“"), /* @__PURE__ */ react.createElement("span", { style: {
734 + maxWidth: "80%",
735 + overflow: "hidden",
736 + textOverflow: "ellipsis"
737 + } }, searchValue), /* @__PURE__ */ react.createElement("span", null, "”."))), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
738 + align: "center",
739 + variant: "caption",
740 + color: "inherit"
741 + }, (0, _wordpress_i18n.__)("Try something else.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
742 + align: "center",
743 + variant: "caption",
744 + color: "inherit"
745 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Link, {
746 + color: "secondary",
747 + variant: "caption",
748 + component: "button",
749 + onClick: clearSearch
750 + }, (0, _wordpress_i18n.__)("Clear & try again", "elementor"))));
751 + };
752 + var useFilteredComponents = () => {
753 + const { components, isLoading } = useComponents();
754 + const { searchValue } = useSearch();
755 + return {
756 + components: components.filter((component) => component.name.toLowerCase().includes(searchValue.toLowerCase())),
757 + isLoading,
758 + searchValue
759 + };
760 + };
761 +
762 +//#endregion
763 +//#region packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx
764 + function ComponentsUpgradeAlert({ title, description, upgradeUrl }) {
765 + return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
766 + mt: "auto",
767 + position: "sticky",
768 + bottom: 0
769 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.Alert, {
770 + variant: "standard",
771 + color: "promotion",
772 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.CrownFilledIcon, { fontSize: "tiny" }),
773 + role: "status",
774 + size: "small",
775 + action: /* @__PURE__ */ react.createElement(_elementor_ui.AlertAction, {
776 + variant: "contained",
777 + color: "promotion",
778 + href: upgradeUrl,
779 + target: "_blank",
780 + rel: "noopener noreferrer"
781 + }, (0, _wordpress_i18n.__)("Upgrade now", "elementor")),
782 + sx: {
783 + m: 2,
784 + mt: 1
785 + }
786 + }, /* @__PURE__ */ react.createElement(_elementor_ui.AlertTitle, null, title), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "caption" }, description)));
787 + }
788 +
789 +//#endregion
790 +//#region packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx
791 + var UPGRADE_URL = "https://go.elementor.com/go-pro-components-exist-footer/";
792 + function ComponentsProNotification() {
793 + return /* @__PURE__ */ react.createElement(ComponentsUpgradeAlert, {
794 + title: (0, _wordpress_i18n.__)("Create new components", "elementor"),
795 + description: (0, _wordpress_i18n.__)("Creating new components requires an active Pro subscription.", "elementor"),
796 + upgradeUrl: UPGRADE_URL
797 + });
798 + }
799 +
800 +//#endregion
801 +//#region packages/packages/core/editor-components/src/components/components-update-alert.tsx
802 + var UPDATE_PLUGINS_URL$1 = "/wp-admin/plugins.php";
803 + function ComponentsUpdateAlert({ title, description }) {
804 + return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
805 + mt: "auto",
806 + position: "sticky",
807 + bottom: 0
808 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.Alert, {
809 + variant: "standard",
810 + color: "info",
811 + icon: /* @__PURE__ */ react.createElement(_elementor_icons.InfoCircleFilledIcon, { fontSize: "tiny" }),
812 + role: "status",
813 + size: "small",
814 + action: /* @__PURE__ */ react.createElement(_elementor_ui.AlertAction, {
815 + variant: "contained",
816 + color: "info",
817 + href: UPDATE_PLUGINS_URL$1,
818 + target: "_blank",
819 + rel: "noopener noreferrer"
820 + }, (0, _wordpress_i18n.__)("Upgrade Now", "elementor")),
821 + sx: {
822 + m: 2,
823 + mt: 1
824 + }
825 + }, /* @__PURE__ */ react.createElement(_elementor_ui.AlertTitle, null, title), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "caption" }, description)));
826 + }
827 +
828 +//#endregion
829 +//#region packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx
830 + function ComponentsUpdateNotification() {
831 + return /* @__PURE__ */ react.createElement(ComponentsUpdateAlert, {
832 + title: (0, _wordpress_i18n.__)("Create new Components", "elementor"),
833 + description: (0, _wordpress_i18n.__)("To create new components, update Elementor Pro to the latest version.", "elementor")
834 + });
835 + }
836 +
837 +//#endregion
838 +//#region packages/packages/core/editor-components/src/components/components-tab/components.tsx
839 + var FULL_HEIGHT_STYLE_ID = "components-full-height-panel";
840 + var FULL_HEIGHT_CSS = `
841 +#elementor-panel-page-elements {
842 + display: flex;
843 + flex-direction: column;
844 + height: 100%;
845 +}
846 +
847 +#elementor-panel-elements {
848 + display: flex;
849 + flex-direction: column;
850 + flex: 1;
851 + min-height: 0;
852 +}
853 +
854 +#elementor-panel-elements-wrapper {
855 + display: flex;
856 + flex-direction: column;
857 + flex: 1;
858 + min-height: 0;
859 +}
860 +`;
861 + var useFullHeightPanel = () => {
862 + (0, react.useLayoutEffect)(() => {
863 + let style = document.getElementById(FULL_HEIGHT_STYLE_ID);
864 + if (!style) {
865 + style = document.createElement("style");
866 + style.id = FULL_HEIGHT_STYLE_ID;
867 + style.textContent = FULL_HEIGHT_CSS;
868 + document.head.appendChild(style);
869 + }
870 + return () => {
871 + document.getElementById(FULL_HEIGHT_STYLE_ID)?.remove();
872 + };
873 + }, []);
874 + };
875 + var ComponentsContent = () => {
876 + const { components, isLoading } = useComponents();
877 + const hasComponents = !isLoading && components.length > 0;
878 + const showProNotification = !isProComponentsSupported() && hasComponents;
879 + const isOutdated = isProOutdatedForComponents();
880 + useFullHeightPanel();
881 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
882 + justifyContent: "space-between",
883 + sx: {
884 + flex: 1,
885 + minHeight: 0
886 + }
887 + }, hasComponents && /* @__PURE__ */ react.createElement(ComponentSearch, null), /* @__PURE__ */ react.createElement(ComponentsList, null), showProNotification && (isOutdated ? /* @__PURE__ */ react.createElement(ComponentsUpdateNotification, null) : /* @__PURE__ */ react.createElement(ComponentsProNotification, null)));
888 + };
889 + var Components = () => {
890 + return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ThemeProvider, null, /* @__PURE__ */ react.createElement(SearchProvider, { localStorageKey: "elementor-components-search" }, /* @__PURE__ */ react.createElement(ComponentsContent, null)));
891 + };
892 +
893 +//#endregion
894 +//#region packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx
895 + function DetachInstanceConfirmationDialog({ open, onClose, onConfirm }) {
896 + return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog, {
897 + open,
898 + onClose
899 + }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Title, {
900 + icon: _elementor_icons.AlertTriangleFilledIcon,
901 + iconColor: "secondary"
902 + }, (0, _wordpress_i18n.__)("Detach from Component?", "elementor")), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Content, null, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.ContentText, null, (0, _wordpress_i18n.__)("Detaching this instance will break its link to the Component. Changes to the Component will no longer apply. Continue?", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Actions, {
903 + onClose,
904 + onConfirm,
905 + confirmLabel: (0, _wordpress_i18n.__)("Detach", "elementor"),
906 + color: "primary"
907 + }));
908 + }
909 + function openDetachConfirmDialog(onConfirm) {
910 + const handleConfirm = () => {
911 + (0, _elementor_editor_ui.closeDialog)();
912 + onConfirm();
913 + };
914 + (0, _elementor_editor_ui.openDialog)({ component: /* @__PURE__ */ react.createElement(DetachInstanceConfirmationDialog, {
915 + open: true,
916 + onClose: _elementor_editor_ui.closeDialog,
917 + onConfirm: handleConfirm
918 + }) });
919 + }
920 +
921 +//#endregion
922 +//#region packages/packages/core/editor-components/src/components/in-edit-mode.tsx
923 + var openEditModeDialog = (lockedBy) => {
924 + (0, _elementor_editor_ui.openDialog)({ component: /* @__PURE__ */ react.createElement(EditModeDialog, { lockedBy }) });
925 + };
926 + var EditModeDialog = ({ lockedBy }) => {
927 + const content = (0, _wordpress_i18n.__)("%s is currently editing this document", "elementor").replace("%s", lockedBy);
928 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.DialogHeader, { logo: false }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
929 + display: "flex",
930 + alignItems: "center",
931 + gap: 1
932 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Icon, { color: "secondary" }, /* @__PURE__ */ react.createElement(_elementor_icons.InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "subtitle1" }, content))), /* @__PURE__ */ react.createElement(_elementor_ui.DialogContent, null, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
933 + spacing: 2,
934 + direction: "column"
935 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "body2" }, (0, _wordpress_i18n.__)("You can wait for them to finish or reach out to coordinate your changes together.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.DialogActions, null, /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
936 + color: "secondary",
937 + variant: "contained",
938 + onClick: _elementor_editor_ui.closeDialog
939 + }, (0, _wordpress_i18n.__)("Close", "elementor"))))));
940 + };
941 +
942 +//#endregion
943 +//#region packages/packages/core/editor-components/src/provider/component-instance-context.tsx
944 + var ComponentInstanceContext = (0, react.createContext)(null);
945 + function ComponentInstanceProvider({ children, ...props }) {
946 + return /* @__PURE__ */ react.createElement(ComponentInstanceContext.Provider, { value: props }, children);
947 + }
948 + function useComponentInstanceContext() {
949 + const context = (0, react.useContext)(ComponentInstanceContext);
950 + if (!context) throw new Error("useComponentInstanceContext must be used within a ComponentInstanceProvider");
951 + return context;
952 + }
953 + var useComponentId = () => useComponentInstanceContext().componentId;
954 + var useComponentInstanceOverrides = () => useComponentInstanceContext().overrides;
955 + var useComponentOverridableProps = () => useComponentInstanceContext().overridableProps;
956 +
957 +//#endregion
958 +//#region packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts
959 + var componentInstanceOverridePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("override", _elementor_schema.z.object({
960 + override_key: _elementor_schema.z.string(),
961 + override_value: _elementor_schema.z.unknown(),
962 + schema_source: _elementor_schema.z.object({
963 + type: _elementor_schema.z.literal("component"),
964 + id: _elementor_schema.z.number()
965 + })
966 + }));
967 +
968 +//#endregion
969 +//#region packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts
970 + var componentOverridablePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("overridable", _elementor_schema.z.object({
971 + override_key: _elementor_schema.z.string(),
972 + origin_value: _elementor_schema.z.object({
973 + $$type: _elementor_schema.z.string(),
974 + value: _elementor_schema.z.unknown()
975 + }).nullable()
976 + }));
977 +
978 +//#endregion
979 +//#region packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts
980 + var componentInstanceOverridesPropTypeUtil = (0, _elementor_editor_props.createPropUtils)("overrides", _elementor_schema.z.array(_elementor_schema.z.union([componentInstanceOverridePropTypeUtil.schema, componentOverridablePropTypeUtil.schema])).optional().default([]));
981 +
982 +//#endregion
983 +//#region packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts
984 + var componentInstancePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("component-instance", _elementor_schema.z.object({
985 + component_id: _elementor_editor_props.numberPropTypeUtil.schema,
986 + overrides: _elementor_schema.z.optional(componentInstanceOverridesPropTypeUtil.schema)
987 + }));
988 +
989 +//#endregion
990 +//#region packages/packages/core/editor-components/src/utils/tracking.ts
991 + var FEATURE_NAME = "Components";
992 + var trackComponentEvent = ({ action, source, executedBy, ...data }) => {
993 + if (source === "system" || executedBy === "system") return;
994 + const { dispatchEvent, config } = (0, _elementor_events.getMixpanel)();
995 + if (!config?.names?.components?.[action]) return;
996 + const name = config.names.components[action];
997 + dispatchEvent?.(name, {
998 + ...data,
999 + executed_by: executedBy ?? source,
1000 + "Feature name": FEATURE_NAME
1001 + });
1002 + };
1003 + var onElementDrop = (_args, element) => {
1004 + if (!(element?.model?.get("widgetType") === "e-component")) return;
1005 + const editorSettings = element.model.get("editor_settings");
1006 + const componentName = editorSettings?.title;
1007 + const componentUID = editorSettings?.component_uid;
1008 + const instanceId = element.id;
1009 + const createdThisSession = selectCreatedThisSession((0, _elementor_store.__getState)());
1010 + const isSameSessionReuse = componentUID && createdThisSession.includes(componentUID);
1011 + const { locations, secondaryLocations } = window.elementorCommon.eventsManager.config;
1012 + trackComponentEvent({
1013 + action: "instanceAdded",
1014 + executedBy: "user",
1015 + instance_id: instanceId,
1016 + component_uid: componentUID,
1017 + component_name: componentName,
1018 + is_same_session_reuse: isSameSessionReuse,
1019 + location: locations.widgetPanel,
1020 + secondary_location: secondaryLocations.componentsTab
1021 + });
1022 + };
1023 +
1024 +//#endregion
1025 +//#region packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts
1026 + function regenerateLocalStyleIds(element) {
1027 + const originalStyles = element.styles;
1028 + if (!originalStyles || Object.keys(originalStyles).length === 0) return {
1029 + styles: void 0,
1030 + settings: void 0
1031 + };
1032 + const newStyles = {};
1033 + const styleIdMapping = {};
1034 + for (const [originalStyleId, style] of Object.entries(originalStyles)) {
1035 + const newStyleId = generateLocalStyleId(element.id);
1036 + newStyles[newStyleId] = {
1037 + ...style,
1038 + id: newStyleId
1039 + };
1040 + styleIdMapping[originalStyleId] = newStyleId;
1041 + }
1042 + const settings = element.settings;
1043 + if (!settings || Object.keys(settings).length === 0) return {
1044 + styles: newStyles,
1045 + settings: void 0
1046 + };
1047 + const updatedSettings = { ...settings };
1048 + for (const [propKey, propValue] of Object.entries(updatedSettings)) if (isClassesProp(propValue) && propValue.value.length > 0) {
1049 + const updatedClasses = propValue.value.map((classId) => styleIdMapping[classId] ?? classId);
1050 + updatedSettings[propKey] = _elementor_editor_props.classesPropTypeUtil.create(updatedClasses);
1051 + }
1052 + return {
1053 + styles: newStyles,
1054 + settings: updatedSettings
1055 + };
1056 + }
1057 + function isClassesProp(prop) {
1058 + return _elementor_editor_props.classesPropTypeUtil.isValid(prop);
1059 + }
1060 + function generateLocalStyleId(elementId) {
1061 + return `e-${elementId}-${(0, _elementor_editor_elements.generateElementId)()}`;
1062 + }
1063 +
1064 +//#endregion
1065 +//#region packages/packages/core/editor-components/src/consts.ts
1066 + var COMPONENT_WIDGET_TYPE$1 = "e-component";
1067 +
1068 +//#endregion
1069 +//#region packages/packages/core/editor-components/src/utils/is-component-instance.ts
1070 + function isComponentInstance(elementModel) {
1071 + return [elementModel.widgetType, elementModel.elType].includes(COMPONENT_WIDGET_TYPE$1);
1072 + }
1073 +
1074 +//#endregion
1075 +//#region packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts
1076 + function resolveOverridableSettings(element, overrideMap) {
1077 + if (isComponentInstance({
1078 + widgetType: element.widgetType,
1079 + elType: element.elType
1080 + })) return resolveOverridableSettingsForComponentInstance(element, overrideMap);
1081 + return resolveOverridableSettingsForElement(element, overrideMap);
1082 + }
1083 + function resolveOverridableSettingsForElement(element, overrideMap) {
1084 + const updatedSettings = element.settings ? { ...element.settings } : {};
1085 + for (const [settingKey, settingValue] of Object.entries(element.settings ?? {})) updatedSettings[settingKey] = resolvePropValue(settingValue, overrideMap);
1086 + return updatedSettings;
1087 + }
1088 + function resolveOverridableSettingsForComponentInstance(element, overrideMap) {
1089 + const componentInstance = element.settings?.component_instance;
1090 + if (!componentInstancePropTypeUtil.isValid(componentInstance)) return element.settings ?? {};
1091 + const instanceOverrides = componentInstance.value.overrides?.value;
1092 + if (!instanceOverrides?.length) return element.settings ?? {};
1093 + const updatedOverrides = instanceOverrides.map((item) => resolvePropValue(item, overrideMap, { isOverridableOverride: true }));
1094 + return {
1095 + ...element.settings,
1096 + component_instance: {
1097 + ...componentInstance,
1098 + value: {
1099 + ...componentInstance.value,
1100 + overrides: {
1101 + ...componentInstance.value.overrides,
1102 + value: updatedOverrides
1103 + }
1104 + }
1105 + }
1106 + };
1107 + }
1108 + function resolvePropValue(propValue, overrideMap, options) {
1109 + const { isOverridableOverride = false } = options ?? {};
1110 + if (!componentOverridablePropTypeUtil.isValid(propValue)) return propValue;
1111 + const overridableKey = propValue.value.override_key;
1112 + const matchingOverride = overrideMap.get(overridableKey);
1113 + const originValue = componentOverridablePropTypeUtil.extract(propValue)?.origin_value;
1114 + if (!matchingOverride) return originValue;
1115 + if (isOverridableOverride) return resolveOverridableOverride(matchingOverride, originValue);
1116 + return componentInstanceOverridePropTypeUtil.extract(matchingOverride)?.override_value ?? originValue;
1117 + }
1118 + function resolveOverridableOverride(matchingOverride, originValue) {
1119 + if (!originValue || !componentInstanceOverridePropTypeUtil.isValid(originValue)) return null;
1120 + return componentInstanceOverridePropTypeUtil.create({
1121 + override_value: matchingOverride.value.override_value,
1122 + override_key: originValue.value.override_key,
1123 + schema_source: originValue.value.schema_source
1124 + });
1125 + }
1126 +
1127 +//#endregion
1128 +//#region packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts
1129 + function resolveDetachedInstance(element, overrides) {
1130 + const overrideMap = createOverrideMap(overrides);
1131 + return resolveElementRecursive(structuredClone(element), overrideMap);
1132 + }
1133 + function resolveElementRecursive(element, overrideMap) {
1134 + element.id = (0, _elementor_editor_elements.generateElementId)();
1135 + if (element.styles) {
1136 + const { styles, settings } = regenerateLocalStyleIds(element);
1137 + element.styles = styles;
1138 + if (settings) element.settings = {
1139 + ...element.settings,
1140 + ...settings
1141 + };
1142 + }
1143 + if (element.settings) element.settings = resolveOverridableSettings(element, overrideMap);
1144 + if (element.elements?.length) element.elements = element.elements.map((child) => resolveElementRecursive(child, overrideMap));
1145 + return element;
1146 + }
1147 + function createOverrideMap(overrides) {
1148 + const map = /* @__PURE__ */ new Map();
1149 + overrides.forEach((item) => {
1150 + let override = null;
1151 + if (componentInstanceOverridePropTypeUtil.isValid(item)) override = item;
1152 + else if (componentOverridablePropTypeUtil.isValid(item)) override = getOverridableOverride(item);
1153 + if (override) {
1154 + const overrideKey = override.value.override_key;
1155 + map.set(overrideKey, override);
1156 + }
1157 + });
1158 + return map;
1159 + }
1160 + function getOverridableOverride(propValue) {
1161 + if (!componentOverridablePropTypeUtil.isValid(propValue)) return null;
1162 + const originValue = componentOverridablePropTypeUtil.extract(propValue)?.origin_value;
1163 + if (!componentInstanceOverridePropTypeUtil.isValid(originValue)) return null;
1164 + return originValue;
1165 + }
1166 +
1167 +//#endregion
1168 +//#region packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts
1169 + var DETACH_EVENT = "elementor/components/detach-instance";
1170 + var DETACH_UNDO_EVENT = "elementor/components/undo-detach-instance";
1171 + var DETACH_REDO_EVENT = "elementor/components/redo-detach-instance";
1172 + async function detachComponentInstance({ instanceId, componentId, trackingInfo }) {
1173 + const instanceContainer = (0, _elementor_editor_elements.getContainer)(instanceId);
1174 + if (!instanceContainer) throw new Error(`Instance container with ID "${instanceId}" not found.`);
1175 + const componentData = await getComponentDocumentData(componentId);
1176 + if (!componentData) throw new Error(`Component with ID "${componentId}" not found.`);
1177 + const rootElement = componentData.elements?.[0];
1178 + if (!rootElement) throw new Error(`Component with ID "${componentId}" has no root element.`);
1179 + return (0, _elementor_editor_v1_adapters.undoable)({
1180 + do: () => {
1181 + const overrides = extractInstanceOverrides(instanceContainer);
1182 + const detachedInstanceElementData = resolveDetachedInstance(rootElement, overrides);
1183 + const originalInstanceModel = instanceContainer.model.toJSON();
1184 + const actionId = (/* @__PURE__ */ new Date()).getTime();
1185 + window.dispatchEvent(new CustomEvent(DETACH_EVENT, { detail: {
1186 + detachedInstanceId: instanceId,
1187 + detachActionId: actionId
1188 + } }));
1189 + const detachedElement = (0, _elementor_editor_elements.replaceElement)({
1190 + currentElementId: instanceId,
1191 + newElement: detachedInstanceElementData,
1192 + withHistory: false
1193 + });
1194 + (0, _elementor_editor_elements.selectElement)(detachedElement.id);
1195 + const componentUid = selectComponent((0, _elementor_store.__getState)(), componentId)?.uid;
1196 + trackComponentEvent({
1197 + action: "detached",
1198 + executedBy: "user",
1199 + component_uid: componentUid,
1200 + instance_id: instanceId,
1201 + location: trackingInfo.location,
1202 + secondary_location: trackingInfo.secondaryLocation,
1203 + trigger: trackingInfo.trigger
1204 + });
1205 + return {
1206 + detachedElement,
1207 + detachedInstanceElementData,
1208 + originalInstanceModel,
1209 + actionId
1210 + };
1211 + },
1212 + undo: (_, { detachedElement, originalInstanceModel, actionId }) => {
1213 + const restoredInstance = (0, _elementor_editor_elements.replaceElement)({
1214 + currentElementId: detachedElement.id,
1215 + newElement: originalInstanceModel,
1216 + withHistory: false
1217 + });
1218 + window.dispatchEvent(new CustomEvent(DETACH_UNDO_EVENT, { detail: {
1219 + restoredInstanceId: restoredInstance.id,
1220 + detachActionId: actionId
1221 + } }));
1222 + (0, _elementor_editor_canvas.doAfterRender)([restoredInstance.id], () => {
1223 + (0, _elementor_editor_elements.selectElement)(restoredInstance.id);
1224 + });
1225 + return restoredInstance;
1226 + },
1227 + redo: (_, doReturn, restoredInstance) => {
1228 + const { detachedInstanceElementData, actionId } = doReturn;
1229 + const detachedElement = (0, _elementor_editor_elements.replaceElement)({
1230 + currentElementId: restoredInstance.id,
1231 + newElement: detachedInstanceElementData,
1232 + withHistory: false
1233 + });
1234 + window.dispatchEvent(new CustomEvent(DETACH_REDO_EVENT, { detail: {
1235 + detachedInstanceId: detachedElement.id,
1236 + detachActionId: actionId
1237 + } }));
1238 + (0, _elementor_editor_elements.selectElement)(detachedElement.id);
1239 + return {
1240 + ...doReturn,
1241 + detachedElement
1242 + };
1243 + }
1244 + }, {
1245 + title: (0, _wordpress_i18n.__)("Detach from Component", "elementor"),
1246 + subtitle: (0, _wordpress_i18n.__)("Instance detached", "elementor")
1247 + })();
1248 + }
1249 + function extractInstanceOverrides(instanceContainer) {
1250 + const settings = instanceContainer.model.toJSON().settings;
1251 + const componentInstance = componentInstancePropTypeUtil.extract(settings?.component_instance);
1252 + return componentInstanceOverridesPropTypeUtil.extract(componentInstance?.overrides) ?? [];
1253 + }
1254 +
1255 +//#endregion
1256 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx
1257 + function InstancePanelHeader({ componentName, actions }) {
1258 + return /* @__PURE__ */ react.createElement(_elementor_editor_panels.PanelHeader, { sx: {
1259 + justifyContent: "start",
1260 + px: 2
1261 + } }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
1262 + direction: "row",
1263 + alignItems: "center",
1264 + flexGrow: 1,
1265 + gap: 1,
1266 + maxWidth: "100%"
1267 + }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, {
1268 + fontSize: "small",
1269 + sx: { color: "text.tertiary" }
1270 + }), /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, {
1271 + title: componentName,
1272 + as: _elementor_editor_panels.PanelHeaderTitle,
1273 + sx: { flexGrow: 1 }
1274 + }), actions));
1275 + }
1276 + function EditComponentAction({ label, onClick, disabled = false, icon: Icon }) {
1277 + return /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, { title: label }, /* @__PURE__ */ react.createElement(_elementor_ui.IconButton, {
1278 + size: "tiny",
1279 + onClick,
1280 + "aria-label": label,
1281 + disabled
1282 + }, /* @__PURE__ */ react.createElement(Icon, { fontSize: "tiny" })));
1283 + }
1284 +
1285 +//#endregion
1286 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx
1287 + var DetachAction = ({ componentInstanceId, componentId }) => {
1288 + const [isDetachDialogOpen, setIsDetachDialogOpen] = (0, react.useState)(false);
1289 + const handleDetachConfirm = async () => {
1290 + setIsDetachDialogOpen(false);
1291 + try {
1292 + await detachComponentInstance({
1293 + instanceId: componentInstanceId,
1294 + componentId,
1295 + trackingInfo: getDetachTrackingInfo()
1296 + });
1297 + } catch {
1298 + (0, _elementor_editor_notifications.notify)({
1299 + type: "error",
1300 + message: (0, _wordpress_i18n.__)("Failed to detach component instance.", "elementor"),
1301 + id: "detach-component-instance-failed"
1302 + });
1303 + }
1304 + };
1305 + const handleDetachCancel = () => {
1306 + setIsDetachDialogOpen(false);
1307 + };
1308 + const handleDetachClick = () => {
1309 + setIsDetachDialogOpen(true);
1310 + };
1311 + const detachLabel = (0, _wordpress_i18n.__)("Detach from Component", "elementor");
1312 + return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(EditComponentAction, {
1313 + label: detachLabel,
1314 + icon: _elementor_icons.DetachIcon,
1315 + onClick: handleDetachClick
1316 + }), /* @__PURE__ */ react.createElement(DetachInstanceConfirmationDialog, {
1317 + open: isDetachDialogOpen,
1318 + onClose: handleDetachCancel,
1319 + onConfirm: handleDetachConfirm
1320 + }));
1321 + };
1322 + function getDetachTrackingInfo() {
1323 + const config = window?.elementorCommon?.eventsManager?.config;
1324 + if (!config) return {
1325 + location: "",
1326 + trigger: ""
1327 + };
1328 + return {
1329 + location: config.locations.components.instanceEditingPanel,
1330 + trigger: config.triggers.click
1331 + };
1332 + }
1333 +
1334 +//#endregion
1335 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx
1336 + var EmptyState = ({ onEditComponent }) => {
1337 + const { canEdit } = useComponentsPermissions();
1338 + const message = canEdit ? (0, _wordpress_i18n.__)("Edit the component to add properties, manage them or update the design across all instances.", "elementor") : (0, _wordpress_i18n.__)("With your current role, you cannot edit this component. Contact an administrator to add properties.", "elementor");
1339 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
1340 + alignItems: "center",
1341 + justifyContent: "start",
1342 + height: "100%",
1343 + color: "text.secondary",
1344 + sx: {
1345 + p: 2.5,
1346 + pt: 8,
1347 + pb: 5.5,
1348 + mt: 1
1349 + },
1350 + gap: 1.5
1351 + }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentPropListIcon, { fontSize: "large" }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
1352 + align: "center",
1353 + variant: "subtitle2"
1354 + }, (0, _wordpress_i18n.__)("No properties yet", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
1355 + align: "center",
1356 + variant: "caption",
1357 + maxWidth: "170px"
1358 + }, message), canEdit && /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
1359 + variant: "outlined",
1360 + color: "secondary",
1361 + size: "small",
1362 + sx: { mt: 1 },
1363 + disabled: !onEditComponent,
1364 + onClick: onEditComponent
1365 + }, /* @__PURE__ */ react.createElement(_elementor_icons.PencilIcon, { fontSize: "small" }), (0, _wordpress_i18n.__)("Edit component", "elementor")));
1366 + };
1367 +
1368 +//#endregion
1369 +//#region packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts
1370 + function useControlsByWidgetType(type) {
1371 + const elementType = (0, _elementor_editor_elements.getElementType)(type);
1372 + if (!elementType) return {};
1373 + return getControlsByBind(iterateControls(elementType.controls));
1374 + }
1375 + function iterateControls(controls) {
1376 + return controls.map((control) => {
1377 + if (control.type === "control" && "bind" in control.value) return control;
1378 + if (control.type === "section") return iterateControls(control.value.items);
1379 + return null;
1380 + }).filter(Boolean).flat();
1381 + }
1382 + function getControlsByBind(controls) {
1383 + return controls.reduce((controlsByBind, control) => ({
1384 + ...controlsByBind,
1385 + [control.value.bind]: control
1386 + }), {});
1387 + }
1388 +
1389 +//#endregion
1390 +//#region packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx
1391 + var OverridablePropContext = (0, react.createContext)(null);
1392 + function OverridablePropProvider({ children, ...props }) {
1393 + return /* @__PURE__ */ react.createElement(OverridablePropContext.Provider, { value: props }, children);
1394 + }
1395 + var useOverridablePropValue = () => (0, react.useContext)(OverridablePropContext)?.value;
1396 + var useComponentInstanceElement = () => (0, react.useContext)(OverridablePropContext)?.componentInstanceElement;
1397 +
1398 +//#endregion
1399 +//#region packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts
1400 + var resolveOverridePropValue = (originalPropValue) => {
1401 + if (componentOverridablePropTypeUtil.isValid(originalPropValue)) return getOverridableValue(originalPropValue);
1402 + if (componentInstanceOverridePropTypeUtil.isValid(originalPropValue)) return getOverrideValue(originalPropValue);
1403 + return originalPropValue;
1404 + };
1405 + function getOverridableValue(overridableProp) {
1406 + const overridableValue = componentOverridablePropTypeUtil.extract(overridableProp);
1407 + if (!overridableValue) return null;
1408 + if (componentInstanceOverridePropTypeUtil.isValid(overridableValue.origin_value)) return getOverrideValue(overridableValue.origin_value);
1409 + return overridableValue.origin_value;
1410 + }
1411 + function getOverrideValue(overrideProp) {
1412 + const overrideValue = componentInstanceOverridePropTypeUtil.extract(overrideProp);
1413 + if (!overrideValue) return null;
1414 + return overrideValue.override_value;
1415 + }
1416 +
1417 +//#endregion
1418 +//#region packages/packages/core/editor-components/src/store/dispatchers.ts
1419 + function safeDispatch() {
1420 + return (0, _elementor_store.__getStore)()?.dispatch;
1421 + }
1422 + var componentsActions = {
1423 + add(components) {
1424 + (0, _elementor_store.__dispatch)(slice.actions.add(components));
1425 + },
1426 + load(components) {
1427 + (0, _elementor_store.__dispatch)(slice.actions.load(components));
1428 + },
1429 + addUnpublished(component) {
1430 + (0, _elementor_store.__dispatch)(slice.actions.addUnpublished(component));
1431 + },
1432 + removeUnpublished(uids) {
1433 + (0, _elementor_store.__dispatch)(slice.actions.removeUnpublished(uids));
1434 + },
1435 + resetUnpublished() {
1436 + (0, _elementor_store.__dispatch)(slice.actions.resetUnpublished());
1437 + },
1438 + addCreatedThisSession(uid) {
1439 + (0, _elementor_store.__dispatch)(slice.actions.addCreatedThisSession(uid));
1440 + },
1441 + removeCreatedThisSession(uid) {
1442 + (0, _elementor_store.__dispatch)(slice.actions.removeCreatedThisSession(uid));
1443 + },
1444 + archive(componentId) {
1445 + (0, _elementor_store.__dispatch)(slice.actions.archive(componentId));
1446 + },
1447 + setCurrentComponentId(id) {
1448 + safeDispatch()?.(slice.actions.setCurrentComponentId(id));
1449 + },
1450 + setPath(path) {
1451 + safeDispatch()?.(slice.actions.setPath(path));
1452 + },
1453 + setOverridableProps(componentId, overridableProps) {
1454 + (0, _elementor_store.__dispatch)(slice.actions.setOverridableProps({
1455 + componentId,
1456 + overridableProps
1457 + }));
1458 + },
1459 + rename(componentUid, name) {
1460 + (0, _elementor_store.__dispatch)(slice.actions.rename({
1461 + componentUid,
1462 + name
1463 + }));
1464 + },
1465 + cleanUpdatedComponentNames() {
1466 + (0, _elementor_store.__dispatch)(slice.actions.cleanUpdatedComponentNames());
1467 + },
1468 + updateComponentSanitizedAttribute(componentId, attribute) {
1469 + (0, _elementor_store.__dispatch)(slice.actions.updateComponentSanitizedAttribute({
1470 + componentId,
1471 + attribute
1472 + }));
1473 + },
1474 + resetSanitizedComponents() {
1475 + (0, _elementor_store.__dispatch)(slice.actions.resetSanitizedComponents());
1476 + }
1477 + };
1478 +
1479 +//#endregion
1480 +//#region packages/packages/core/editor-components/src/store/selectors.ts
1481 + function safeGetState() {
1482 + return (0, _elementor_store.__getStore)()?.getState();
1483 + }
1484 + var componentsSelectors = {
1485 + getOverridableProps(componentId) {
1486 + return selectOverridableProps((0, _elementor_store.__getState)(), componentId);
1487 + },
1488 + getCurrentComponent() {
1489 + return selectCurrentComponent((0, _elementor_store.__getState)());
1490 + },
1491 + getCurrentComponentId() {
1492 + const state = safeGetState();
1493 + if (!state) return null;
1494 + return selectCurrentComponentId(state);
1495 + },
1496 + getUnpublishedComponents() {
1497 + return selectUnpublishedComponents((0, _elementor_store.__getState)());
1498 + },
1499 + getUpdatedComponentNames() {
1500 + return selectUpdatedComponentNames((0, _elementor_store.__getState)());
1501 + },
1502 + getArchivedThisSession() {
1503 + return selectArchivedThisSession((0, _elementor_store.__getState)());
1504 + },
1505 + getCreatedThisSession() {
1506 + return selectCreatedThisSession((0, _elementor_store.__getState)());
1507 + },
1508 + getComponents() {
1509 + return selectComponents((0, _elementor_store.__getState)());
1510 + },
1511 + getComponentByUid(componentUid) {
1512 + return selectComponentByUid((0, _elementor_store.__getState)(), componentUid);
1513 + }
1514 + };
1515 +
1516 +//#endregion
1517 +//#region packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts
1518 + function updateOverridableProp(componentId, propValue, originPropFields) {
1519 + const overridableProps = componentsSelectors.getOverridableProps(componentId);
1520 + if (!overridableProps) return;
1521 + const existingOverridableProp = overridableProps.props[propValue.override_key];
1522 + if (!existingOverridableProp) return;
1523 + const originValue = resolveOverridePropValue(propValue.origin_value);
1524 + const newOverridableProp = originPropFields ? {
1525 + originValue,
1526 + originPropFields
1527 + } : { originValue };
1528 + const newOverridableProps = {
1529 + ...overridableProps,
1530 + props: {
1531 + ...overridableProps.props,
1532 + [existingOverridableProp.overrideKey]: {
1533 + ...existingOverridableProp,
1534 + ...newOverridableProp
1535 + }
1536 + }
1537 + };
1538 + componentsActions.setOverridableProps(componentId, newOverridableProps);
1539 + }
1540 +
1541 +//#endregion
1542 +//#region packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts
1543 + var getPropTypeForComponentOverride = (overridableProp) => {
1544 + if (overridableProp.originPropFields) return getPropType(overridableProp.originPropFields);
1545 + const { widgetType, propKey } = overridableProp;
1546 + return getPropType({
1547 + widgetType,
1548 + propKey
1549 + });
1550 + };
1551 + function getPropType({ widgetType, propKey }) {
1552 + return ((0, _elementor_editor_elements.getWidgetsCache)()?.[widgetType]?.atomic_props_schema)?.[propKey];
1553 + }
1554 +
1555 +//#endregion
1556 +//#region packages/packages/core/editor-components/src/utils/overridable-props-utils.ts
1557 + function getMatchingOverride(overrides, overrideKey) {
1558 + return overrides?.find((override) => {
1559 + const overridableValue = componentOverridablePropTypeUtil.extract(override);
1560 + if (overridableValue) return componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value)?.override_key === overrideKey;
1561 + return override.value.override_key === overrideKey;
1562 + }) ?? null;
1563 + }
1564 +
1565 +//#endregion
1566 +//#region packages/packages/core/editor-components/src/components/control-label.tsx
1567 + var ControlLabel = ({ children, ...props }) => {
1568 + return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
1569 + direction: "row",
1570 + alignItems: "center",
1571 + justifyItems: "start",
1572 + gap: .25
1573 + }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlFormLabel, { ...props }, children), /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlAdornments, null));
1574 + };
1575 +
1576 +//#endregion
1577 +//#region packages/packages/core/editor-components/src/components/errors.ts
1578 + var OverrideControlInnerElementNotFoundError = (0, _elementor_utils.createError)({
1579 + code: "override_control_inner_element_not_found",
1580 + message: `Component inner element not found for override control. The element may have been deleted without updating the overridable props, or the component has not finished rendering yet.`
1581 + });
1582 + var OverrideControlPropTypeNotFoundError = (0, _elementor_utils.createError)({
1583 + code: "override_control_prop_type_not_found",
1584 + message: "Prop type not found for override control."
1585 + });
1586 +
1587 +//#endregion
1588 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/correct-exposed-empty-override.ts
1589 + function correctExposedEmptyOverride(newPropValue, matchingOverride) {
1590 + const newOverridableValue = componentOverridablePropTypeUtil.extract(newPropValue);
1591 + if (!(newOverridableValue && matchingOverride === null)) return newPropValue;
1592 + return componentOverridablePropTypeUtil.create({
1593 + override_key: newOverridableValue.override_key,
1594 + origin_value: null
1595 + });
1596 + }
1597 +
1598 +//#endregion
1599 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/resolve-element-settings.ts
1600 + function applyOverridesToSettings(elementSettings, overrides) {
1601 + const result = {};
1602 + for (const [propKey, propValue] of Object.entries(elementSettings)) {
1603 + const overridable = componentOverridablePropTypeUtil.extract(propValue);
1604 + if (!overridable) {
1605 + result[propKey] = propValue;
1606 + continue;
1607 + }
1608 + const override = overrides[overridable.override_key];
1609 + if (!override) {
1610 + result[propKey] = propValue;
1611 + continue;
1612 + }
1613 + if (override.outermostKey && override.outermostKey !== overridable.override_key) {
1614 + const originValue = overridable.origin_value;
1615 + result[propKey] = componentOverridablePropTypeUtil.create({
1616 + override_key: override.outermostKey,
1617 + origin_value: override.value ?? originValue
1618 + });
1619 + } else result[propKey] = override.value ?? propValue;
1620 + }
1621 + return result;
1622 + }
1623 + function unwrapOverridableSettings(elementSettings) {
1624 + const result = {};
1625 + for (const [propKey, propValue] of Object.entries(elementSettings)) {
1626 + const overridable = componentOverridablePropTypeUtil.extract(propValue);
1627 + if (!overridable) {
1628 + result[propKey] = propValue;
1629 + continue;
1630 + }
1631 + result[propKey] = overridable.origin_value;
1632 + }
1633 + return result;
1634 + }
1635 +
1636 +//#endregion
1637 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-override-dependencies.ts
1638 + function useOverrideControlDependencies({ existingOverride, resolvedElementSettings, elementId, elementType, propKey }) {
1639 + return (0, react.useMemo)(() => {
1640 + const { isDisabled, isHidden } = (0, _elementor_editor_editing_panel.extractDependencyEffect)(propKey, elementType.propsSchema, resolvedElementSettings);
1641 + const existingOverrideValue = existingOverride ? resolveOverridePropValue(existingOverride) : null;
1642 + const settingsForDepsNewValuesCalculation = {
1643 + ...resolvedElementSettings,
1644 + [propKey]: existingOverrideValue
1645 + };
1646 + const resolvedSettingsWithDefaults = (0, _elementor_editor_editing_panel.getElementSettingsWithDefaults)(elementType.propsSchema, settingsForDepsNewValuesCalculation);
1647 + const dependents = (0, _elementor_editor_editing_panel.extractOrderedDependencies)(elementType.dependenciesPerTargetMapping ?? {});
1648 + return {
1649 + overrideValue: (0, _elementor_editor_editing_panel.getUpdatedValues)({ [propKey]: existingOverrideValue }, dependents, elementType.propsSchema, resolvedSettingsWithDefaults, elementId)[propKey],
1650 + isDisabled,
1651 + isHidden
1652 + };
1653 + }, [
1654 + existingOverride,
1655 + resolvedElementSettings,
1656 + propKey,
1657 + elementType.propsSchema,
1658 + elementType.dependenciesPerTargetMapping,
1659 + elementId
1660 + ]);
1661 + }
1662 +
1663 +//#endregion
1664 +//#region packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts
1665 + function getContainerByOriginId(originElementId, instanceElementId) {
1666 + if (!instanceElementId) return (0, _elementor_editor_elements.getContainer)(originElementId);
1667 + const instanceContainer = (0, _elementor_editor_elements.getContainer)(instanceElementId);
1668 + if (!instanceContainer) return null;
1669 + return window.elementor?.getContainerByKeyValue?.({
1670 + key: "originId",
1671 + value: originElementId,
1672 + parent: instanceContainer.view
1673 + }) ?? null;
1674 + }
1675 +
1676 +//#endregion
1677 +//#region packages/packages/core/editor-components/src/utils/get-overridable-prop.ts
1678 + function getOverridableProp({ componentId, overrideKey }) {
1679 + const overridableProps = selectOverridableProps((0, _elementor_store.__getState)(), componentId);
1680 + if (!overridableProps) return;
1681 + return overridableProps.props[overrideKey];
1682 + }
1683 +
1684 +//#endregion
1685 +//#region packages/packages/core/editor-components/src/utils/resolve-overrides-chain.ts
1686 + function resolveOverridesChain({ outerOverridableProp, outerInstanceId, overridesMapping = {} }) {
1687 + if (!outerOverridableProp.originPropFields) {
1688 + const innerElement = getContainerByOriginId(outerOverridableProp.elementId, outerInstanceId);
1689 + if (!innerElement) throw new Error(`Inner element not found inside instance. elementId: ${outerOverridableProp.elementId}, instanceId: ${outerInstanceId}`);
1690 + return {
1691 + isChainBroken: false,
1692 + innerElement,
1693 + overridesMapping
1694 + };
1695 + }
1696 + const currentInstance = getContainerByOriginId(outerOverridableProp.elementId, outerInstanceId);
1697 + if (!currentInstance) return { isChainBroken: true };
1698 + const { componentId, overrides } = extractComponentInstanceSettings(currentInstance);
1699 + if (!componentId) throw new Error(`Component ID not found for current instance. currentInstanceId: ${currentInstance.id}. outerInstanceId: ${outerInstanceId}`);
1700 + const mergedOverrides = buildOverridesMap(overridesMapping, overrides ?? []);
1701 + const override = findOverrideByOuterKey(overrides, outerOverridableProp.overrideKey);
1702 + const overrideKey = componentInstanceOverridePropTypeUtil.extract(override)?.override_key;
1703 + if (!override || !overrideKey) return { isChainBroken: true };
1704 + const overridableProp = getOverridableProp({
1705 + componentId,
1706 + overrideKey
1707 + });
1708 + if (!overridableProp) throw new Error(`Overridable prop not found. componentId: ${componentId}, overrideKey: ${overrideKey}`);
1709 + return resolveOverridesChain({
1710 + outerOverridableProp: overridableProp,
1711 + outerInstanceId: currentInstance.id,
1712 + overridesMapping: mergedOverrides
1713 + });
1714 + }
1715 + function buildOverridesMap(existing, levelOverrides) {
1716 + const result = { ...existing };
1717 + for (const item of levelOverrides) {
1718 + const overridableValue = componentOverridablePropTypeUtil.extract(item);
1719 + if (overridableValue) {
1720 + const override = componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value);
1721 + if (!override) continue;
1722 + const outerKey = overridableValue.override_key;
1723 + const innerKey = override.override_key;
1724 + const innerValue = override.override_value;
1725 + const higherLevelOverride = existing[outerKey];
1726 + if (higherLevelOverride) {
1727 + result[innerKey] = {
1728 + value: higherLevelOverride.value ?? innerValue,
1729 + outermostKey: higherLevelOverride.outermostKey ?? outerKey
1730 + };
1731 + continue;
1732 + }
1733 + result[innerKey] = {
1734 + value: innerValue,
1735 + outermostKey: outerKey
1736 + };
1737 + } else {
1738 + const override = componentInstanceOverridePropTypeUtil.extract(item);
1739 + if (!override) continue;
1740 + const key = override.override_key;
1741 + result[key] = { value: override.override_value };
1742 + }
1743 + }
1744 + return result;
1745 + }
1746 + function extractComponentInstanceSettings(element) {
1747 + const instanceSetting = element.settings?.get("component_instance");
1748 + const instanceValue = componentInstancePropTypeUtil.extract(instanceSetting);
1749 + return {
1750 + componentId: instanceValue?.component_id?.value,
1751 + overrides: componentInstanceOverridesPropTypeUtil.extract(instanceValue?.overrides)
1752 + };
1753 + }
1754 + function findOverrideByOuterKey(overrides, outerKey) {
1755 + if (!overrides) return null;
1756 + const overridableOverride = overrides.find((item) => {
1757 + const overridableValue = componentOverridablePropTypeUtil.extract(item);
1758 + if (!overridableValue) return false;
1759 + return overridableValue.override_key === outerKey;
1760 + });
1761 + const override = componentOverridablePropTypeUtil.extract(overridableOverride)?.origin_value;
1762 + if (!override || !componentInstanceOverridePropTypeUtil.isValid(override)) return null;
1763 + return override;
1764 + }
1765 +
1766 +//#endregion
1767 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-resolved-inner-element.ts
1768 + function useResolvedInnerElement(overridableProp) {
1769 + const componentInstanceElement = (0, _elementor_editor_editing_panel.useElement)();
1770 + const componentId = useComponentId();
1771 + const overrides = useComponentInstanceOverrides();
1772 + const { elementId: originElementId, widgetType, elType } = overridableProp.originPropFields ?? overridableProp;
1773 + const type = elType === "widget" ? widgetType : elType;
1774 + const elementType = (0, _elementor_editor_elements.getElementType)(type);
1775 + if (!elementType) throw new Error(`Element type not found for ${type}`);
1776 + const { elementId, overridesMapping } = (0, react.useMemo)(() => {
1777 + const overridesChainResult = resolveOverridesChain({
1778 + outerOverridableProp: overridableProp,
1779 + outerInstanceId: componentInstanceElement.element.id
1780 + });
1781 + if (overridesChainResult.isChainBroken) throw new OverrideControlInnerElementNotFoundError({ context: {
1782 + componentId,
1783 + elementId: originElementId
1784 + } });
1785 + return {
1786 + elementId: overridesChainResult.innerElement.id,
1787 + overridesMapping: overridesChainResult.overridesMapping
1788 + };
1789 + }, [
1790 + overridableProp,
1791 + componentInstanceElement.element.id,
1792 + componentId,
1793 + originElementId
1794 + ]);
1795 + const settingsWithInnerOverrides = (0, react.useMemo)(() => {
1796 + return applyOverridesToSettings((0, _elementor_editor_elements.getElementSettings)(elementId, Object.keys(elementType?.propsSchema ?? {})), overridesMapping);
1797 + }, [
1798 + elementId,
1799 + elementType?.propsSchema,
1800 + overridesMapping
1801 + ]);
1802 + return {
1803 + elementId,
1804 + elementType,
1805 + resolvedOriginValues: settingsWithInnerOverrides,
1806 + resolvedElementSettings: (0, react.useMemo)(() => {
1807 + return unwrapOverridableSettings(applyOverridesToSettings(settingsWithInnerOverrides, formatOverridesToApply(overrides)));
1808 + }, [settingsWithInnerOverrides, overrides])
1809 + };
1810 + }
1811 + function formatOverridesToApply(overrides) {
1812 + if (!overrides) return {};
1813 + const result = {};
1814 + for (const item of overrides) {
1815 + const overridable = componentOverridablePropTypeUtil.extract(item);
1816 + let override = item;
1817 + if (overridable) override = overridable.origin_value;
1818 + const extractedOverride = componentInstanceOverridePropTypeUtil.extract(override);
1819 + if (!extractedOverride) continue;
1820 + result[extractedOverride.override_key] = { value: extractedOverride.override_value };
1821 + }
1822 + return result;
1823 + }
1824 +
1825 +//#endregion
1826 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx
1827 + function OverridePropControl({ overrideKey }) {
1828 + const overridableProp = useComponentOverridableProps().props[overrideKey];
1829 + if (!overridableProp) return null;
1830 + return /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.SettingsField, {
1831 + bind: "component_instance",
1832 + propDisplayName: overridableProp.label
1833 + }, /* @__PURE__ */ react.createElement(OverrideControl, { overridableProp }));
1834 + }
1835 + function OverrideControl({ overridableProp }) {
1836 + const componentInstanceElement = (0, _elementor_editor_editing_panel.useElement)();
1837 + const { value: instanceValue, setValue: setInstanceValue } = (0, _elementor_editor_controls.useBoundProp)(componentInstancePropTypeUtil);
1838 + const wrappingComponentId = useCurrentComponentId();
1839 + const componentId = useComponentId();
1840 + const overridableProps = useComponentOverridableProps();
1841 + const overrides = useComponentInstanceOverrides();
1842 + const controls = useControlsByWidgetType(overridableProp.originPropFields?.widgetType ?? overridableProp.widgetType);
1843 + const controlReplacements = (0, _elementor_editor_controls.getControlReplacements)();
1844 + const matchingOverride = getMatchingOverride(overrides, overridableProp.overrideKey);
1845 + const { propKey } = overridableProp.originPropFields ?? overridableProp;
1846 + const propType = getPropTypeForComponentOverride(overridableProp);
1847 + if (!propType) throw new OverrideControlPropTypeNotFoundError({ context: { overridableProp } });
1848 + const { elementId, elementType, resolvedElementSettings, resolvedOriginValues } = useResolvedInnerElement(overridableProp);
1849 + const { overrideValue, isDisabled, isHidden } = useOverrideControlDependencies({
1850 + existingOverride: matchingOverride,
1851 + resolvedElementSettings,
1852 + elementType,
1853 + elementId,
1854 + propKey
1855 + });
1856 + if (isHidden) return null;
1857 + const { propValue, baseValue: resolvedBaseValue } = resolveOverrideValues(overrideValue, resolvedOriginValues, propKey);
1858 + const value = { [overridableProp.overrideKey]: propValue };
1859 + const baseValue = { [overridableProp.overrideKey]: resolvedBaseValue };
1860 + const { control, controlProps, layout } = getControlParams(controls, overridableProp.originPropFields ?? overridableProp, overridableProp.label);
1861 + const propTypeSchema = (0, _elementor_editor_editing_panel.createTopLevelObjectType)({ schema: { [overridableProp.overrideKey]: propType } });
1862 + const setValue = (newValue, options, meta) => {
1863 + let newPropValue = getTempNewValueForDynamicProp(propType, propValue, newValue[overridableProp.overrideKey]);
1864 + newPropValue = correctExposedEmptyOverride(newPropValue, matchingOverride);
1865 + const newOverrideValue = createOverrideValue({
1866 + matchingOverride,
1867 + overrideKey: overridableProp.overrideKey,
1868 + overrideValue: newPropValue,
1869 + componentId
1870 + });
1871 + let newOverrides = (overrides ?? []).filter((override) => isValidOverride(overridableProps, override)).map((override) => override === matchingOverride ? newOverrideValue : override);
1872 + if (!matchingOverride) newOverrides = [...newOverrides, newOverrideValue];
1873 + setInstanceValue({
1874 + ...instanceValue,
1875 + overrides: componentInstanceOverridesPropTypeUtil.create(newOverrides)
1876 + }, options, meta);
1877 + const overridableValue = componentOverridablePropTypeUtil.extract(newOverrideValue);
1878 + if (overridableValue && wrappingComponentId) {
1879 + if (overridableProp.originPropFields) {
1880 + updateOverridableProp(wrappingComponentId, overridableValue, overridableProp.originPropFields);
1881 + return;
1882 + }
1883 + const originPropFields = {
1884 + elType: overridableProp.elType,
1885 + widgetType: overridableProp.widgetType,
1886 + propKey: overridableProp.propKey,
1887 + elementId: overridableProp.elementId
1888 + };
1889 + updateOverridableProp(wrappingComponentId, overridableValue, originPropFields);
1890 + }
1891 + };
1892 + return /* @__PURE__ */ react.createElement(OverridablePropProvider, {
1893 + value: componentOverridablePropTypeUtil.extract(matchingOverride) ?? void 0,
1894 + componentInstanceElement
1895 + }, /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.ElementProvider, {
1896 + element: {
1897 + id: elementId,
1898 + type: elementType.key
1899 + },
1900 + elementType,
1901 + settings: resolvedElementSettings
1902 + }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.PropProvider, {
1903 + propType: propTypeSchema,
1904 + value,
1905 + setValue,
1906 + baseValue,
1907 + isDisabled
1908 + }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { mb: 1.5 }, /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.ControlTypeContainer, { layout }, layout !== "custom" && /* @__PURE__ */ react.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ react.createElement(OriginalControl, {
1909 + control,
1910 + controlProps
1911 + }))))))));
1912 + }
1913 + function resolveOverrideValues(overrideValue, resolvedOriginValues, propKey) {
1914 + const inheritedValue = unwrapOverridableSettings(resolvedOriginValues)[propKey] ?? null;
1915 + const isInheritedDynamic = (0, _elementor_editor_editing_panel.isDynamicPropValue)(inheritedValue);
1916 + return {
1917 + propValue: isInheritedDynamic && !overrideValue ? inheritedValue : overrideValue,
1918 + baseValue: overrideValue || isInheritedDynamic ? null : inheritedValue
1919 + };
1920 + }
1921 + function getTempNewValueForDynamicProp(propType, propValue, newPropValue) {
1922 + if (newPropValue === null && (0, _elementor_editor_editing_panel.isDynamicPropValue)(propValue)) return propType.default ?? null;
1923 + return newPropValue;
1924 + }
1925 + function createOverrideValue({ matchingOverride, overrideKey, overrideValue, componentId }) {
1926 + const overridableValue = componentOverridablePropTypeUtil.extract(matchingOverride);
1927 + const anyOverridable = componentOverridablePropTypeUtil.extract(overrideValue) ?? overridableValue;
1928 + if (anyOverridable) {
1929 + const innerOverride = componentInstanceOverridePropTypeUtil.create({
1930 + override_key: overrideKey,
1931 + override_value: resolveOverridePropValue(overrideValue),
1932 + schema_source: {
1933 + type: "component",
1934 + id: componentId
1935 + }
1936 + });
1937 + return componentOverridablePropTypeUtil.create({
1938 + override_key: anyOverridable.override_key,
1939 + origin_value: innerOverride
1940 + });
1941 + }
1942 + return componentInstanceOverridePropTypeUtil.create({
1943 + override_key: overrideKey,
1944 + override_value: overrideValue,
1945 + schema_source: {
1946 + type: "component",
1947 + id: componentId
1948 + }
1949 + });
1950 + }
1951 + function getControlParams(controls, originPropFields, label) {
1952 + const control = controls[originPropFields.propKey];
1953 + const { value } = control;
1954 + const layout = getControlLayout(control);
1955 + const controlProps = populateChildControlProps(value.props);
1956 + if (layout === "custom") controlProps.label = label ?? value.label;
1957 + return {
1958 + control,
1959 + controlProps,
1960 + layout
1961 + };
1962 + }
1963 + function OriginalControl({ control, controlProps }) {
1964 + const { value } = control;
1965 + return /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.BaseControl, {
1966 + type: value.type,
1967 + props: controlProps
1968 + });
1969 + }
1970 + function getControlLayout(control) {
1971 + return control.value.meta?.layout || _elementor_editor_editing_panel.controlsRegistry.getLayout(control.value.type);
1972 + }
1973 + function populateChildControlProps(props) {
1974 + if (props.childControlType) {
1975 + const childComponent = _elementor_editor_editing_panel.controlsRegistry.get(props.childControlType);
1976 + const childPropType = _elementor_editor_editing_panel.controlsRegistry.getPropTypeUtil(props.childControlType);
1977 + props = {
1978 + ...props,
1979 + childControlConfig: {
1980 + component: childComponent,
1981 + props: props.childControlProps || {},
1982 + propTypeUtil: childPropType
1983 + }
1984 + };
1985 + }
1986 + return props;
1987 + }
1988 + function isValidOverride(overridableProps, override) {
1989 + const overridableKey = componentOverridablePropTypeUtil.isValid(override) ? override.value.origin_value?.value.override_key : override.value.override_key;
1990 + return !!overridableProps.props[overridableKey];
1991 + }
1992 +
1993 +//#endregion
1994 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx
1995 + function OverridePropsGroup({ group }) {
1996 + const [isOpen, setIsOpen] = (0, _elementor_editor_editing_panel.useStateByElement)(group.id, true);
1997 + const handleClick = () => {
1998 + setIsOpen(!isOpen);
1999 + };
2000 + const id = (0, react.useId)();
2001 + const labelId = `label-${id}`;
2002 + const contentId = `content-${id}`;
2003 + const title = group.label;
2004 + return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemButton, {
2005 + id: labelId,
2006 + "aria-controls": contentId,
2007 + "aria-label": `${title} section`,
2008 + onClick: handleClick,
2009 + p: 0,
2010 + sx: { "&:hover": { backgroundColor: "transparent" } }
2011 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2012 + direction: "row",
2013 + alignItems: "center",
2014 + justifyItems: "start",
2015 + flexGrow: 1,
2016 + gap: .5
2017 + }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemText, {
2018 + secondary: title,
2019 + secondaryTypographyProps: {
2020 + color: "text.primary",
2021 + variant: "caption",
2022 + fontWeight: "bold"
2023 + },
2024 + sx: {
2025 + flexGrow: 0,
2026 + flexShrink: 1,
2027 + marginInlineEnd: 1
2028 + }
2029 + })), /* @__PURE__ */ react.createElement(_elementor_editor_ui.CollapseIcon, {
2030 + open: isOpen,
2031 + color: "secondary",
2032 + fontSize: "tiny"
2033 + })), /* @__PURE__ */ react.createElement(_elementor_ui.Collapse, {
2034 + id: contentId,
2035 + "aria-labelledby": labelId,
2036 + in: isOpen,
2037 + timeout: "auto"
2038 + }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2039 + direction: "column",
2040 + gap: 1,
2041 + p: 2
2042 + }, group.props.map((overrideKey) => /* @__PURE__ */ react.createElement(OverridePropControl, {
2043 + key: overrideKey,
2044 + overrideKey
2045 + })))));
2046 + }
2047 +
2048 +//#endregion
2049 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx
2050 + function InstancePanelBody({ groups, isEmpty, emptyState, componentInstanceId }) {
2051 + return /* @__PURE__ */ react.createElement(_elementor_editor_panels.PanelBody, null, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlAdornmentsProvider, { items: (0, _elementor_editor_editing_panel.getFieldIndicators)("settings") }, isEmpty ? emptyState : /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2052 + direction: "column",
2053 + alignItems: "stretch"
2054 + }, groups.map((group) => /* @__PURE__ */ react.createElement(react.Fragment, { key: group.id + componentInstanceId }, /* @__PURE__ */ react.createElement(OverridePropsGroup, { group }), /* @__PURE__ */ react.createElement(_elementor_ui.Divider, null))))));
2055 + }
2056 +
2057 +//#endregion
2058 +//#region packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts
2059 + function filterValidOverridableProps(overridableProps, instanceElementId) {
2060 + const validProps = {};
2061 + for (const [key, prop] of Object.entries(overridableProps.props)) if (isExposedPropValid(prop, instanceElementId)) validProps[key] = prop;
2062 + const validPropKeys = new Set(Object.keys(validProps));
2063 + return {
2064 + props: validProps,
2065 + groups: {
2066 + items: Object.fromEntries(Object.entries(overridableProps.groups.items).map(([groupId, group]) => [groupId, {
2067 + ...group,
2068 + props: group.props.filter((propKey) => validPropKeys.has(propKey))
2069 + }])),
2070 + order: overridableProps.groups.order
2071 + }
2072 + };
2073 + }
2074 + function isExposedPropValid(prop, instanceElementId) {
2075 + const { isChainBroken } = resolveOverridesChain({
2076 + outerOverridableProp: prop,
2077 + outerInstanceId: instanceElementId
2078 + });
2079 + return !isChainBroken;
2080 + }
2081 +
2082 +//#endregion
2083 +//#region packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts
2084 + function useSanitizeOverridableProps(componentId, instanceElementId) {
2085 + const overridableProps = useOverridableProps(componentId);
2086 + const isSanitized = useIsSanitizedComponent(componentId, "overridableProps");
2087 + if (!overridableProps || !componentId) return;
2088 + if (isSanitized) return overridableProps;
2089 + return filterValidOverridableProps(overridableProps, instanceElementId);
2090 + }
2091 +
2092 +//#endregion
2093 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts
2094 + function useInstancePanelData() {
2095 + const { element, settings } = useComponentInstanceSettings();
2096 + const componentId = settings?.component_id?.value;
2097 + const overrides = settings?.overrides?.value;
2098 + const component = useComponent(componentId ?? null);
2099 + const componentInstanceId = element?.id;
2100 + const overridableProps = useSanitizeOverridableProps(componentId ?? null, componentInstanceId);
2101 + if (!componentId || !overridableProps || !component || !componentInstanceId) return null;
2102 + const isNonEmptyGroup = (group) => group !== null && group.props.length > 0;
2103 + const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup);
2104 + return {
2105 + componentId,
2106 + component,
2107 + overrides,
2108 + overridableProps,
2109 + groups,
2110 + isEmpty: groups.length === 0 || Object.keys(overridableProps.props).length === 0,
2111 + componentInstanceId
2112 + };
2113 + }
2114 + function useComponentInstanceSettings() {
2115 + const { element, settings } = (0, _elementor_editor_editing_panel.useElement)();
2116 + return {
2117 + element,
2118 + settings: componentInstancePropTypeUtil.extract(settings.component_instance)
2119 + };
2120 + }
2121 +
2122 +//#endregion
2123 +//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx
2124 + var EDIT_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-footer/";
2125 + function InstanceEditingPanel() {
2126 + const { canEdit } = useComponentsPermissions();
2127 + const data = useInstancePanelData();
2128 + if (!data) return null;
2129 + const { componentId, component, overrides, overridableProps, groups, isEmpty, componentInstanceId } = data;
2130 + const panelTitle = (0, _wordpress_i18n.__)("Edit %s", "elementor").replace("%s", component.name);
2131 + const actions = /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2132 + direction: "row",
2133 + gap: .5
2134 + }, /* @__PURE__ */ react.createElement(DetachAction, {
2135 + componentInstanceId,
2136 + componentId
2137 + }), canEdit && /* @__PURE__ */ react.createElement(EditComponentAction, {
2138 + disabled: true,
2139 + label: panelTitle,
2140 + icon: _elementor_icons.PencilIcon
2141 + }));
2142 + return /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2143 + "data-testid": "instance-editing-panel",
2144 + sx: {
2145 + display: "flex",
2146 + flexDirection: "column",
2147 + height: "100%"
2148 + }
2149 + }, /* @__PURE__ */ react.createElement(ComponentInstanceProvider, {
2150 + componentId,
2151 + overrides,
2152 + overridableProps
2153 + }, /* @__PURE__ */ react.createElement(InstancePanelHeader, {
2154 + componentName: component.name,
2155 + actions
2156 + }), /* @__PURE__ */ react.createElement(InstancePanelBody, {
2157 + groups,
2158 + isEmpty,
2159 + emptyState: /* @__PURE__ */ react.createElement(EmptyState, null),
2160 + componentInstanceId
2161 + })), !isProComponentsSupported() && (isProOutdatedForComponents() ? /* @__PURE__ */ react.createElement(ComponentsUpdateAlert, {
2162 + title: (0, _wordpress_i18n.__)("Edit Component", "elementor"),
2163 + description: (0, _wordpress_i18n.__)("To edit components, update Elementor Pro to the latest version.", "elementor")
2164 + }) : /* @__PURE__ */ react.createElement(ComponentsUpgradeAlert, {
2165 + title: (0, _wordpress_i18n.__)("Edit components", "elementor"),
2166 + description: (0, _wordpress_i18n.__)("Editing components requires an active Pro subscription.", "elementor"),
2167 + upgradeUrl: EDIT_UPGRADE_URL
2168 + })));
2169 + }
2170 +
2171 +//#endregion
2172 +//#region packages/packages/core/editor-components/src/utils/get-component-documents.ts
2173 + async function getComponentDocuments({ elements, cache = /* @__PURE__ */ new Map(), isRecursive = true }) {
2174 + return getDocumentsMap(await getComponentIds(elements, cache, isRecursive), cache);
2175 + }
2176 + async function getComponentIds(elements, cache, isRecursive) {
2177 + const results = await Promise.all(elements.filter(Boolean).map(async ({ widgetType, elType, elements: childElements, settings }) => {
2178 + const ids = [];
2179 + if (isComponentInstance({
2180 + widgetType,
2181 + elType
2182 + })) {
2183 + const componentId = settings?.component_instance?.value?.component_id.value;
2184 + if (!componentId) return ids;
2185 + ids.push(componentId);
2186 + if (!cache.has(componentId)) cache.set(componentId, getComponentDocumentData(componentId));
2187 + if (isRecursive) childElements = (await cache.get(componentId))?.elements;
2188 + }
2189 + if (childElements?.length) {
2190 + const childIds = await getComponentIds(childElements, cache, isRecursive);
2191 + ids.push(...childIds);
2192 + }
2193 + return ids;
2194 + }));
2195 + return [...new Set(results.flat())];
2196 + }
2197 + async function getDocumentsMap(ids, cache) {
2198 + const documents = await Promise.all(ids.map(async (id) => {
2199 + const document = await cache.get(id);
2200 + if (!document) return null;
2201 + return [id, document];
2202 + }));
2203 + return new Map(documents.filter((document) => document !== null));
2204 + }
2205 +
2206 +//#endregion
2207 +//#region packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts
2208 + async function loadComponentsOverridableProps(componentIds, { force = false } = {}) {
2209 + const idsToLoad = force ? componentIds : componentIds.filter((id) => !selectIsOverridablePropsLoaded((0, _elementor_store.__getState)(), id));
2210 + if (!idsToLoad.length) return;
2211 + const { data } = await apiClient.getOverridableProps(idsToLoad);
2212 + (0, _elementor_store.__dispatch)(slice.actions.loadOverridableProps(data));
2213 + }
2214 +
2215 +//#endregion
2216 +//#region packages/packages/core/editor-components/src/store/actions/load-components-assets.ts
2217 + async function loadComponentsAssets(elements) {
2218 + if (!elements.length) return;
2219 + const documents = await getComponentDocuments({
2220 + elements,
2221 + isRecursive: false
2222 + });
2223 + updateDocumentState(documents);
2224 + documents.forEach((document, id) => {
2225 + _elementor_editor_embedded_documents_manager.embeddedDocumentsManager.setDocument(id, document);
2226 + });
2227 + await loadComponentsOverridableProps([...documents.keys()]);
2228 + }
2229 + function updateDocumentState(documents) {
2230 + if ([...documents.values()].some(_elementor_editor_documents.isDocumentDirty)) (0, _elementor_editor_documents.setDocumentModifiedStatus)(true);
2231 + }
2232 +
2233 +//#endregion
2234 +//#region packages/packages/core/editor-components/src/components/load-template-components.tsx
2235 + var LoadTemplateComponents = () => {
2236 + if ((0, _elementor_editor_templates.isHandlingTemplateStyles)()) return /* @__PURE__ */ react.createElement(LoadTemplateComponentsInternal, null);
2237 + return null;
2238 + };
2239 + function LoadTemplateComponentsInternal() {
2240 + const templates = (0, _elementor_editor_templates.useLoadedTemplates)();
2241 + (0, react.useEffect)(() => {
2242 + loadComponentsAssets(templates.flatMap((elements) => elements ?? []));
2243 + }, [templates]);
2244 + return null;
2245 + }
2246 +
2247 +//#endregion
2248 +//#region packages/packages/core/editor-components/src/utils/format-component-elements-id.ts
2249 + var ELEMENT_ID_LENGTH$1 = 7;
2250 + function formatComponentElementsId(elements, path) {
2251 + return elements.map((element) => {
2252 + const nestingPath = [...path, element.id];
2253 + const id = (0, _elementor_utils.hashString)(nestingPath.join("_"), ELEMENT_ID_LENGTH$1);
2254 + return {
2255 + ...element,
2256 + id,
2257 + originId: element.id,
2258 + elements: element.elements ? formatComponentElementsId(element.elements, nestingPath) : void 0
2259 + };
2260 + });
2261 + }
2262 +
2263 +//#endregion
2264 +//#region packages/packages/core/editor-components/src/utils/reconcile-component-instance-elements.ts
2265 + var ELEMENT_ID_LENGTH = 7;
2266 + function overridesRecordToMapping(overrides) {
2267 + const mapping = {};
2268 + for (const [key, value] of Object.entries(overrides)) mapping[key] = { value };
2269 + return mapping;
2270 + }
2271 + function getElementConfig(element) {
2272 + const type = element.elType === "widget" ? element.widgetType : element.elType;
2273 + if (!type) return;
2274 + return (0, _elementor_editor_elements.getWidgetsCache)()?.[type];
2275 + }
2276 + function deriveIds(element, seed) {
2277 + const id = (0, _elementor_utils.hashString)(seed, ELEMENT_ID_LENGTH);
2278 + return {
2279 + ...element,
2280 + id,
2281 + elements: (element.elements ?? []).map((child, index) => deriveIds(child, `${id}_${index}`))
2282 + };
2283 + }
2284 + function reconcileElementTree(element, overridesMapping) {
2285 + const elementConfig = getElementConfig(element);
2286 + const effectiveSettings = unwrapOverridableSettings(applyOverridesToSettings(element.settings ?? {}, overridesMapping));
2287 + const originalChildren = element.elements ?? [];
2288 + const originalChildIds = new Set(originalChildren.map((child) => child.id));
2289 + const attributes = {
2290 + elements: [...originalChildren],
2291 + settings: effectiveSettings
2292 + };
2293 + if (elementConfig?.children_dependencies?.length) (0, _elementor_editor_elements.reconcileInitialChildren)({
2294 + elementId: element.id,
2295 + elementConfig,
2296 + attributes
2297 + });
2298 + const reconciledChildren = (attributes.elements ?? []).map((child) => originalChildIds.has(child.id) ? child : deriveIds(child, `${element.id}_${child.elType}`)).map((child) => reconcileElementTree(child, overridesMapping));
2299 + return {
2300 + ...element,
2301 + elements: reconciledChildren
2302 + };
2303 + }
2304 + function reconcileComponentInstanceElements(elements, overrides = {}) {
2305 + const overridesMapping = overridesRecordToMapping(overrides);
2306 + return elements.map((element) => reconcileElementTree(element, overridesMapping));
2307 + }
2308 +
2309 +//#endregion
2310 +//#region packages/packages/core/editor-components/src/utils/switch-to-component.ts
2311 + async function switchToComponent(componentId, componentInstanceId, element) {
2312 + const selector = getSelector(element, componentInstanceId);
2313 + (0, _elementor_editor_documents.invalidateDocumentData)(componentId);
2314 + await (0, _elementor_editor_documents.switchToDocument)(componentId, {
2315 + selector,
2316 + mode: "autosave",
2317 + setAsInitial: false,
2318 + shouldScroll: false
2319 + });
2320 + await loadComponentsOverridableProps([componentId], { force: true });
2321 + const topLevelElement = (0, _elementor_editor_elements.getCurrentDocumentContainer)()?.children?.[0];
2322 + if (topLevelElement) {
2323 + (0, _elementor_editor_elements.selectElement)(topLevelElement.id);
2324 + expandNavigator();
2325 + }
2326 + }
2327 + async function expandNavigator() {
2328 + await (0, _elementor_editor_v1_adapters.__privateRunCommand)("navigator/expand-all");
2329 + }
2330 + function getSelector(element, componentInstanceId) {
2331 + if (element) return buildUniqueSelector(element);
2332 + if (componentInstanceId) return `[data-id="${componentInstanceId}"]`;
2333 + }
2334 + function buildUniqueSelector(element) {
2335 + const selectors = [];
2336 + let current = element.closest("[data-id]");
2337 + while (current) {
2338 + const dataId = current.dataset.id;
2339 + if (current.hasAttribute("data-elementor-id")) selectors.unshift(`[data-id="${dataId}"]`);
2340 + current = current.parentElement?.closest("[data-id]") ?? null;
2341 + }
2342 + if (selectors.length === 0) {
2343 + const closestElement = element.closest("[data-id]");
2344 + if (closestElement?.dataset?.id) return `[data-id="${closestElement.dataset.id}"]`;
2345 + }
2346 + return selectors.join(" ");
2347 + }
2348 +
2349 +//#endregion
2350 +//#region packages/packages/core/editor-components/src/create-component-type.ts
2351 + var __defProp = Object.defineProperty;
2352 + var __typeError = (msg) => {
2353 + throw TypeError(msg);
2354 + };
2355 + var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
2356 + enumerable: true,
2357 + configurable: true,
2358 + writable: true,
2359 + value
2360 + }) : obj[key] = value;
2361 + var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
2362 + var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
2363 + var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
2364 + var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
2365 + var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
2366 + var COMPONENT_WIDGET_TYPE = "e-component";
2367 + var EDIT_COMPONENT_DB_CLICK_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-canvas-double-click/";
2368 + var EDIT_COMPONENT_CONTEXT_MENU_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-context-menu/";
2369 + var UPDATE_PLUGINS_URL = "/wp-admin/plugins.php";
2370 + var COMPONENT_EDIT_UPGRADE_NOTIFICATION_ID = "component-edit-upgrade";
2371 + var COMPONENT_EDIT_UPDATE_NOTIFICATION_ID = "component-edit-update";
2372 + var COMPONENT_EDIT_UPGRADE_AUTO_HIDE_DURATION = 2e3;
2373 + function notifyComponentEditUpgrade() {
2374 + (0, _elementor_editor_notifications.notify)({
2375 + type: "promotion",
2376 + id: COMPONENT_EDIT_UPGRADE_NOTIFICATION_ID,
2377 + message: (0, _wordpress_i18n.__)("Editing components requires an active Pro subscription.", "elementor"),
2378 + autoHideDuration: COMPONENT_EDIT_UPGRADE_AUTO_HIDE_DURATION,
2379 + additionalActionProps: [{
2380 + size: "small",
2381 + variant: "contained",
2382 + color: "promotion",
2383 + href: EDIT_COMPONENT_DB_CLICK_UPGRADE_URL,
2384 + target: "_blank",
2385 + children: (0, _wordpress_i18n.__)("Upgrade Now", "elementor")
2386 + }]
2387 + });
2388 + }
2389 + function notifyComponentEditUpdate() {
2390 + (0, _elementor_editor_notifications.notify)({
2391 + type: "info",
2392 + id: COMPONENT_EDIT_UPDATE_NOTIFICATION_ID,
2393 + message: (0, _wordpress_i18n.__)("To edit components, update Elementor Pro to the latest version.", "elementor"),
2394 + additionalActionProps: [{
2395 + size: "small",
2396 + variant: "contained",
2397 + color: "info",
2398 + href: UPDATE_PLUGINS_URL,
2399 + target: "_blank",
2400 + children: (0, _wordpress_i18n.__)("Update Now", "elementor")
2401 + }]
2402 + });
2403 + }
2404 + var updateGroups = (groups, config) => {
2405 + const disableMap = new Map(Object.entries(config.disable ?? {}));
2406 + const addMap = new Map(Object.entries(config.add ?? {}));
2407 + return groups.map((group) => {
2408 + const disabledActions = disableMap.get(group.name) ?? [];
2409 + const addConfig = addMap.get(group.name);
2410 + const updatedActions = group.actions.map((action) => disabledActions.includes(action.name) ? {
2411 + ...action,
2412 + isEnabled: () => false
2413 + } : action);
2414 + if (addConfig) updatedActions.splice(addConfig.index, 0, ...addConfig.actions);
2415 + return {
2416 + ...group,
2417 + actions: updatedActions
2418 + };
2419 + });
2420 + };
2421 + function createComponentType(options) {
2422 + const WidgetType = window.elementor.modules.elements.types.Widget;
2423 + const view = createComponentView({ ...options });
2424 + return class extends WidgetType {
2425 + getType() {
2426 + return options.type;
2427 + }
2428 + getView() {
2429 + return view;
2430 + }
2431 + getModel() {
2432 + return createComponentModel();
2433 + }
2434 + };
2435 + }
2436 + function createComponentView(options) {
2437 + var _componentRenderContext;
2438 + var _a;
2439 + const legacyWindow = window;
2440 + return _a = class extends (0, _elementor_editor_canvas.createTemplatedElementView)(options) {
2441 + constructor() {
2442 + super(...arguments);
2443 + __publicField(this, "eventsManagerConfig", legacyWindow.elementorCommon.eventsManager.config);
2444 + __privateAdd(this, _componentRenderContext);
2445 + }
2446 + isComponentCurrentlyEdited() {
2447 + return (0, _elementor_editor_documents.getCurrentDocument)()?.id === this.getComponentId();
2448 + }
2449 + getRenderContext() {
2450 + const namespaceKey = this.getNamespaceKey();
2451 + const parentContext = this._parent?.getRenderContext?.();
2452 + const parentComponentContext = parentContext?.[namespaceKey];
2453 + if (!__privateGet(this, _componentRenderContext)) return parentContext;
2454 + const ownOverrides = __privateGet(this, _componentRenderContext).overrides ?? {};
2455 + const parentOverrides = parentComponentContext?.overrides ?? {};
2456 + return {
2457 + ...parentContext,
2458 + [namespaceKey]: { overrides: {
2459 + ...parentOverrides,
2460 + ...ownOverrides
2461 + } }
2462 + };
2463 + }
2464 + getResolverRenderContext() {
2465 + const namespaceKey = this.getNamespaceKey();
2466 + const ownContext = this.getRenderContext()?.[namespaceKey];
2467 + if (!ownContext) return this._parent?.getResolverRenderContext?.();
2468 + return {
2469 + ...this._parent?.getResolverRenderContext?.(),
2470 + ...ownContext
2471 + };
2472 + }
2473 + afterSettingsResolve(settings) {
2474 + const componentInstance = settings.component_instance;
2475 + if (componentInstance) {
2476 + __privateSet(this, _componentRenderContext, { overrides: componentInstance.overrides ?? {} });
2477 + const instanceId = this.model.get("id");
2478 + const formattedElements = formatComponentElementsId(reconcileComponentInstanceElements(componentInstance.elements ?? [], componentInstance.overrides ?? {}), [instanceId]);
2479 + this.collection = legacyWindow.elementor.createBackboneElementsCollection(formattedElements);
2480 + this.collection.models.forEach(setInactiveRecursively);
2481 + settings.component_instance = "<template data-children-placeholder></template>";
2482 + }
2483 + return settings;
2484 + }
2485 + getDomElement() {
2486 + return this.children.findByIndex(0)?.getDomElement() ?? this.$el;
2487 + }
2488 + attachBuffer(collectionView, buffer) {
2489 + const childrenPlaceholder = collectionView.$el.find("[data-children-placeholder]").get(0);
2490 + if (!childrenPlaceholder) {
2491 + super.attachBuffer(collectionView, buffer);
2492 + return;
2493 + }
2494 + childrenPlaceholder.replaceWith(buffer);
2495 + }
2496 + getComponentId() {
2497 + return (this.options?.model?.get("settings")?.get("component_instance")?.value).component_id.value;
2498 + }
2499 + getContextMenuGroups() {
2500 + const filteredGroups = super.getContextMenuGroups().filter((group) => group.name !== "save");
2501 + if (!this.getComponentId()) return filteredGroups;
2502 + return updateGroups(filteredGroups, this._getContextMenuConfig());
2503 + }
2504 + _getContextMenuConfig() {
2505 + const isAdministrator = isUserAdministrator();
2506 + const hasPro = (0, _elementor_utils.hasProInstalled)();
2507 + const isOutdated = isProOutdatedForComponents();
2508 + const editComponentAction = {
2509 + name: "edit component",
2510 + icon: "eicon-edit",
2511 + title: () => (0, _wordpress_i18n.__)("Edit Component", "elementor"),
2512 + ...!hasPro && !isOutdated && {
2513 + shortcut: `<a href="${EDIT_COMPONENT_CONTEXT_MENU_UPGRADE_URL}" target="_blank" onclick="event.stopPropagation()" class="elementor-context-menu-list__item__shortcut__promotion-badge"><i class="eicon-upgrade-crown"></i></a>`,
2514 + hasShortcutAction: true
2515 + },
2516 + isEnabled: () => isProComponentsSupported() || isOutdated,
2517 + callback: (_, eventData) => this.editComponent(eventData)
2518 + };
2519 + const detachInstanceAction = {
2520 + name: "detach instance",
2521 + icon: "eicon-chain-broken",
2522 + title: () => (0, _wordpress_i18n.__)("Detach from Component", "elementor"),
2523 + isEnabled: () => true,
2524 + callback: (_, eventData) => this.detachInstance(eventData)
2525 + };
2526 + return {
2527 + add: { general: {
2528 + index: 1,
2529 + actions: isAdministrator ? [editComponentAction, detachInstanceAction] : [detachInstanceAction]
2530 + } },
2531 + disable: { clipboard: ["pasteStyle", "resetStyle"] }
2532 + };
2533 + }
2534 + async switchDocument() {
2535 + const { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(this.getComponentId());
2536 + if (!isAllowedToSwitchDocument) options.showLockedByModal?.(lockedBy || "");
2537 + else switchToComponent(this.getComponentId(), this.model.get("id"), this.el);
2538 + }
2539 + editComponent({ trigger, location, secondaryLocation }) {
2540 + if (isProOutdatedForComponents()) {
2541 + notifyComponentEditUpdate();
2542 + return;
2543 + }
2544 + if (!isProComponentsSupported() || this.isComponentCurrentlyEdited()) return;
2545 + this.switchDocument();
2546 + const editorSettings = this.model.get("editor_settings");
2547 + trackComponentEvent({
2548 + action: "edited",
2549 + executedBy: "user",
2550 + component_uid: editorSettings?.component_uid,
2551 + component_name: editorSettings?.title,
2552 + location,
2553 + secondary_location: secondaryLocation,
2554 + trigger
2555 + });
2556 + }
2557 + detachInstance({ trigger, location, secondaryLocation }) {
2558 + const componentId = this.getComponentId();
2559 + const instanceId = this.model.get("id");
2560 + if (!componentId || !instanceId) return;
2561 + const handleConfirm = async () => {
2562 + try {
2563 + await detachComponentInstance({
2564 + instanceId,
2565 + componentId,
2566 + trackingInfo: {
2567 + location,
2568 + secondaryLocation,
2569 + trigger
2570 + }
2571 + });
2572 + } catch {
2573 + (0, _elementor_editor_notifications.notify)({
2574 + type: "error",
2575 + message: (0, _wordpress_i18n.__)("Failed to detach component instance.", "elementor"),
2576 + id: "detach-component-instance-failed"
2577 + });
2578 + }
2579 + };
2580 + options.showDetachConfirmDialog?.(handleConfirm);
2581 + }
2582 + handleDblClick(e) {
2583 + e.stopPropagation();
2584 + if (!isUserAdministrator()) return;
2585 + if (isProOutdatedForComponents()) {
2586 + notifyComponentEditUpdate();
2587 + return;
2588 + }
2589 + if (!(0, _elementor_utils.hasProInstalled)()) {
2590 + notifyComponentEditUpgrade();
2591 + return;
2592 + }
2593 + const { triggers, locations, secondaryLocations } = this.eventsManagerConfig;
2594 + this.editComponent({
2595 + trigger: triggers.doubleClick,
2596 + location: locations.canvas,
2597 + secondaryLocation: secondaryLocations.canvasElement
2598 + });
2599 + }
2600 + events() {
2601 + return {
2602 + ...super.events(),
2603 + dblclick: this.handleDblClick
2604 + };
2605 + }
2606 + attributes() {
2607 + return {
2608 + ...super.attributes(),
2609 + "data-elementor-id": this.getComponentId()
2610 + };
2611 + }
2612 + }, _componentRenderContext = /* @__PURE__ */ new WeakMap(), _a;
2613 + }
2614 + function setInactiveRecursively(model) {
2615 + const editSettings = model.get("editSettings");
2616 + if (editSettings) editSettings.set("inactive", true);
2617 + const elements = model.get("elements");
2618 + if (elements) elements.forEach((childModel) => {
2619 + setInactiveRecursively(childModel);
2620 + });
2621 + }
2622 + function isUserAdministrator() {
2623 + return window.elementor.config?.user?.is_administrator ?? false;
2624 + }
2625 + function createComponentModel() {
2626 + const WidgetType = window.elementor.modules.elements.types.Widget;
2627 + const BaseWidgetModel = new WidgetType().getModel();
2628 + return BaseWidgetModel.extend({
2629 + initialize(attributes, options) {
2630 + BaseWidgetModel.prototype.initialize.call(this, attributes, options);
2631 + const componentInstance = this.get("settings")?.get("component_instance");
2632 + if (componentInstance?.value) {
2633 + const componentId = componentInstance.value.component_id?.value;
2634 + if (componentId && typeof componentId === "number") this.set("componentId", componentId);
2635 + }
2636 + this.set("isGlobal", true);
2637 + },
2638 + getTitle() {
2639 + const editorSettings = this.get("editor_settings");
2640 + const instanceTitle = editorSettings?.title;
2641 + if (instanceTitle) return instanceTitle;
2642 + const componentUid = editorSettings?.component_uid;
2643 + if (componentUid) {
2644 + const component = selectComponentByUid((0, _elementor_store.__getState)(), componentUid);
2645 + if (component?.name) return component.name;
2646 + }
2647 + return window.elementor.getElementData(this).title;
2648 + },
2649 + getComponentId() {
2650 + return this.get("componentId") || null;
2651 + },
2652 + getComponentName() {
2653 + return this.getTitle();
2654 + },
2655 + getComponentUid() {
2656 + return this.get("editor_settings")?.component_uid || null;
2657 + }
2658 + });
2659 + }
2660 +
2661 +//#endregion
2662 +//#region packages/packages/core/editor-components/src/populate-store.ts
2663 + function PopulateStore() {
2664 + (0, react.useEffect)(() => {
2665 + (0, _elementor_store.__dispatch)(loadComponents());
2666 + }, []);
2667 + return null;
2668 + }
2669 +
2670 +//#endregion
2671 +//#region packages/packages/core/editor-components/src/prevent-circular-nesting.ts
2672 + var COMPONENT_TYPE = "e-component";
2673 + var COMPONENT_CIRCULAR_NESTING_ALERT = {
2674 + type: "default",
2675 + message: (0, _wordpress_i18n.__)("Can't add this component - components that contain each other can't be nested.", "elementor"),
2676 + id: "circular-component-nesting-blocked"
2677 + };
2678 + function initCircularNestingPrevention() {
2679 + (0, _elementor_editor_v1_adapters.blockCommand)({
2680 + command: "document/elements/create",
2681 + condition: blockCircularCreate
2682 + });
2683 + (0, _elementor_editor_v1_adapters.blockCommand)({
2684 + command: "document/elements/move",
2685 + condition: blockCircularMove
2686 + });
2687 + (0, _elementor_editor_v1_adapters.blockCommand)({
2688 + command: "document/elements/paste",
2689 + condition: blockCircularPaste
2690 + });
2691 + }
2692 + function wouldCreateCircularNesting(componentIdToAdd) {
2693 + if (componentIdToAdd === void 0) return false;
2694 + const state = (0, _elementor_store.__getState)();
2695 + const currentComponentId = selectCurrentComponentId(state);
2696 + const path = selectPath(state);
2697 + if (currentComponentId === null) return false;
2698 + if (componentIdToAdd === currentComponentId) return true;
2699 + return path.some((item) => item.componentId === componentIdToAdd);
2700 + }
2701 + function extractComponentIdFromModel(model) {
2702 + if (!model) return null;
2703 + if (!(model.widgetType === COMPONENT_TYPE)) return null;
2704 + return model.settings?.component_instance?.value?.component_id?.value ?? null;
2705 + }
2706 + function extractComponentIdFromElement(element) {
2707 + if (element.widgetType !== COMPONENT_TYPE) return null;
2708 + return element.settings?.component_instance?.value?.component_id?.value ?? null;
2709 + }
2710 + function extractComponentIdsFromElements(elements) {
2711 + const ids = [];
2712 + for (const element of elements) {
2713 + const componentId = extractComponentIdFromElement(element);
2714 + if (componentId !== null) ids.push(componentId);
2715 + if (element.elements?.length) ids.push(...extractComponentIdsFromElements(element.elements));
2716 + }
2717 + return ids;
2718 + }
2719 + function extractComponentIdFromContainer(container) {
2720 + if (container.model?.get?.("widgetType") !== COMPONENT_TYPE) return null;
2721 + return ((container.model?.get?.("settings"))?.get?.("component_instance"))?.value?.component_id?.value ?? null;
2722 + }
2723 + function blockCircularCreate(args) {
2724 + const componentId = extractComponentIdFromModel(args.model);
2725 + if (componentId === null) return false;
2726 + const isBlocked = wouldCreateCircularNesting(componentId);
2727 + if (isBlocked) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT);
2728 + return isBlocked;
2729 + }
2730 + function blockCircularMove(args) {
2731 + const { containers = [args.container] } = args;
2732 + const hasCircularComponent = containers.some((container) => {
2733 + if (!container) return false;
2734 + return (0, _elementor_editor_elements.getAllDescendants)(container).some((element) => {
2735 + const componentId = extractComponentIdFromContainer(element);
2736 + if (componentId === null) return false;
2737 + return wouldCreateCircularNesting(componentId);
2738 + });
2739 + });
2740 + if (hasCircularComponent) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT);
2741 + return hasCircularComponent;
2742 + }
2743 + function blockCircularPaste(args) {
2744 + const { storageType } = args;
2745 + if (storageType !== "localstorage") return false;
2746 + const data = window?.elementorCommon?.storage?.get();
2747 + if (!data?.clipboard?.elements) return false;
2748 + const hasCircularComponent = extractComponentIdsFromElements(data.clipboard.elements).some(wouldCreateCircularNesting);
2749 + if (hasCircularComponent) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT);
2750 + return hasCircularComponent;
2751 + }
2752 +
2753 +//#endregion
2754 +//#region packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts
2755 + function removeComponentStyles(id) {
2756 + apiClient.invalidateComponentConfigCache(id);
2757 + }
2758 +
2759 +//#endregion
2760 +//#region packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts
2761 + var INSUFFICIENT_PERMISSIONS_ERROR_CODE = "insufficient_permissions";
2762 + var PUBLISH_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-draft-failure/";
2763 + var PUBLISH_UPGRADE_NOTIFICATION_ID = "component-publish-upgrade";
2764 + async function publishDraftComponentsInPageBeforeSave({ status, elements }) {
2765 + if (status !== "publish") return;
2766 + const draftIds = [...(await getComponentDocuments({ elements })).values()].filter(_elementor_editor_documents.isDocumentDirty).map((document) => document.id);
2767 + if (draftIds.length === 0) return;
2768 + try {
2769 + await apiClient.updateStatuses(draftIds, "publish");
2770 + } catch (error) {
2771 + if (isInsufficientPermissionsError(error)) {
2772 + notifyPublishUpgrade();
2773 + return;
2774 + }
2775 + throw error;
2776 + }
2777 + draftIds.forEach((id) => (0, _elementor_editor_documents.invalidateDocumentData)(id));
2778 + }
2779 + function isInsufficientPermissionsError(error) {
2780 + return error instanceof _elementor_http_client.AxiosError && error.response?.data?.code === INSUFFICIENT_PERMISSIONS_ERROR_CODE;
2781 + }
2782 + function notifyPublishUpgrade() {
2783 + (0, _elementor_editor_notifications.notify)({
2784 + type: "promotion",
2785 + id: PUBLISH_UPGRADE_NOTIFICATION_ID,
2786 + message: (0, _wordpress_i18n.__)("You have unpublished component on this page. You need a pro version to publish it.", "elementor"),
2787 + additionalActionProps: [{
2788 + size: "small",
2789 + variant: "contained",
2790 + color: "promotion",
2791 + href: PUBLISH_UPGRADE_URL,
2792 + target: "_blank",
2793 + children: (0, _wordpress_i18n.__)("Upgrade Now", "elementor")
2794 + }]
2795 + });
2796 + }
2797 +
2798 +//#endregion
2799 +//#region packages/packages/core/editor-components/src/sync/before-save.ts
2800 + var beforeSave = ({ container, status }) => {
2801 + return publishDraftComponentsInPageBeforeSave({
2802 + elements: container?.model.get("elements").toJSON?.() ?? [],
2803 + status
2804 + });
2805 + };
2806 +
2807 +//#endregion
2808 +//#region packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts
2809 + function initLoadComponentDataAfterInstanceAdded() {
2810 + (0, _elementor_editor_v1_adapters.registerDataHook)("after", "document/elements/paste", (_args, result) => {
2811 + load(result);
2812 + });
2813 + (0, _elementor_editor_v1_adapters.registerDataHook)("after", "document/elements/import", (_args, result) => {
2814 + load(result);
2815 + });
2816 + }
2817 + function load(result) {
2818 + if (!result) return;
2819 + loadComponentsAssets((Array.isArray(result) ? result : [result]).map((container) => container.model?.toJSON()).filter((element) => !!element));
2820 + }
2821 +
2822 +//#endregion
2823 +//#region packages/packages/core/editor-components/src/init.ts
2824 + function init() {
2825 + (0, _elementor_store.__registerSlice)(slice);
2826 + (0, _elementor_editor_canvas.registerElementType)(COMPONENT_WIDGET_TYPE, (options) => createComponentType({
2827 + ...options,
2828 + showLockedByModal: openEditModeDialog,
2829 + showDetachConfirmDialog: openDetachConfirmDialog
2830 + }));
2831 + window.elementorCommon.__beforeSave = beforeSave;
2832 + (0, _elementor_editor_elements_panel.injectTab)({
2833 + id: "components",
2834 + label: (0, _wordpress_i18n.__)("Components", "elementor"),
2835 + component: Components,
2836 + position: 1
2837 + });
2838 + (0, _elementor_editor.injectIntoLogic)({
2839 + id: "components-populate-store",
2840 + component: PopulateStore
2841 + });
2842 + (0, _elementor_editor_v1_adapters.registerDataHook)("after", "editor/documents/attach-preview", () => {
2843 + const { id, config } = (0, _elementor_editor_documents.getV1CurrentDocument)() ?? {};
2844 + if (!id) return;
2845 + removeComponentStyles(id);
2846 + loadComponentsAssets(config?.elements ?? []);
2847 + });
2848 + _elementor_editor_embedded_documents_manager.embeddedDocumentsManager.onDocumentLoad((_documentId, data) => {
2849 + loadComponentsAssets(data.elements ?? []);
2850 + });
2851 + (0, _elementor_editor.injectIntoLogic)({
2852 + id: "templates",
2853 + component: LoadTemplateComponents
2854 + });
2855 + (0, _elementor_editor_editing_panel.registerEditingPanelReplacement)({
2856 + id: "component-instance-edit-panel",
2857 + condition: (_, elementType) => elementType.key === "e-component",
2858 + component: InstanceEditingPanel
2859 + });
2860 + _elementor_editor_canvas.settingsTransformersRegistry.register("component-instance", componentInstanceTransformer);
2861 + _elementor_editor_canvas.settingsTransformersRegistry.register("overridable", componentOverridableTransformer);
2862 + _elementor_editor_canvas.settingsTransformersRegistry.register("override", componentOverrideTransformer);
2863 + initCircularNestingPrevention();
2864 + initLoadComponentDataAfterInstanceAdded();
2865 + }
2866 +
2867 +//#endregion
2868 +//#region packages/packages/core/editor-components/src/index.ts
2869 + var src_exports = /* @__PURE__ */ __exportAll({
2870 + COMPONENT_WIDGET_TYPE: () => COMPONENT_WIDGET_TYPE,
2871 + ComponentInstanceProvider: () => ComponentInstanceProvider,
2872 + ComponentItem: () => ComponentItem,
2873 + ComponentName: () => ComponentName,
2874 + ComponentSearch: () => ComponentSearch,
2875 + ComponentsList: () => ComponentsList,
2876 + DetachAction: () => DetachAction,
2877 + EditComponentAction: () => EditComponentAction,
2878 + EmptySearchResult: () => EmptySearchResult,
2879 + InstanceEmptyState: () => EmptyState,
2880 + InstancePanelBody: () => InstancePanelBody,
2881 + InstancePanelHeader: () => InstancePanelHeader,
2882 + LoadingComponents: () => LoadingComponents,
2883 + OverridablePropProvider: () => OverridablePropProvider,
2884 + SLICE_NAME: () => SLICE_NAME,
2885 + SearchProvider: () => SearchProvider,
2886 + apiClient: () => apiClient,
2887 + componentInstanceOverridePropTypeUtil: () => componentInstanceOverridePropTypeUtil,
2888 + componentInstanceOverridesPropTypeUtil: () => componentInstanceOverridesPropTypeUtil,
2889 + componentInstancePropTypeUtil: () => componentInstancePropTypeUtil,
2890 + componentOverridablePropTypeUtil: () => componentOverridablePropTypeUtil,
2891 + componentsActions: () => componentsActions,
2892 + componentsSelectors: () => componentsSelectors,
2893 + createComponentsAction: () => createComponentsAction,
2894 + filterValidOverridableProps: () => filterValidOverridableProps,
2895 + getComponentDocumentData: () => getComponentDocumentData,
2896 + getContainerByOriginId: () => getContainerByOriginId,
2897 + getOverridableProp: () => getOverridableProp,
2898 + getPropTypeForComponentOverride: () => getPropTypeForComponentOverride,
2899 + init: () => init,
2900 + isComponentInstance: () => isComponentInstance,
2901 + loadComponentsAssets: () => loadComponentsAssets,
2902 + onElementDrop: () => onElementDrop,
2903 + publishDraftComponentsInPageBeforeSave: () => publishDraftComponentsInPageBeforeSave,
2904 + registerComponentsReducer: () => registerComponentsReducer,
2905 + resolveOverridePropValue: () => resolveOverridePropValue,
2906 + selectComponentByUid: () => selectComponentByUid,
2907 + selectCreatedThisSession: () => selectCreatedThisSession,
2908 + selectOverridableProps: () => selectOverridableProps,
2909 + selectPath: () => selectPath,
2910 + slice: () => slice,
2911 + switchToComponent: () => switchToComponent,
2912 + trackComponentEvent: () => trackComponentEvent,
2913 + updateOverridableProp: () => updateOverridableProp,
2914 + useComponentInstanceElement: () => useComponentInstanceElement,
2915 + useComponents: () => useComponents,
2916 + useComponentsPermissions: () => useComponentsPermissions,
2917 + useCurrentComponent: () => useCurrentComponent,
2918 + useCurrentComponentId: () => useCurrentComponentId,
2919 + useFilteredComponents: () => useFilteredComponents,
2920 + useInstancePanelData: () => useInstancePanelData,
2921 + useIsSanitizedComponent: () => useIsSanitizedComponent,
2922 + useOverridablePropValue: () => useOverridablePropValue,
2923 + useOverridableProps: () => useOverridableProps,
2924 + useSanitizeOverridableProps: () => useSanitizeOverridableProps
2925 + });
2926 +
2927 +//#endregion
2928 +//#region \0elementor-package-library-entry
2929 + (window.elementorV2 = window.elementorV2 || {}).editorComponents = src_exports;
2930 +
2931 +//#endregion
2932 +})(elementorV2.editor, elementorV2.editorCanvas, elementorV2.editorDocuments, elementorV2.editorEditingPanel, elementorV2.editorElementsPanel, elementorV2.editorEmbeddedDocumentsManager, elementorV2.editorV1Adapters, elementorV2.store, wp.i18n, elementorV2.httpClient, React, elementorV2.editorUi, elementorV2.ui, elementorV2.utils, elementorV2.icons, elementorV2.editorCurrentUser, elementorV2.editorNotifications, elementorV2.editorElements, elementorV2.editorProps, elementorV2.schema, elementorV2.events, elementorV2.editorPanels, elementorV2.editorControls, elementorV2.editorTemplates);
2933 +window.elementorV2.editorComponents?.init?.();
3 2934 //# sourceMappingURL=editor-components.js.map