← 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 |