PluginProbe
Elementor Website Builder – more than just a page builder / 3.35.0-dev4
Elementor Website Builder – more than just a page builder v3.35.0-dev4
4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 All 455 releases
← All changes | assets/js/packages/editor-components/editor-components.js +55 -2923 4.3.0 → 3.35.0-dev4 View file →
@@ -1,2934 +1,66 @@
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) {
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 a},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}}),a={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:{componentId:e.toString()}}).then(e=>e.data.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 i}});var o=n("@elementor/editor-canvas"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts"),a=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts");const i=(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 i=await(0,a.getComponentDocumentData)(e);return{elements:i?.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[a]=Object.keys(s);return{[a]: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/component-panel-header/component-badge.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsBadge:function(){return i}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n");const i=o.forwardRef(({overridablePropsCount:e,onClick:t},n)=>{const i=function usePrevious(e){const t=(0,o.useRef)(e);return(0,o.useEffect)(()=>{t.current=e},[e]),t.current}(e),p=0===i&&1===e;return o.createElement(c,{ref:n,color:"primary",key:e,invisible:0===e,animate:p,anchorOrigin:{vertical:"top",horizontal:"right"},badgeContent:o.createElement(s.Box,{sx:{animation:p?"none":`${l} 300ms ease-out`}},e)},o.createElement(s.Tooltip,{title:(0,a.__)("Component properties","elementor")},o.createElement(s.ToggleButton,{value:"exposed properties",size:"tiny",onClick:t,"aria-label":(0,a.__)("Component properties","elementor")},o.createElement(r.ComponentPropListIcon,{fontSize:"tiny"}))))}),c=(0,s.styled)(s.Badge,{shouldForwardProp:e=>"animate"!==e})(({theme:e,animate:t})=>({"& .MuiBadge-badge":{minWidth:e.spacing(2),height:e.spacing(2),minHeight:e.spacing(2),maxWidth:e.spacing(2),fontSize:e.typography.caption.fontSize,animation:t?`${p} 300ms ease-out`:"none"}}));const p=s.keyframes`
3 + 0% { transform: scale(0) translate(50%, 50%); opacity: 0; }
4 + 70% { transform: scale(1.1) translate(50%, -50%); opacity: 1; }
5 + 100% { transform: scale(1) translate(50%, -50%); opacity: 1; }
6 +`,l=s.keyframes`
7 + from { transform: translateY(100%); opacity: 0; }
8 + to { transform: translateY(0); opacity: 1; }
9 +`},"./packages/packages/core/editor-components/src/components/component-panel-header/component-panel-header.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentPanelHeader:function(){return ComponentPanelHeader}});var o=n("react"),r=n("@elementor/editor-current-user"),s=n("@elementor/editor-documents"),a=n("@elementor/editor-panels"),i=n("@elementor/editor-ui"),c=n("@elementor/icons"),p=n("@elementor/store"),l=n("@elementor/ui"),m=n("@wordpress/i18n"),d=n("./packages/packages/core/editor-components/src/hooks/use-navigate-back.ts"),u=n("./packages/packages/core/editor-components/src/store/store.ts"),g=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),v=n("./packages/packages/core/editor-components/src/components/component-properties-panel/component-properties-panel.tsx"),f=n("./packages/packages/core/editor-components/src/components/components-tab/component-introduction.tsx"),y=n("./packages/packages/core/editor-components/src/components/component-panel-header/component-badge.tsx"),h=n("./packages/packages/core/editor-components/src/components/component-panel-header/use-overridable-props.ts");const ComponentPanelHeader=()=>{const{id:e,uid:t}=(0,u.useCurrentComponent)()??{id:null,uid:null},n=(0,h.useOverridableProps)(e),k=(0,d.useNavigateBack)(),b=function getComponentName(){const e=(0,p.__getState)()[u.SLICE_NAME].path,{instanceTitle:t}=e.at(-1)??{};if(t)return t;const n=(0,s.getV1DocumentsManager)().getCurrent();return n?.container?.settings?.get("post_title")??""}(),[C,E]=(0,r.useSuppressedMessage)("components-properties-introduction"),[_,P]=o.useState(!C),{open:x}=(0,v.usePanelActions)(),w=n?Object.keys(n.props).length:0,I=o.useRef(null);if(!e)return null;return o.createElement(l.Box,null,o.createElement(a.PanelHeader,{sx:{justifyContent:"start",px:2}},o.createElement(l.Tooltip,{title:(0,m.__)("Back","elementor")},o.createElement(l.IconButton,{size:"tiny",onClick:k,"aria-label":(0,m.__)("Back","elementor")},o.createElement(c.ArrowLeftIcon,{fontSize:"tiny"}))),o.createElement(c.ComponentsFilledIcon,{fontSize:"tiny",stroke:"currentColor"}),o.createElement(i.EllipsisWithTooltip,{title:b,as:l.Typography,variant:"caption",sx:{fontWeight:500,flexGrow:1}}),o.createElement(y.ComponentsBadge,{overridablePropsCount:w,ref:I,onClick:()=>{x(),(0,g.trackComponentEvent)({action:"propertiesPanelOpened",source:"user",component_uid:t,properties_count:w})}})),o.createElement(l.Divider,null),o.createElement(f.ComponentIntroduction,{anchorRef:I,shouldShowIntroduction:_,onClose:()=>{E(),P(!1)}}))}},"./packages/packages/core/editor-components/src/components/component-panel-header/use-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{useOverridableProps:function(){return useOverridableProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function useOverridableProps(e){return(0,o.__useSelector)(t=>{if(e)return(0,r.selectOverridableProps)(t,e)})}},"./packages/packages/core/editor-components/src/components/component-properties-panel/component-properties-panel-content.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentPropertiesPanelContent:function(){return ComponentPropertiesPanelContent}});var o=n("react"),r=n("@elementor/editor-documents"),s=n("@elementor/editor-panels"),a=n("@elementor/icons"),i=n("@elementor/ui"),c=n("@elementor/utils"),p=n("@wordpress/i18n"),l=n("./packages/packages/core/editor-components/src/store/actions/add-overridable-group.ts"),m=n("./packages/packages/core/editor-components/src/store/actions/delete-overridable-group.ts"),d=n("./packages/packages/core/editor-components/src/store/actions/delete-overridable-prop.ts"),u=n("./packages/packages/core/editor-components/src/store/actions/reorder-group-props.ts"),g=n("./packages/packages/core/editor-components/src/store/actions/reorder-overridable-groups.ts"),v=n("./packages/packages/core/editor-components/src/store/actions/update-overridable-prop-params.ts"),f=n("./packages/packages/core/editor-components/src/store/store.ts"),y=n("./packages/packages/core/editor-components/src/components/component-panel-header/use-overridable-props.ts"),h=n("./packages/packages/core/editor-components/src/components/component-properties-panel/properties-empty-state.tsx"),k=n("./packages/packages/core/editor-components/src/components/component-properties-panel/properties-group.tsx"),b=n("./packages/packages/core/editor-components/src/components/component-properties-panel/sortable.tsx"),C=n("./packages/packages/core/editor-components/src/components/component-properties-panel/use-current-editable-item.ts"),E=n("./packages/packages/core/editor-components/src/components/component-properties-panel/utils/generate-unique-label.ts");function ComponentPropertiesPanelContent({onClose:e}){const t=(0,f.useCurrentComponentId)(),n=(0,y.useOverridableProps)(t),[_,P]=(0,o.useState)(!1),x=(0,o.useRef)(null),w=(0,C.useCurrentEditableItem)(),I=(0,o.useMemo)(()=>n?n.groups.order.map(e=>n.groups.items[e]??null).filter(Boolean):[],[n]),O=(0,o.useMemo)(()=>I.map(e=>({value:e.id,label:e.label})),[I]);if(!t||!n)return null;const S=!(I.length>0)&&!_,T=n.groups.order,handlePropertyDelete=e=>{(0,d.deleteOverridableProp)({componentId:t,propKey:e,source:"user"}),(0,r.setDocumentModifiedStatus)(!0)},handlePropertyUpdate=(e,n)=>{(0,v.updateOverridablePropParams)({componentId:t,overrideKey:e,label:n.label,groupId:n.group}),(0,r.setDocumentModifiedStatus)(!0)},handleGroupDelete=e=>{(0,m.deleteOverridableGroup)({componentId:t,groupId:e}),(0,r.setDocumentModifiedStatus)(!0)};return o.createElement(o.Fragment,null,o.createElement(s.PanelHeader,{sx:{justifyContent:"start",pl:1.5,pr:1,py:1}},o.createElement(i.Stack,{direction:"row",alignItems:"center",gap:.5,flexGrow:1},o.createElement(a.ComponentPropListIcon,{fontSize:"tiny"}),o.createElement(s.PanelHeaderTitle,{variant:"subtitle2"},(0,p.__)("Component properties","elementor"))),!S&&o.createElement(i.Tooltip,{title:(0,p.__)("Add new group","elementor")},o.createElement(i.IconButton,{size:"tiny","aria-label":(0,p.__)("Add new group","elementor"),onClick:()=>{if(_)return;const e=(0,c.generateUniqueId)("group"),n=(0,E.generateUniqueLabel)(I);(0,l.addOverridableGroup)({componentId:t,groupId:e,label:n,source:"user"}),(0,r.setDocumentModifiedStatus)(!0),P(!1),w.setEditingGroupId(e)}},o.createElement(a.FolderPlusIcon,{fontSize:"tiny"}))),o.createElement(i.Tooltip,{title:(0,p.__)("Close panel","elementor")},o.createElement(i.IconButton,{ref:x,size:"tiny","aria-label":(0,p.__)("Close panel","elementor"),onClick:e},o.createElement(a.XIcon,{fontSize:"tiny"})))),o.createElement(i.Divider,null),o.createElement(s.PanelBody,null,S?o.createElement(h.PropertiesEmptyState,{introductionRef:x}):o.createElement(i.List,{sx:{p:2,display:"flex",flexDirection:"column",gap:2}},o.createElement(b.SortableProvider,{value:T,onChange:e=>{(0,g.reorderOverridableGroups)({componentId:t,newOrder:e}),(0,r.setDocumentModifiedStatus)(!0)}},I.map(e=>o.createElement(b.SortableItem,{key:e.id,id:e.id},({triggerProps:s,triggerStyle:a,isDragPlaceholder:i})=>o.createElement(k.PropertiesGroup,{group:e,props:n.props,allGroups:O,allGroupsRecord:n.groups.items,sortableTriggerProps:{...s,style:a},isDragPlaceholder:i,setIsAddingGroup:P,onPropsReorder:n=>{return o=e.id,s=n,(0,u.reorderGroupProps)({componentId:t,groupId:o,newPropsOrder:s}),void(0,r.setDocumentModifiedStatus)(!0);var o,s},onPropertyDelete:handlePropertyDelete,onPropertyUpdate:handlePropertyUpdate,editableLabelProps:w,onGroupDelete:handleGroupDelete})))))))}},"./packages/packages/core/editor-components/src/components/component-properties-panel/component-properties-panel.tsx":function(e,t,n){n.r(t),n.d(t,{panel:function(){return m},usePanelActions:function(){return d}});var o=n("react"),r=n("@elementor/editor-editing-panel"),s=n("@elementor/editor-elements"),a=n("@elementor/editor-panels"),i=n("@elementor/editor-ui"),c=n("@elementor/ui"),p=n("@wordpress/i18n"),l=n("./packages/packages/core/editor-components/src/components/component-properties-panel/component-properties-panel-content.tsx");const{panel:m,usePanelActions:d}=(0,a.__createPanel)({id:"component-properties-panel",component:function ComponentPropertiesPanel(){const{element:e,elementType:t}=(0,s.useSelectedElement)(),{close:n}=d(),{open:p}=(0,r.usePanelActions)();if(!e||!t)return null;return o.createElement(i.ThemeProvider,null,o.createElement(c.ErrorBoundary,{fallback:o.createElement(ErrorBoundaryFallback,null)},o.createElement(r.ElementProvider,{element:e,elementType:t},o.createElement(a.Panel,null,o.createElement(l.ComponentPropertiesPanelContent,{onClose:()=>{n(),p()}})))))}});const ErrorBoundaryFallback=()=>o.createElement(c.Box,{role:"alert",sx:{minHeight:"100%",p:2}},o.createElement(c.Alert,{severity:"error",sx:{mb:2,maxWidth:400,textAlign:"center"}},o.createElement("strong",null,(0,p.__)("Something went wrong","elementor"))))},"./packages/packages/core/editor-components/src/components/component-properties-panel/properties-empty-state.tsx":function(e,t,n){n.r(t),n.d(t,{PropertiesEmptyState:function(){return PropertiesEmptyState}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/components/components-tab/component-introduction.tsx");function PropertiesEmptyState({introductionRef:e}){const[t,n]=(0,o.useState)(!1);return o.createElement(o.Fragment,null,o.createElement(s.Stack,{alignItems:"center",justifyContent:"flex-start",height:"100%",color:"text.secondary",sx:{px:2.5,pt:10,pb:5.5},gap:1},o.createElement(r.ComponentPropListIcon,{fontSize:"large"}),o.createElement(s.Typography,{align:"center",variant:"subtitle2"},(0,a.__)("Add your first property","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption"},(0,a.__)("Make instances flexible while keeping design synced.","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption"},(0,a.__)("Select any element, then click + next to a setting to expose it.","elementor")),o.createElement(s.Link,{variant:"caption",color:"secondary",sx:{textDecorationLine:"underline"},onClick:()=>n(!0)},(0,a.__)("Learn more","elementor"))),o.createElement(i.ComponentIntroduction,{anchorRef:e,shouldShowIntroduction:t,onClose:()=>n(!1)}))}},"./packages/packages/core/editor-components/src/components/component-properties-panel/properties-group.tsx":function(e,t,n){n.r(t),n.d(t,{PropertiesGroup:function(){return PropertiesGroup}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),a=n("@elementor/ui"),i=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/components/component-properties-panel/property-item.tsx"),p=n("./packages/packages/core/editor-components/src/components/component-properties-panel/sortable.tsx");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)}function PropertiesGroup({group:e,props:t,allGroups:n,sortableTriggerProps:l,isDragPlaceholder:m,onPropsReorder:d,onPropertyDelete:u,onPropertyUpdate:g,onGroupDelete:v,editableLabelProps:f}){const y=e.props.map(e=>t[e]).filter(e=>Boolean(e)),h=(0,a.usePopupState)({variant:"popover",disableAutoFocus:!0}),{editableRef:k,isEditing:b,error:C,getEditableProps:E,setEditingGroupId:_,editingGroupId:P}=f,x=e.props.length>0,w=b&&P===e.id;return o.createElement(a.Box,{sx:{opacity:m?.5:1}},o.createElement(a.Stack,{gap:1},o.createElement(a.Box,{className:"group-header",sx:{position:"relative","&:hover .group-sortable-trigger":{visibility:"visible"},"& .group-sortable-trigger":{visibility:"hidden"},"&:hover .group-menu":{visibility:"visible"},"& .group-menu":{visibility:"hidden"}}},o.createElement(p.SortableTrigger,_extends({triggerClassName:"group-sortable-trigger"},l)),o.createElement(a.Stack,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:2},w?o.createElement(a.Box,{sx:{height:28,display:"flex",alignItems:"center",border:2,borderColor:"text.secondary",borderRadius:1,pl:.5,flexGrow:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",width:"100%"}},o.createElement(r.EditableField,_extends({ref:k,as:a.Typography,variant:"caption",error:C??void 0,sx:{color:"text.primary",fontWeight:400,lineHeight:1.66}},E()))):o.createElement(r.EllipsisWithTooltip,{title:e.label,as:a.Typography,variant:"caption",sx:{color:"text.primary",fontWeight:400,lineHeight:1.66}}),o.createElement(a.IconButton,_extends({className:"group-menu",size:"tiny",sx:{p:.25,visibility:w?"visible":void 0},"aria-label":(0,i.__)("Group actions","elementor")},(0,a.bindTrigger)(h)),o.createElement(s.DotsVerticalIcon,{fontSize:"tiny"})))),o.createElement(a.List,{sx:{p:0,display:"flex",flexDirection:"column",gap:1}},o.createElement(p.SortableProvider,{value:e.props,onChange:d},y.map(e=>o.createElement(p.SortableItem,{key:e.overrideKey,id:e.overrideKey},({triggerProps:r,triggerStyle:s,isDragPlaceholder:a})=>o.createElement(c.PropertyItem,{prop:e,sortableTriggerProps:{...r,style:s},isDragPlaceholder:a,groups:n,existingLabels:Object.values(t).map(e=>e.label),onDelete:u,onUpdate:t=>g(e.overrideKey,t)})))))),o.createElement(a.Menu,_extends({},(0,a.bindMenu)(h),{anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"}}),o.createElement(r.MenuListItem,{sx:{minWidth:"160px"},onClick:()=>{h.close(),_(e.id)}},o.createElement(a.Typography,{variant:"caption",sx:{color:"text.primary"}},(0,i.__)("Rename","elementor"))),o.createElement(a.Tooltip,{title:x?(0,i.__)("To delete the group, first remove all the properties","elementor"):"",placement:"right"},o.createElement("span",null,o.createElement(r.MenuListItem,{onClick:()=>{h.close(),v(e.id)},disabled:x},o.createElement(a.Typography,{variant:"caption",sx:{color:x?"text.disabled":"error.light"}},(0,i.__)("Delete","elementor")))))))}},"./packages/packages/core/editor-components/src/components/component-properties-panel/property-item.tsx":function(e,t,n){n.r(t),n.d(t,{PropertyItem:function(){return PropertyItem}});var o=n("react"),r=n("@elementor/editor-elements"),s=n("@elementor/icons"),a=n("@elementor/ui"),i=n("./packages/packages/core/editor-components/src/components/overridable-props/overridable-prop-form.tsx"),c=n("./packages/packages/core/editor-components/src/components/component-properties-panel/sortable.tsx");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)}function PropertyItem({prop:e,sortableTriggerProps:t,isDragPlaceholder:n,groups:p,existingLabels:l,onDelete:m,onUpdate:d}){const u=(0,a.usePopupState)({variant:"popover"}),g=function getElementIcon(e){const t="widget"===e.elType?e.widgetType:e.elType,n=(0,r.getWidgetsCache)();if(!n)return"eicon-apps";const o=n[t];return o?.icon||"eicon-apps"}(e),v=(0,a.bindPopover)(u);return o.createElement(o.Fragment,null,o.createElement(a.Box,_extends({},(0,a.bindTrigger)(u),{sx:{position:"relative",pl:.5,pr:1,py:.25,minHeight:28,borderRadius:1,border:"1px solid",borderColor:"divider",display:"flex",alignItems:"center",gap:.5,opacity:n?.5:1,cursor:"pointer","&:hover":{backgroundColor:"action.hover"},"&:hover .sortable-trigger":{visibility:"visible"},"& .sortable-trigger":{visibility:"hidden"},"&:hover .delete-button":{visibility:"visible"},"& .delete-button":{visibility:"hidden"}}}),o.createElement(c.SortableTrigger,t),o.createElement(a.Box,{sx:{display:"flex",alignItems:"center",color:"text.primary",fontSize:12,padding:.25}},o.createElement("i",{className:g})),o.createElement(a.Typography,{variant:"caption",sx:{color:"text.primary",flexGrow:1,fontSize:10}},e.label),o.createElement(a.IconButton,{size:"tiny",onClick:t=>{t.stopPropagation(),m(e.overrideKey)},"aria-label":"Delete property",sx:{p:.25}},o.createElement(s.XIcon,{fontSize:"tiny"}))),o.createElement(a.Popover,_extends({},v,{anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},PaperProps:{sx:{width:u.anchorEl?.getBoundingClientRect().width}}}),o.createElement(i.OverridablePropForm,{onSubmit:e=>{d(e),u.close()},currentValue:e,groups:p,existingLabels:l,sx:{width:"100%"}})))}},"./packages/packages/core/editor-components/src/components/component-properties-panel/sortable.tsx":function(e,t,n){n.r(t),n.d(t,{SortableItem:function(){return SortableItem},SortableProvider:function(){return SortableProvider},SortableTrigger:function(){return SortableTrigger}});var o=n("react"),r=n("@elementor/icons"),s=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 SortableProvider=e=>o.createElement(s.UnstableSortableProvider,_extends({restrictAxis:!0,variant:"static",dragPlaceholderStyle:{opacity:"1"}},e)),SortableTrigger=({triggerClassName:e,...t})=>o.createElement(a,_extends({},t,{role:"button",className:`sortable-trigger ${e??""}`.trim(),"aria-label":"sort"}),o.createElement(r.GripVerticalIcon,{fontSize:"tiny"})),SortableItem=({children:e,id:t})=>o.createElement(s.UnstableSortableItem,{id:t,render:({itemProps:t,isDragged:n,triggerProps:r,itemStyle:a,triggerStyle:c,dropIndicationStyle:p,showDropIndication:l,isDragOverlay:m,isDragPlaceholder:d})=>o.createElement(s.Box,_extends({},t,{style:a,component:"div",role:"listitem",sx:{backgroundColor:m?"background.paper":void 0}}),e({isDragged:n,isDragPlaceholder:d,triggerProps:r,triggerStyle:c}),l&&o.createElement(i,{style:p}))}),a=(0,s.styled)("div")(({theme:e})=>({position:"absolute",left:"-2px",top:"50%",transform:`translate( -${e.spacing(1.5)}, -50% )`,color:e.palette.action.active,cursor:"grab"})),i=(0,s.styled)(s.Box)`
10 + width: 100%;
11 + height: 1px;
12 + background-color: ${({theme:e})=>e.palette.text.primary};
13 +`},"./packages/packages/core/editor-components/src/components/component-properties-panel/use-current-editable-item.ts":function(e,t,n){n.r(t),n.d(t,{useCurrentEditableItem:function(){return useCurrentEditableItem}});var o=n("react"),r=n("@elementor/editor-documents"),s=n("@elementor/editor-ui"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/store/actions/rename-overridable-group.ts"),c=n("./packages/packages/core/editor-components/src/store/store.ts"),p=n("./packages/packages/core/editor-components/src/components/component-panel-header/use-overridable-props.ts"),l=n("./packages/packages/core/editor-components/src/components/component-properties-panel/utils/validate-group-label.ts");function useCurrentEditableItem(){const[e,t]=(0,o.useState)(null),n=(0,c.useCurrentComponentId)(),m=(0,p.useOverridableProps)(n),d=m?.groups?.items??{},u=e?d[e]:null,{ref:g,openEditMode:v,isEditing:f,error:y,getProps:h}=(0,s.useEditable)({value:u?.label??"",onSubmit:t=>{if(!e||!n)throw new Error((0,a.__)("Group ID or component ID is missing","elementor"));(0,i.renameOverridableGroup)({componentId:n,groupId:e,label:t}),(0,r.setDocumentModifiedStatus)(!0)},validation:t=>{const n=Object.fromEntries(Object.entries(d).filter(([t])=>t!==e));return(0,l.validateGroupLabel)(t,n)||null}});return{editableRef:g,isEditing:f,error:y,getEditableProps:h,setEditingGroupId:e=>{t(e),v()},editingGroupId:e}}},"./packages/packages/core/editor-components/src/components/component-properties-panel/utils/generate-unique-label.ts":function(e,t,n){n.r(t),n.d(t,{generateUniqueLabel:function(){return generateUniqueLabel}});const o="New group";function generateUniqueLabel(e){const t=new Set(e.map(e=>e.label));if(!t.has(o))return o;let n=1,r=`${o}-${n}`;for(;t.has(r);)n++,r=`${o}-${n}`;return r}},"./packages/packages/core/editor-components/src/components/component-properties-panel/utils/validate-group-label.ts":function(e,t,n){n.r(t),n.d(t,{ERROR_MESSAGES:function(){return r},validateGroupLabel:function(){return validateGroupLabel}});var o=n("@wordpress/i18n");const r={EMPTY_NAME:(0,o.__)("Group name is required","elementor"),DUPLICATE_NAME:(0,o.__)("Group name already exists","elementor")};function validateGroupLabel(e,t){const n=e.trim();if(!n)return r.EMPTY_NAME;return Object.values(t).some(e=>e.label===n)?r.DUPLICATE_NAME:""}},"./packages/packages/core/editor-components/src/components/components-tab/component-introduction.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentIntroduction:function(){return ComponentIntroduction}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-ui"),a=n("@elementor/ui"),i=n("@wordpress/i18n");const ComponentIntroduction=({anchorRef:e,shouldShowIntroduction:t,onClose:n})=>e.current&&t?o.createElement(a.Popover,{anchorEl:e.current,open:t,anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:-30},onClose:n},o.createElement(a.Box,{sx:{width:"296px"}},o.createElement(s.PopoverHeader,{title:(0,i.__)("Add your first property","elementor"),onClose:n}),o.createElement(a.Image,{sx:{width:"296px",height:"160px"},src:"https://assets.elementor.com/packages/v1/images/components-properties-intro.png",alt:""}),o.createElement(r.PopoverContent,null,o.createElement(a.Stack,{sx:{p:2}},o.createElement(a.Typography,{variant:"body2"},(0,i.__)("Properties make instances flexible.","elementor")),o.createElement(a.Typography,{variant:"body2"},(0,i.__)("Select any Element, then in the General tab, click next to any setting you want users to customize - like text, images, or links.","elementor")),o.createElement(a.Typography,{variant:"body2",sx:{mt:2}},(0,i.__)("Your properties will appear in the Properties panel, where you can organize and manage them anytime.","elementor")),o.createElement(a.Link,{href:"http://go.elementor.com/components-guide",target:"_blank",sx:{mt:2},color:"info.main",variant:"body2"},(0,i.__)("Learn more","elementor")),o.createElement(a.Stack,{direction:"row",alignItems:"center",justifyContent:"flex-end",sx:{pt:1}},o.createElement(a.Button,{size:"medium",variant:"contained",onClick:n},(0,i.__)("Got it","elementor"))))))):null},"./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"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const ComponentSearch=()=>{const{inputValue:e,handleChange:t}=(0,i.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,a.__)("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 ComponentItem}});var o=n("react"),r=n("@elementor/editor-canvas"),s=n("@elementor/editor-elements"),a=n("@elementor/editor-ui"),i=n("@elementor/icons"),c=n("@elementor/ui"),p=n("@wordpress/i18n"),l=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),m=n("./packages/packages/core/editor-components/src/store/actions/archive-component.ts"),d=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts"),u=n("./packages/packages/core/editor-components/src/utils/component-name-validation.ts"),g=n("./packages/packages/core/editor-components/src/utils/get-container-for-new-element.ts"),v=n("./packages/packages/core/editor-components/src/components/create-component-form/utils/replace-element-with-component.ts"),f=n("./packages/packages/core/editor-components/src/components/components-tab/delete-confirmation-dialog.tsx");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 ComponentItem=({component:e,renameComponent:t})=>{const n=(0,o.useRef)(null),[s,u]=(0,o.useState)(!1),{canRename:g,canDelete:h}=(0,l.useComponentsPermissions)(),k=g||h,{ref:b,isEditing:C,openEditMode:E,error:_,getProps:P}=(0,a.useEditable)({value:e.name,onSubmit:t,validation:validateComponentTitle}),x=(0,v.createComponentModel)(e),w=(0,c.usePopupState)({variant:"popover",disableAutoFocus:!0});return o.createElement(c.Stack,null,o.createElement(a.WarningInfotip,{open:Boolean(_),text:_??"",placement:"bottom",width:n.current?.getBoundingClientRect().width,offset:[0,-15]},o.createElement(c.ListItemButton,{draggable:!0,onDragStart:e=>(0,r.startDragElementFromPanel)(x,e),onDragEnd:()=>{(0,d.loadComponentsAssets)([x]),(0,r.endDragElementFromPanel)()},shape:"rounded",ref:n,sx:{border:"solid 1px",borderColor:"divider",py:.5,px:1,display:"flex",width:"100%",alignItems:"center",gap:1}},o.createElement(c.Box,{display:"flex",alignItems:"center",gap:1,minWidth:0,flexGrow:1,onClick:()=>{addComponentToPage(x)}},o.createElement(c.ListItemIcon,{size:"tiny"},o.createElement(i.ComponentsIcon,{fontSize:"tiny"})),o.createElement(y,{isActive:C,isError:!!_},o.createElement(c.Box,{display:"flex",flex:1,minWidth:0,flexGrow:1},C?o.createElement(a.EditableField,_extends({ref:b,as:c.Typography,variant:"caption"},P())):o.createElement(a.EllipsisWithTooltip,{title:e.name,as:c.Typography,variant:"caption",color:"text.primary"})))),k&&o.createElement(c.IconButton,_extends({size:"tiny"},(0,c.bindTrigger)(w),{"aria-label":"More actions"}),o.createElement(i.DotsVerticalIcon,{fontSize:"tiny"})))),k&&o.createElement(c.Menu,_extends({},(0,c.bindMenu)(w),{anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"}}),g&&o.createElement(a.MenuListItem,{sx:{minWidth:"160px"},primaryTypographyProps:{variant:"caption",color:"text.primary"},onClick:()=>{w.close(),E()}},(0,p.__)("Rename","elementor")),h&&o.createElement(a.MenuListItem,{sx:{minWidth:"160px"},primaryTypographyProps:{variant:"caption",color:"error.light"},onClick:()=>{u(!0),w.close()}},(0,p.__)("Delete","elementor"))),o.createElement(f.DeleteConfirmationDialog,{open:s,onClose:()=>{u(!1)},onConfirm:()=>{if(!e.id)throw new Error("Component ID is required");u(!1),(0,m.archiveComponent)(e.id,e.name)}}))},addComponentToPage=e=>{const{container:t,options:n}=(0,g.getContainerForNewElement)();if(!t)throw new Error("Can't find container to drop new component instance at");(0,d.loadComponentsAssets)([e]),(0,s.dropElement)({containerId:t.id,model:e,options:{...n,useHistory:!1,scrollIntoView:!0}})},validateComponentTitle=e=>{const t=(0,u.validateComponentName)(e);return t.errorMessage?t.errorMessage:null},y=(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"},"./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}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/hooks/use-components.ts"),c=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),p=n("./packages/packages/core/editor-components/src/store/actions/rename-component.ts"),l=n("./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx"),m=n("./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx"),d=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(m.LoadingComponents,null);return!e||0===e.length?n.length>0?o.createElement(EmptySearchResult,null):o.createElement(EmptyState,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,renameComponent:t=>{(0,p.renameComponent)(e.uid,t)}})))}const EmptyState=()=>{const{canCreate:e}=(0,c.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,a.__)("No components yet","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:200}},(0,a.__)("Components are reusable blocks that sync across your site.","elementor"),o.createElement("br",null),e?(0,a.__)("Create once, use everywhere.","elementor"):(0,a.__)("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,a.__)("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,a.__)("Create your first one:","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:228}},(0,a.__)('Right-click any div-block or flexbox on your canvas or structure and select "Create component"',"elementor")))))},EmptySearchResult=()=>{const{searchValue:e,clearSearch:t}=(0,d.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,a.__)("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,a.__)("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,a.__)("Clear & try again","elementor"))))},useFilteredComponents=()=>{const{components:e,isLoading:t}=(0,i.useComponents)(),{searchValue:n}=(0,d.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}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/ui"),a=n("@wordpress/i18n");function ComponentsProNotification(){return o.createElement(s.Box,{sx:{px:2}},o.createElement(r.InfoAlert,null,o.createElement(s.Typography,{variant:"caption",component:"span"},o.createElement(s.Typography,{variant:"caption",component:"span",fontWeight:"bold"},(0,a.__)("Try Components for free:","elementor"))," ",(0,a.__)("Soon Components will be part of the Pro subscription, but what you create now will remain on your site.","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("./packages/packages/core/editor-components/src/hooks/use-components.ts"),a=n("./packages/packages/core/editor-components/src/utils/is-pro-user.ts"),i=n("./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx"),c=n("./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx"),p=n("./packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx"),l=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const ComponentsContent=()=>{const{components:e,isLoading:t}=(0,s.useComponents)(),n=!t&&e.length>0;return o.createElement(o.Fragment,null,n&&o.createElement(i.ComponentSearch,null),n&&!(0,a.isProUser)()&&o.createElement(p.ComponentsProNotification,null),o.createElement(c.ComponentsList,null))},Components=()=>o.createElement(r.ThemeProvider,null,o.createElement(l.SearchProvider,{localStorageKey:"elementor-components-search"},o.createElement(ComponentsContent,null)))},"./packages/packages/core/editor-components/src/components/components-tab/delete-confirmation-dialog.tsx":function(e,t,n){n.r(t),n.d(t,{DeleteConfirmationDialog:function(){return DeleteConfirmationDialog}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@wordpress/i18n");function DeleteConfirmationDialog({open:e,onClose:t,onConfirm:n}){return o.createElement(r.ConfirmationDialog,{open:e,onClose:t},o.createElement(r.ConfirmationDialog.Title,null,(0,s.__)("Delete this component?","elementor")),o.createElement(r.ConfirmationDialog.Content,null,o.createElement(r.ConfirmationDialog.ContentText,null,(0,s.__)("Existing instances on your pages will remain functional. You will no longer find this component in your list.","elementor"))),o.createElement(r.ConfirmationDialog.Actions,{onClose:t,onConfirm:n}))}},"./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:6},(e,t)=>t),LoadingComponents=()=>o.createElement(r.Stack,{"aria-label":"Loading components",gap:1,sx:{pointerEvents:"none",position:"relative",maxHeight:"300px",overflow:"hidden","&:after":{position:"absolute",top:0,content:'""',left:0,width:"100%",height:"300px",background:"linear-gradient(to top, white, transparent)",pointerEvents:"none"}}},s.map(e=>o.createElement(r.ListItemButton,{key:e,sx:{border:"solid 1px",borderColor:"divider",py:.5,px:1},shape:"rounded"},o.createElement(r.Box,{display:"flex",gap:1,width:"100%"},o.createElement(r.Skeleton,{variant:"text",width:"24px",height:"36px"}),o.createElement(r.Skeleton,{variant:"text",width:"100%",height:"36px"})))))},"./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:a,inputValue:i}=(0,r.useSearchState)({localStorageKey:t});return o.createElement(s.Provider,{value:{handleChange:a,clearSearch:()=>{a("")},searchValue:n,inputValue:i}},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/consts.ts":function(e,t,n){n.r(t),n.d(t,{COMPONENT_DOCUMENT_TYPE:function(){return o},OVERRIDABLE_PROP_REPLACEMENT_ID:function(){return r}});const o="elementor_component",r="overridable-prop"},"./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/create-component-form/create-component-form.tsx":function(e,t,n){n.r(t),n.d(t,{CreateComponentForm:function(){return CreateComponentForm}});var o=n("react"),r=n("@elementor/editor-elements"),s=n("@elementor/editor-notifications"),a=n("@elementor/editor-ui"),i=n("@elementor/icons"),c=n("@elementor/store"),p=n("@elementor/ui"),l=n("@wordpress/i18n"),m=n("./packages/packages/core/editor-components/src/hooks/use-components.ts"),d=n("./packages/packages/core/editor-components/src/prevent-non-atomic-nesting.ts"),u=n("./packages/packages/core/editor-components/src/store/actions/create-unpublished-component.ts"),g=n("./packages/packages/core/editor-components/src/store/store.ts"),v=n("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),f=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),y=n("./packages/packages/core/editor-components/src/components/create-component-form/hooks/use-form.ts"),h=n("./packages/packages/core/editor-components/src/components/create-component-form/utils/component-form-schema.ts"),k=n("./packages/packages/core/editor-components/src/components/create-component-form/utils/get-component-event-data.ts");const b=100;function CreateComponentForm(){const[e,t]=(0,o.useState)(null),[n,i]=(0,o.useState)(),{components:y}=(0,m.useComponents)(),h=(0,o.useRef)(null);(0,o.useEffect)(()=>{const e="elementor/editor/open-save-as-component-form",openPopup=e=>{const{shouldOpen:n,notification:o}=function shouldOpenForm(e,t){const n=(0,d.findNonAtomicElementsInElement)(e);if(n.length>0)return{shouldOpen:!1,notification:{type:"default",message:(0,l.__)("Components require atomic elements only. Remove widgets to create this component.","elementor"),id:"non-atomic-element-save-blocked"}};if(t>=b)return{shouldOpen:!1,notification:{type:"default",message:(0,l.__)("You've reached the limit of %s components. Please remove an existing one to create a new component.","elementor").replace("%s",b.toString()),id:"maximum-number-of-components-exceeded"}};return{shouldOpen:!0,notification:null}}(e.detail.element,y?.length??0);n?(t({element:e.detail.element,elementLabel:(0,r.getElementLabel)(e.detail.element.id)}),i(e.detail.anchorPosition),h.current=(0,k.getComponentEventData)(e.detail.element,e.detail.options),(0,f.trackComponentEvent)({action:"createClicked",source:"user",...h.current})):(0,s.notify)(o)};return window.addEventListener(e,openPopup),()=>{window.removeEventListener(e,openPopup)}},[y?.length]);const resetAndClosePopup=()=>{t(null),i(void 0)},cancelSave=()=>{resetAndClosePopup(),(0,f.trackComponentEvent)({action:"createCancelled",source:"user",...h.current})};return o.createElement(a.ThemeProvider,null,o.createElement(p.Popover,{open:null!==e,onClose:cancelSave,anchorReference:"anchorPosition",anchorPosition:n},null!==e&&o.createElement(Form,{initialValues:{componentName:e.elementLabel},handleSave:async t=>{try{if(!e)throw new Error("Can't save element as component: element not found");const{uid:n,instanceId:o}=await(0,u.createUnpublishedComponent)({name:t.componentName,element:e.element,eventData:h.current,source:"user"}),r=(0,g.selectComponentByUid)((0,c.__getState)(),n)?.id;if(!r)throw new Error("Failed to find published component");(0,v.switchToComponent)(r,o),(0,s.notify)({type:"success",message:(0,l.__)("Component created successfully.","elementor"),id:`component-saved-successfully-${n}`}),resetAndClosePopup()}catch{const e=(0,l.__)("Failed to create component. Please try again.","elementor");(0,s.notify)({type:"error",message:e,id:"component-save-failed"}),resetAndClosePopup()}},closePopup:cancelSave})))}const C="tiny",Form=({initialValues:e,handleSave:t,closePopup:n})=>{const{values:r,errors:s,isValid:c,handleChange:d,validateForm:u}=(0,y.useForm)(e),{components:g}=(0,m.useComponents)(),v=(0,o.useMemo)(()=>g?.map(e=>e.name)??[],[g]),f=(0,o.useMemo)(()=>(0,h.createBaseComponentSchema)(v),[v]),k=(0,o.useMemo)(()=>(0,h.createSubmitComponentSchema)(v),[v]),b={heading:(0,l.__)("Create component","elementor"),name:(0,l.__)("Name","elementor"),cancel:(0,l.__)("Cancel","elementor"),create:(0,l.__)("Create","elementor")},E="component-name";return o.createElement(a.Form,{onSubmit:()=>{const{success:e,parsedValues:n}=u(k);e&&t(n)}},o.createElement(p.Stack,{alignItems:"start",width:"268px"},o.createElement(p.Stack,{direction:"row",alignItems:"center",py:1,px:1.5,sx:{columnGap:.5,borderBottom:"1px solid",borderColor:"divider",width:"100%"}},o.createElement(i.ComponentsIcon,{fontSize:C}),o.createElement(p.Typography,{variant:"caption",sx:{color:"text.primary",fontWeight:"500",lineHeight:1}},b.heading)),o.createElement(p.Grid,{container:!0,gap:.75,alignItems:"start",p:1.5},o.createElement(p.Grid,{item:!0,xs:12},o.createElement(p.FormLabel,{htmlFor:E,size:"tiny"},b.name)),o.createElement(p.Grid,{item:!0,xs:12},o.createElement(p.TextField,{id:E,size:C,fullWidth:!0,value:r.componentName,onChange:e=>d(e,"componentName",f),inputProps:{style:{color:"text.primary",fontWeight:"600"}},error:Boolean(s.componentName),helperText:s.componentName}))),o.createElement(p.Stack,{direction:"row",justifyContent:"flex-end",alignSelf:"end",py:1,px:1.5},o.createElement(p.Button,{onClick:n,color:"secondary",variant:"text",size:"small"},b.cancel),o.createElement(p.Button,{type:"submit",disabled:!c,variant:"contained",color:"primary",size:"small"},b.create))))}},"./packages/packages/core/editor-components/src/components/create-component-form/hooks/use-form.ts":function(e,t,n){n.r(t),n.d(t,{useForm:function(){return useForm}});var o=n("react");const useForm=e=>{const[t,n]=(0,o.useState)(e),[r,s]=(0,o.useState)({}),a=(0,o.useMemo)(()=>!Object.values(r).some(e=>e),[r]);return{values:t,errors:r,isValid:a,handleChange:(e,o,r)=>{const a={...t,[o]:e.target.value};n(a);const{success:i,errors:c}=validateForm(a,r);s(i?{}:c)},validateForm:e=>{const{success:n,errors:o,parsedValues:r}=validateForm(t,e);return n?(s({}),{success:n,parsedValues:r}):(s(o),{success:n})}}},validateForm=(e,t)=>{const n=t.safeParse(e);if(n.success)return{success:!0,parsedValues:n.data};const o={};return Object.entries(n.error.formErrors.fieldErrors).forEach(([e,t])=>{o[e]=t[0]}),{success:!1,errors:o}}},"./packages/packages/core/editor-components/src/components/create-component-form/utils/component-form-schema.ts":function(e,t,n){n.r(t),n.d(t,{MIN_NAME_LENGTH:function(){return s},createBaseComponentSchema:function(){return createBaseComponentSchema},createSubmitComponentSchema:function(){return createSubmitComponentSchema}});var o=n("@elementor/schema"),r=n("@wordpress/i18n");const s=2,a=o.z.string().trim().max(50,(0,r.__)("Component name is too long. Please keep it under 50 characters.","elementor")),createBaseComponentSchema=e=>o.z.object({componentName:a.refine(t=>!e.includes(t),{message:(0,r.__)("Component name already exists","elementor")})}),createSubmitComponentSchema=e=>{const t=createBaseComponentSchema(e);return t.extend({componentName:t.shape.componentName.refine(e=>e.length>0,{message:(0,r.__)("Component name is required.","elementor")}).refine(e=>e.length>=s,{message:(0,r.__)("Component name is too short. Please enter at least 2 characters.","elementor")})})}},"./packages/packages/core/editor-components/src/components/create-component-form/utils/get-component-event-data.ts":function(e,t,n){n.r(t),n.d(t,{getComponentEventData:function(){return getComponentEventData}});const getComponentEventData=(e,t)=>{const{elementsCount:n,componentsCount:o}=countNestedElements(e);return{nested_elements_count:n,nested_components_count:o,top_element_type:e.elType,location:t?.location,secondary_location:t?.secondaryLocation,trigger:t?.trigger}};function countNestedElements(e){if(!e.elements||0===e.elements.length)return{elementsCount:0,componentsCount:0};let t=e.elements.length,n=0;for(const o of e.elements){"e-component"===o.widgetType&&n++;const{elementsCount:e,componentsCount:r}=countNestedElements(o);t+=e,n+=r}return{elementsCount:t,componentsCount:n}}},"./packages/packages/core/editor-components/src/components/create-component-form/utils/replace-element-with-component.ts":function(e,t,n){n.r(t),n.d(t,{createComponentModel:function(){return createComponentModel},replaceElementWithComponent:function(){return replaceElementWithComponent}});var o=n("@elementor/editor-elements");const replaceElementWithComponent=async(e,t)=>await(0,o.replaceElement)({currentElement:e,newElement:createComponentModel(t),withHistory:!1}),createComponentModel=e=>({elType:"widget",widgetType:"e-component",settings:{component_instance:{$$type:"component-instance",value:{component_id:{$$type:"number",value:e.id??e.uid}}}},editor_settings:{component_uid:e.uid}})},"./packages/packages/core/editor-components/src/components/edit-component/component-modal.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentModal:function(){return ComponentModal}});var o=n("react"),r=n("react-dom"),s=n("@wordpress/i18n"),a=n("./packages/packages/core/editor-components/src/hooks/use-canvas-document.ts"),i=n("./packages/packages/core/editor-components/src/hooks/use-element-rect.ts");function ComponentModal({topLevelElementDom:e,onClose:t}){const n=(0,a.useCanvasDocument)();return(0,o.useEffect)(()=>{const handleEsc=e=>{"Escape"===e.key&&t()};return n?.body.addEventListener("keydown",handleEsc),()=>{n?.body.removeEventListener("keydown",handleEsc)}},[n,t]),n?.body?(0,r.createPortal)(o.createElement(o.Fragment,null,o.createElement(BlockEditPage,null),o.createElement(Backdrop,{canvas:n,element:e,onClose:t})),n.body):null}function Backdrop({canvas:e,element:t,onClose:n}){const r=(0,i.useElementRect)(t),a=t?function getRectPath(e,t){const{x:n,y:o,width:r,height:s}=e,{innerWidth:a,innerHeight:i}=t;return`path(evenodd, 'M 0 0 \n\t\tL ${a} 0\n\t\tL ${a} ${i}\n\t\tL 0 ${i}\n\t\tZ\n\t\tM ${n} ${o}\n\t\tL ${n+r} ${o}\n\t\tL ${n+r} ${o+s}\n\t\tL ${n} ${o+s}\n\t\tL ${n} ${o}\n \tZ'\n\t)`.replace(/\s{2,}/g," ")}(r,e.defaultView):void 0,c={position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"rgba(0, 0, 0, 0.5)",zIndex:999,pointerEvents:"painted",cursor:"pointer",clipPath:a};return o.createElement("div",{style:c,onClick:n,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),n())},role:"button",tabIndex:0,"aria-label":(0,s.__)("Exit component editing mode","elementor")})}function BlockEditPage(){return o.createElement("style",{"data-e-style-id":"e-block-v3-document-handles-styles"},"\n\t.elementor-editor-active {\n\t\t& .elementor-section-wrap.ui-sortable {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\t& *[data-editable-elementor-document]:not(.elementor-edit-mode):hover {\n\t\t\t& .elementor-document-handle:not(.elementor-document-save-back-handle) {\n\t\t\t\tdisplay: none;\n\n\t\t\t\t&::before,\n\t\t\t\t& .elementor-document-handle__inner {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t")}},"./packages/packages/core/editor-components/src/components/edit-component/edit-component.tsx":function(e,t,n){n.r(t),n.d(t,{EditComponent:function(){return EditComponent}});var o=n("react"),r=n("@elementor/editor-documents"),s=n("@elementor/editor-v1-adapters"),a=n("@elementor/store"),i=n("@elementor/utils"),c=n("./packages/packages/core/editor-components/src/api.ts"),p=n("./packages/packages/core/editor-components/src/hooks/use-navigate-back.ts"),l=n("./packages/packages/core/editor-components/src/store/actions/update-current-component.ts"),m=n("./packages/packages/core/editor-components/src/store/store.ts"),d=n("./packages/packages/core/editor-components/src/components/consts.ts"),u=n("./packages/packages/core/editor-components/src/components/edit-component/component-modal.tsx");function EditComponent(){const e=(0,m.useCurrentComponentId)();!function useHandleDocumentSwitches(){const e=(0,r.getV1DocumentsManager)(),t=(0,m.useCurrentComponentId)(),n=(0,a.__useSelector)(m.selectPath);(0,o.useEffect)(()=>(0,s.__privateListenTo)((0,s.commandEndEvent)("editor/documents/open"),()=>{const o=e.getCurrent();if(o.id===t)return;t&&c.apiClient.unlockComponent(t);o.config.type===d.COMPONENT_DOCUMENT_TYPE?(0,l.updateCurrentComponent)({path:getUpdatedComponentPath(n,o),currentComponentId:o.id}):(0,l.updateCurrentComponent)({path:[],currentComponentId:null})}),[n,e,t])}();const t=(0,p.useNavigateBack)(),n=(0,i.throttle)(t,100),g=function useComponentDOMElement(e){const{componentContainerDomElement:t,topLevelElementDom:n}=function getComponentDOMElements(e){if(!e)return{componentContainerDomElement:null,topLevelElementDom:null};const t=(0,r.getV1DocumentsManager)().get(e),n=t?.container,o=n?.view?.el?.children?.[0]??null,s=o?.children[0]??null;return{componentContainerDomElement:o,topLevelElementDom:s}}(e),[s,a]=(0,o.useState)(n);return(0,o.useEffect)(()=>{a(n)},[n]),(0,o.useEffect)(()=>{if(!t)return;const e=new MutationObserver(()=>{const e=t.children[0];a(e)});return e.observe(t,{childList:!0}),()=>{e.disconnect()}},[t]),s}(e??void 0);return e?o.createElement(u.ComponentModal,{topLevelElementDom:g,onClose:n}):null}function getUpdatedComponentPath(e,t){const n=e.findIndex(({componentId:e})=>e===t.id);if(n>=0)return e.slice(0,n+1);const o=t?.container.view?.el?.dataset.id,s=function getInstanceTitle(e,t){if(!e)return;const n=(0,r.getV1DocumentsManager)(),o=t.at(-1)?.componentId??n.getInitialId(),s=n.get(o),a=s?.container,i=a?.children?.findRecursive?.(t=>t.id===e),c=i?.model?.get?.("editor_settings");return c?.title}(o,e);return[...e,{instanceId:o,instanceTitle:s,componentId:t.id}]}},"./packages/packages/core/editor-components/src/components/errors.ts":function(e,t,n){n.r(t),n.d(t,{OverrideControlInnerElementNotFoundError:function(){return r}});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."})},"./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"),a=n("@elementor/ui"),i=n("@wordpress/i18n");const openEditModeDialog=e=>{(0,r.openDialog)({component:o.createElement(EditModeDialog,{lockedBy:e})})},EditModeDialog=({lockedBy:e})=>{const t=(0,i.__)("%s is currently editing this document","elementor").replace("%s",e);return o.createElement(o.Fragment,null,o.createElement(a.DialogHeader,{logo:!1},o.createElement(a.Box,{display:"flex",alignItems:"center",gap:1},o.createElement(a.Icon,{color:"secondary"},o.createElement(s.InfoCircleFilledIcon,{fontSize:"medium"})),o.createElement(a.Typography,{variant:"subtitle1"},t))),o.createElement(a.DialogContent,null,o.createElement(a.Stack,{spacing:2,direction:"column"},o.createElement(a.Typography,{variant:"body2"},(0,i.__)("You can wait for them to finish or reach out to coordinate your changes together.","elementor")),o.createElement(a.DialogActions,null,o.createElement(a.Button,{color:"secondary",variant:"contained",onClick:r.closeDialog},(0,i.__)("Close","elementor"))))))}},"./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"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts");const EmptyState=({onEditComponent:e})=>{const{canEdit:t}=(0,i.useComponentsPermissions)(),n=t?(0,a.__)("Edit the component to add properties, manage them or update the design across all instances.","elementor"):(0,a.__)("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,a.__)("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},onClick:e},o.createElement(r.PencilIcon,{fontSize:"small"}),(0,a.__)("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/editor-controls"),s=n("@elementor/editor-editing-panel"),a=n("@elementor/editor-elements"),i=n("@elementor/editor-panels"),c=n("@elementor/editor-ui"),p=n("@elementor/icons"),l=n("@elementor/ui"),m=n("@wordpress/i18n"),d=n("./packages/packages/core/editor-components/src/hooks/use-component-instance-settings.ts"),u=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),g=n("./packages/packages/core/editor-components/src/store/store.ts"),v=n("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),f=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx"),y=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx");function InstanceEditingPanel(){const{canEdit:e}=(0,u.useComponentsPermissions)(),t=(0,d.useComponentInstanceSettings)(),n=t?.component_id?.value,h=t?.overrides?.value,k=(0,g.useComponent)(n??null),b=(0,g.useOverridableProps)(n??null),C=(0,a.useSelectedElement)()?.element?.id??null;if(!n||!b||!k)return null;const E=(0,m.__)("Edit %s","elementor").replace("%s",k.name),handleEditComponent=()=>(0,v.switchToComponent)(n,C),_=b.groups.order.map(e=>b.groups.items[e]??null).filter(e=>null!==e&&e.props.length>0),P=0===_.length||0===Object.keys(b.props).length;return o.createElement(o.Fragment,null,o.createElement(i.PanelHeader,{sx:{justifyContent:"start",px:2}},o.createElement(l.Stack,{direction:"row",alignItems:"center",flexGrow:1,gap:1,maxWidth:"100%"},o.createElement(p.ComponentsIcon,{fontSize:"small",sx:{color:"text.tertiary"}}),o.createElement(c.EllipsisWithTooltip,{title:k.name,as:i.PanelHeaderTitle,sx:{flexGrow:1}}),e&&o.createElement(l.Tooltip,{title:E},o.createElement(l.IconButton,{size:"tiny",onClick:handleEditComponent,"aria-label":E},o.createElement(p.PencilIcon,{fontSize:"tiny"}))))),o.createElement(i.PanelBody,null,o.createElement(r.ControlAdornmentsProvider,{items:(0,s.getFieldIndicators)("settings")},P?o.createElement(f.EmptyState,{onEditComponent:handleEditComponent}):o.createElement(l.Stack,{direction:"column",alignItems:"stretch"},_.map(e=>o.createElement(o.Fragment,{key:e.id+C},o.createElement(y.OverridePropsGroup,{group:e,props:b.props,overrides:h}),o.createElement(l.Divider,null)))))))}},"./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"),a=n("@elementor/editor-elements"),i=n("@elementor/ui"),c=n("./packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts"),p=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),l=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),m=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"),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"),y=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),h=n("./packages/packages/core/editor-components/src/components/control-label.tsx"),k=n("./packages/packages/core/editor-components/src/components/errors.ts"),b=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-resolved-origin-value.tsx");function OverridePropControl({overridableProp:e,overrides:t}){return o.createElement(s.SettingsField,{bind:"component_instance",propDisplayName:e.label},o.createElement(OverrideControl,{overridableProp:e,overrides:t}))}function OverrideControl({overridableProp:e,overrides:t}){const n=(0,s.useElement)(),C=(0,v.useCurrentComponentId)(),{value:E,setValue:_}=(0,r.useBoundProp)(m.componentInstancePropTypeUtil),P=(0,c.useControlsByWidgetType)(e?.originPropFields?.widgetType??e.widgetType),x=(0,s.getControlReplacements)(),w=function getMatchingOverride(e,t){const n=e?.find(e=>{const n=d.componentOverridablePropTypeUtil.extract(e);let o=null;return o=n?n.origin_value?.value?.override_key:e.value.override_key,o===t})??null;return n}(t,e.overrideKey),I=(0,b.useResolvedOriginValue)(w,e),O=(0,f.getPropTypeForComponentOverride)(e);if(!O)return null;const S=E.component_id?.value;if(!S)throw new Error("Component ID is required");const T=(w?(0,y.resolveOverridePropValue)(w):null)??I??e.originValue,D={[e.overrideKey]:T},{control:N,controlProps:A,layout:M}=function getControlParams(e,t,n){const o=e[t.propKey],{value:r}=o,a=function getControlLayout(e){return e.value.meta?.layout||s.controlsRegistry.getLayout(e.value.type)}(o),i=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"===a&&(i.label=n??r.label);return{control:o,controlProps:i,layout:a}}(P,e?.originPropFields??e,e.label),{elementId:U,widgetType:L,elType:R,propKey:B}=e.originPropFields??e;if(!(0,a.getContainer)(U))throw new k.OverrideControlInnerElementNotFoundError({context:{componentId:S,elementId:U}});const V="widget"===R?L:R,G=(0,a.getElementType)(V);if(!G)return null;const F=(0,s.createTopLevelObjectType)({schema:{[e.overrideKey]:O}});return o.createElement(u.OverridablePropProvider,{value:d.componentOverridablePropTypeUtil.extract(w)??void 0,componentInstanceElement:n},o.createElement(s.ElementProvider,{element:{id:U,type:V},elementType:G},o.createElement(s.SettingsField,{bind:B,propDisplayName:e.label},o.createElement(r.PropProvider,{propType:F,value:D,setValue:n=>{const o=function getTempNewValueForDynamicProp(e,t,n){const o=null===n;if(o&&(0,s.isDynamicPropValue)(t))return e.default??null;return n}(O,T,n[e.overrideKey]),r=function createOverrideValue({matchingOverride:e,overrideKey:t,overrideValue:n,componentId:o}){const r=d.componentOverridablePropTypeUtil.extract(e),s=d.componentOverridablePropTypeUtil.extract(n)??r;if(s){const e=p.componentInstanceOverridePropTypeUtil.create({override_key:t,override_value:(0,y.resolveOverridePropValue)(n),schema_source:{type:"component",id:o}});return d.componentOverridablePropTypeUtil.create({override_key:s.override_key,origin_value:e})}return p.componentInstanceOverridePropTypeUtil.create({override_key:t,override_value:n,schema_source:{type:"component",id:o}})}({matchingOverride:w,overrideKey:e.overrideKey,overrideValue:o,componentId:S});let a=t?.map(e=>e===w?r:e)??[];w||(a=[...a,r]),_({...E,overrides:l.componentInstanceOverridesPropTypeUtil.create(a)});const i=d.componentOverridablePropTypeUtil.extract(r);if(i&&C){if(e.originPropFields)return void(0,g.updateOverridableProp)(C,i,e.originPropFields);const{elType:t,widgetType:n,propKey:o,elementId:r}=e;(0,g.updateOverridableProp)(C,i,{elType:t,widgetType:n,propKey:o,elementId:r})}},isDisabled:()=>!1},o.createElement(r.PropKeyProvider,{bind:e.overrideKey},o.createElement(r.ControlReplacementsProvider,{replacements:x},o.createElement(i.Stack,{direction:"column",gap:1,mb:1.5},"custom"!==M&&o.createElement(h.ControlLabel,null,e.label),o.createElement(OriginalControl,{control:N,controlProps:A}))))))))}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"),a=n("@elementor/ui"),i=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx");function OverridePropsGroup({group:e,props:t,overrides:n}){const[c,p]=(0,r.useStateByElement)(e.id,!0),l=(0,o.useId)(),m=`label-${l}`,d=`content-${l}`,u=e.label;return o.createElement(a.Box,{"aria-label":`${u} section`},o.createElement(a.ListItemButton,{id:m,"aria-controls":d,"aria-label":`${u} section`,onClick:()=>{p(!c)},p:0,sx:{"&:hover":{backgroundColor:"transparent"}}},o.createElement(a.Stack,{direction:"row",alignItems:"center",justifyItems:"start",flexGrow:1,gap:.5},o.createElement(a.ListItemText,{secondary:u,secondaryTypographyProps:{color:"text.primary",variant:"caption",fontWeight:"bold"},sx:{flexGrow:0,flexShrink:1,marginInlineEnd:1}})),o.createElement(s.CollapseIcon,{open:c,color:"secondary",fontSize:"tiny"})),o.createElement(a.Collapse,{id:d,"aria-labelledby":m,in:c,timeout:"auto"},o.createElement(a.Stack,{direction:"column",gap:1,p:2},e.props.map(e=>o.createElement(i.OverridePropControl,{key:e,overridableProp:t[e],overrides:n})))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/use-resolved-origin-value.tsx":function(e,t,n){n.r(t),n.d(t,{useResolvedOriginValue:function(){return useResolvedOriginValue}});var o=n("@elementor/store"),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"),a=n("./packages/packages/core/editor-components/src/store/store.ts");function useResolvedOriginValue(e,t){return function resolveOriginValue(e,t,n){const{originValue:o,originPropFields:r}=n;if(hasValue(o))return o;if(t){const n=getOriginFromOverride(e,t);if(hasValue(n))return n}const{elementId:s,propKey:a}=r??{};if(s&&a)return findOriginValueByElementId(e,s,a);return null}((0,o.__useSelector)(a.selectData),e,t)}function getOriginFromOverride(e,t){const n=s.componentOverridablePropTypeUtil.extract(t),o=n?r.componentInstanceOverridePropTypeUtil.extract(n.origin_value):r.componentInstanceOverridePropTypeUtil.extract(t);if(!o)return null;const{schema_source:a,override_key:i,override_value:c}=o,p=a?.id;if(!p||!i)return null;const l=function getOverridableProp(e,t,n){const o=e.find(({id:e})=>e===t);return o?.overridableProps?.props?.[n]}(e,p,i);if(hasValue(l?.originValue))return l.originValue;if(l?.originPropFields?.elementId){const t=l.originPropFields.propKey??l.propKey,n=findOriginValueByElementId(e,l.originPropFields.elementId,t);if(hasValue(n))return n}const m=s.componentOverridablePropTypeUtil.extract(c);return m?getOriginFromOverride(e,s.componentOverridablePropTypeUtil.create(m)):null}function findOriginValueByElementId(e,t,n,o=new Set){for(const r of e){if(o.has(r.id))continue;o.add(r.id);const s=Object.values(r.overridableProps?.props??{}).find(({elementId:e,propKey:o})=>e===t&&o===n);if(s){if(hasValue(s.originValue))return s.originValue;if(s.originPropFields?.elementId){const t=s.originPropFields.propKey??n;return findOriginValueByElementId(e,s.originPropFields.elementId,t,o)}}}return null}function hasValue(e){return null!=e}},"./packages/packages/core/editor-components/src/components/overridable-props/indicator.tsx":function(e,t,n){n.r(t),n.d(t,{Indicator:function(){return l}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n");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 i="tiny",c=(0,s.styled)(s.Box)`
14 + pointer-events: none;
15 + opacity: 0;
16 + transition: opacity 0.2s ease-in-out;
2 17
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);
18 + & > svg {
19 + position: absolute;
20 + top: 50%;
21 + left: 50%;
22 + transform: translate( -50%, -50% );
23 + width: 10px;
24 + height: 10px;
25 + fill: ${({theme:e})=>e.palette.primary.contrastText};
26 + stroke: ${({theme:e})=>e.palette.primary.contrastText};
27 + stroke-width: 2px;
112 28 }
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 {
29 +`,p=(0,s.styled)(s.Box)`
30 + position: relative;
842 31 display: flex;
843 - flex-direction: column;
844 - height: 100%;
845 -}
32 + align-items: center;
33 + justify-content: center;
34 + cursor: pointer;
35 + width: 16px;
36 + height: 16px;
37 + margin-inline: ${({theme:e})=>e.spacing(.5)};
846 38
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 - }));
39 + &:before {
40 + content: '';
41 + display: block;
42 + position: absolute;
43 + top: 50%;
44 + left: 50%;
45 + transform: translate( -50%, -50% ) rotate( 45deg );
46 + width: 5px;
47 + height: 5px;
48 + border-radius: 1px;
49 + background-color: ${({theme:e})=>e.palette.primary.main};
50 + transition: all 0.1s ease-in-out;
908 51 }
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 52
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;
53 + &:hover,
54 + &.enlarged {
55 + &:before {
56 + width: 12px;
57 + height: 12px;
58 + border-radius: 2px;
1041 59 }
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 60
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 - };
61 + .icon {
62 + opacity: 1;
1142 63 }
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 64 }
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?.();
65 +`,l=(0,o.forwardRef)(({isOpen:e,isOverridable:t,...n},s)=>o.createElement(p,_extends({ref:s},n,{className:e||t?"enlarged":""}),o.createElement(c,{className:"icon","aria-label":t?(0,a.__)("Overridable property","elementor"):(0,a.__)("Make prop overridable","elementor")},t?o.createElement(r.CheckIcon,{fontSize:i}):o.createElement(r.PlusIcon,{fontSize:i}))))},"./packages/packages/core/editor-components/src/components/overridable-props/overridable-prop-control.tsx":function(e,t,n){n.r(t),n.d(t,{OverridablePropControl:function(){return OverridablePropControl}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-editing-panel"),a=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),i=n("./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx"),c=n("./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts"),p=n("./packages/packages/core/editor-components/src/store/store.ts"),l=n("./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts"),m=n("./packages/packages/core/editor-components/src/components/consts.ts");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)}function OverridablePropControl({OriginalControl:e,...t}){const{elementType:n}=(0,s.useElement)(),{value:d,bind:u,setValue:g,placeholder:v,...f}=(0,r.useBoundProp)(a.componentOverridablePropTypeUtil),y=(0,p.useCurrentComponentId)(),h=(0,p.useOverridableProps)(y),k=(0,s.getControlReplacements)().filter(e=>!e.id||e.id!==m.OVERRIDABLE_PROP_REPLACEMENT_ID);if(!y)return null;if(!d?.override_key)throw new Error("Override key is required");const b="e-component"===n.key,C=h?.props?.[d.override_key],E=n.propsSchema[u],_=(C?(0,l.getPropTypeForComponentOverride)(C):void 0)??E;if(!_)return null;const P=(0,s.createTopLevelObjectType)({schema:{[u]:_}}),x=b?(d.origin_value?.value).override_value:d.origin_value,w=v?{[u]:v}:void 0;return o.createElement(i.OverridablePropProvider,{value:d},o.createElement(r.PropProvider,_extends({},f,{propType:P,setValue:e=>{const t={...d,origin_value:e[u]};g(t),b||(0,c.updateOverridableProp)(y,t,C?.originPropFields)},value:{[u]:x},placeholder:w}),o.createElement(r.PropKeyProvider,{bind:u},o.createElement(r.ControlReplacementsProvider,{replacements:k},o.createElement(ControlWithReplacements,{OriginalControl:e,props:t})))))}function ControlWithReplacements({OriginalControl:e,props:t}){const{ControlToRender:n,isReplaced:s}=(0,r.useControlReplacement)(e);if(s){const r=n;return o.createElement(r,_extends({},t,{OriginalControl:e}))}return o.createElement(e,t)}},"./packages/packages/core/editor-components/src/components/overridable-props/overridable-prop-form.tsx":function(e,t,n){n.r(t),n.d(t,{OverridablePropForm:function(){return OverridablePropForm}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/components/overridable-props/utils/validate-prop-label.ts");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 c="tiny",p={value:null,label:(0,a.__)("Default","elementor")};function OverridablePropForm({onSubmit:e,groups:t,currentValue:n,existingLabels:l=[],sx:m}){const d=t?.length?t:[p],[u,g]=(0,o.useState)(n?.label??null),[v,f]=(0,o.useState)(n?.groupId??d[0]?.value??null),[y,h]=(0,o.useState)(null),k=(0,a.__)("Name","elementor"),b=(0,a.__)("Group Name","elementor"),C=void 0===n,E=C?(0,a.__)("Create new property","elementor"):(0,a.__)("Update property","elementor"),_=C?(0,a.__)("Create","elementor"):(0,a.__)("Update","elementor");return o.createElement(r.Form,{onSubmit:()=>{const t=(0,i.validatePropLabel)(u??"",l,n?.label);t.isValid?e({label:u??"",group:v}):h(t.errorMessage)}},o.createElement(s.Stack,{alignItems:"start",sx:{width:"268px",...m}},o.createElement(s.Stack,{direction:"row",alignItems:"center",py:1,px:1.5,sx:{columnGap:.5,borderBottom:"1px solid",borderColor:"divider",width:"100%",mb:1.5}},o.createElement(s.Typography,{variant:"caption",sx:{color:"text.primary",fontWeight:"500",lineHeight:1}},E)),o.createElement(s.Grid,{container:!0,gap:.75,alignItems:"start",px:1.5,mb:1.5},o.createElement(s.Grid,{item:!0,xs:12},o.createElement(s.FormLabel,{size:"tiny"},k)),o.createElement(s.Grid,{item:!0,xs:12},o.createElement(s.TextField,{name:k,size:c,fullWidth:!0,placeholder:(0,a.__)("Enter value","elementor"),value:u??"",onChange:e=>{const t=e.target.value;g(t);const o=(0,i.validatePropLabel)(t,l,n?.label);h(o.errorMessage)},error:Boolean(y),helperText:y}))),o.createElement(s.Grid,{container:!0,gap:.75,alignItems:"start",px:1.5,mb:1.5},o.createElement(s.Grid,{item:!0,xs:12},o.createElement(s.FormLabel,{size:"tiny"},b)),o.createElement(s.Grid,{item:!0,xs:12},o.createElement(s.Select,{name:b,size:c,fullWidth:!0,value:v??null,onChange:e=>f(e.target.value),displayEmpty:!0,renderValue:e=>e?d.find(({value:t})=>t===e)?.label??e:d[0].label},d.map(({label:e,...t})=>o.createElement(r.MenuListItem,_extends({key:t.value},t,{value:t.value??""}),e))))),o.createElement(s.Stack,{direction:"row",justifyContent:"flex-end",alignSelf:"end",mt:1.5,py:1,px:1.5},o.createElement(s.Button,{type:"submit",disabled:!u||Boolean(y),variant:"contained",color:"primary",size:"small"},_))))}},"./packages/packages/core/editor-components/src/components/overridable-props/overridable-prop-indicator.tsx":function(e,t,n){n.r(t),n.d(t,{Content:function(){return Content},OverridablePropIndicator:function(){return OverridablePropIndicator}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-editing-panel"),a=n("@elementor/editor-elements"),i=n("@elementor/ui"),c=n("@wordpress/i18n"),p=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),l=n("./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx"),m=n("./packages/packages/core/editor-components/src/store/actions/set-overridable-prop.ts"),d=n("./packages/packages/core/editor-components/src/store/store.ts"),u=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),g=n("./packages/packages/core/editor-components/src/components/overridable-props/indicator.tsx"),v=n("./packages/packages/core/editor-components/src/components/overridable-props/overridable-prop-form.tsx"),f=n("./packages/packages/core/editor-components/src/components/overridable-props/utils/get-overridable-prop.ts");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)}function OverridablePropIndicator(){const{propType:e}=(0,r.useBoundProp)(),t=(0,d.useCurrentComponentId)(),n=(0,d.useOverridableProps)(t);return function isPropAllowed(e){return!1!==e.meta.overridable}(e)&&t&&n?o.createElement(Content,{componentId:t,overridableProps:n}):null}function Content({componentId:e,overridableProps:t}){const{element:{id:n},elementType:d}=(0,s.useElement)(),{value:y,bind:h,propType:k}=(0,r.useBoundProp)(),b=(0,l.useOverridablePropValue)(),C=(0,l.useComponentInstanceElement)(),{value:E,setValue:_}=(0,r.useBoundProp)(p.componentOverridablePropTypeUtil),P=E??b,x=(0,i.usePopupState)({variant:"popover"}),w=(0,i.bindTrigger)(x),I=(0,i.bindPopover)(x),{elType:O}=(0,a.getWidgetsCache)()?.[d.key]??{elType:"widget"},S=P?(0,f.getOverridableProp)({componentId:e,overrideKey:P.override_key}):void 0;return o.createElement(o.Fragment,null,o.createElement(i.Tooltip,{placement:"top",title:(0,c.__)("Override Property","elementor")},o.createElement(g.Indicator,_extends({},w,{isOpen:!!I.open,isOverridable:!!P}))),o.createElement(i.Popover,_extends({disableScrollLock:!0,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},PaperProps:{sx:{my:2.5}}},I),o.createElement(v.OverridablePropForm,{onSubmit:({label:o,group:r})=>{const s=k.default??{},a=(0,u.resolveOverridePropValue)(P?.origin_value)??y??s,i=P?t?.props?.[P.override_key]:void 0,c=(0,m.setOverridableProp)({componentId:e,overrideKey:P?.override_key??null,elementId:C?.element.id??n,label:o,groupId:r,propKey:h,elType:O??"widget",widgetType:C?.elementType.key??d.key,originValue:a,originPropFields:i?.originPropFields,source:"user"});!P&&c&&_({override_key:c.overrideKey,origin_value:a}),x.close()},groups:t?.groups.order.map(e=>({value:e,label:t.groups.items[e].label})),existingLabels:Object.values(t?.props??{}).map(e=>e.label),currentValue:S})))}},"./packages/packages/core/editor-components/src/components/overridable-props/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/components/overridable-props/utils/validate-prop-label.ts":function(e,t,n){n.r(t),n.d(t,{ERROR_MESSAGES:function(){return r},validatePropLabel:function(){return validatePropLabel}});var o=n("@wordpress/i18n");const r={EMPTY_NAME:(0,o.__)("Property name is required","elementor"),DUPLICATE_NAME:(0,o.__)("Property name already exists","elementor")};function validatePropLabel(e,t,n){const o=e.trim();if(!o)return{isValid:!1,errorMessage:r.EMPTY_NAME};const s=o.toLowerCase(),a=n?.trim().toLowerCase();return t.some(e=>{const t=e.trim().toLowerCase();return(!a||t!==a)&&t===s})?{isValid:!1,errorMessage:r.DUPLICATE_NAME}:{isValid:!0,errorMessage:null}}},"./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 m},createComponentType:function(){return createComponentType}});var o=n("@elementor/editor-canvas"),r=n("@elementor/editor-documents"),s=n("@elementor/store"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/api.ts"),c=n("./packages/packages/core/editor-components/src/store/store.ts"),p=n("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),l=n("./packages/packages/core/editor-components/src/utils/tracking.ts");const m="e-component",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.action),{...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;return n&&(this.#e={overrides:n.overrides??{}},this.collection=t.elementor.createBackboneElementsCollection(n.elements),this.collection.models.forEach(setInactiveRecursively),e.component_instance="<template data-children-placeholder></template>"),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(){return{add:isUserAdministrator()?{general:{index:1,action:{name:"edit component",icon:"eicon-edit",title:()=>(0,a.__)("Edit Component","elementor"),isEnabled:()=>!0,callback:(e,t)=>this.editComponent(t)}}}:{},disable:{clipboard:["pasteStyle","resetStyle"]}}}async switchDocument(){const{isAllowedToSwitchDocument:t,lockedBy:n}=await i.apiClient.getComponentLockStatus(this.getComponentId());t?(0,p.switchToComponent)(this.getComponentId(),this.model.get("id"),this.el):e.showLockedByModal?.(n||"")}editComponent({trigger:e,location:t,secondaryLocation:n}){if(this.isComponentCurrentlyEdited())return;this.switchDocument();const o=this.model.get("editor_settings");(0,l.trackComponentEvent)({action:"edited",source:"user",component_uid:o?.component_uid,component_name:o?.title,location:t,secondary_location:n,trigger:e})}handleDblClick(e){e.stopPropagation();if(!isUserAdministrator())return;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,c.selectComponentByUid)((0,s.__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-canvas-document.ts":function(e,t,n){n.r(t),n.d(t,{useCanvasDocument:function(){return useCanvasDocument}});var o=n("@elementor/editor-v1-adapters");function useCanvasDocument(){return(0,o.__privateUseListenTo)((0,o.commandEndEvent)("editor/documents/attach-preview"),()=>(0,o.getCanvasIframeDocument)())}},"./packages/packages/core/editor-components/src/hooks/use-component-instance-settings.ts":function(e,t,n){n.r(t),n.d(t,{useComponentInstanceSettings:function(){return useComponentInstanceSettings}});var o=n("@elementor/editor-editing-panel"),r=n("@elementor/editor-elements"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts");function useComponentInstanceSettings(){const{element:e}=(0,o.useElement)(),t=(0,r.useElementSetting)(e.id,"component_instance");return s.componentInstancePropTypeUtil.extract(t)}},"./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-element-rect.ts":function(e,t,n){n.r(t),n.d(t,{useElementRect:function(){return useElementRect}});var o=n("react"),r=n("@elementor/utils");function useElementRect(e){const[t,n]=(0,o.useState)(new DOMRect(0,0,0,0)),s=(0,r.throttle)(()=>{n(e?.getBoundingClientRect()??new DOMRect(0,0,0,0))},20,!0);return function useScrollListener({element:e,onChange:t}){(0,o.useEffect)(()=>{if(!e)return;const n=e.ownerDocument?.defaultView;return n?.addEventListener("scroll",t,{passive:!0}),()=>{n?.removeEventListener("scroll",t)}},[e,t])}({element:e,onChange:s}),function useResizeListener({element:e,onChange:t}){(0,o.useEffect)(()=>{if(!e)return;const n=new ResizeObserver(t);n.observe(e);const o=e.ownerDocument?.defaultView;return o?.addEventListener("resize",t,{passive:!0}),()=>{n.disconnect(),o?.removeEventListener("resize",t)}},[e,t])}({element:e,onChange:s}),function useMutationsListener({element:e,onChange:t}){(0,o.useEffect)(()=>{if(!e)return;const n=new MutationObserver(t);return n.observe(e,{childList:!0,subtree:!0}),()=>{n.disconnect()}},[e,t])}({element:e,onChange:s}),(0,o.useEffect)(()=>()=>{s.cancel()},[s]),t}},"./packages/packages/core/editor-components/src/hooks/use-navigate-back.ts":function(e,t,n){n.r(t),n.d(t,{useNavigateBack:function(){return useNavigateBack}});var o=n("react"),r=n("@elementor/editor-documents"),s=n("@elementor/store"),a=n("./packages/packages/core/editor-components/src/store/store.ts"),i=n("./packages/packages/core/editor-components/src/utils/switch-to-component.ts");function useNavigateBack(){const e=(0,s.__useSelector)(a.selectPath),t=(0,r.getV1DocumentsManager)();return(0,o.useCallback)(()=>{const{componentId:n,instanceId:o}=e.at(-2)??{};n&&o?(0,i.switchToComponent)(n,o):(0,i.switchToComponent)(t.getInitialId())},[e,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"),a=n("@elementor/editor-editing-panel"),i=n("@elementor/editor-elements-panel"),c=n("@elementor/editor-panels"),p=n("@elementor/editor-styles-repository"),l=n("@elementor/editor-v1-adapters"),m=n("@elementor/store"),d=n("@wordpress/i18n"),u=n("./packages/packages/core/editor-components/src/component-instance-transformer.ts"),g=n("./packages/packages/core/editor-components/src/component-overridable-transformer.ts"),v=n("./packages/packages/core/editor-components/src/component-override-transformer.ts"),f=n("./packages/packages/core/editor-components/src/components/component-panel-header/component-panel-header.tsx"),y=n("./packages/packages/core/editor-components/src/components/component-properties-panel/component-properties-panel.tsx"),h=n("./packages/packages/core/editor-components/src/components/components-tab/components.tsx"),k=n("./packages/packages/core/editor-components/src/components/consts.ts"),b=n("./packages/packages/core/editor-components/src/components/create-component-form/create-component-form.tsx"),C=n("./packages/packages/core/editor-components/src/components/edit-component/edit-component.tsx"),E=n("./packages/packages/core/editor-components/src/components/in-edit-mode.tsx"),_=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx"),P=n("./packages/packages/core/editor-components/src/components/overridable-props/overridable-prop-control.tsx"),x=n("./packages/packages/core/editor-components/src/components/overridable-props/overridable-prop-indicator.tsx"),w=n("./packages/packages/core/editor-components/src/create-component-type.ts"),I=n("./packages/packages/core/editor-components/src/mcp/index.ts"),O=n("./packages/packages/core/editor-components/src/populate-store.ts"),S=n("./packages/packages/core/editor-components/src/prevent-circular-nesting.ts"),T=n("./packages/packages/core/editor-components/src/prevent-non-atomic-nesting.ts"),D=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),N=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts"),A=n("./packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts"),M=n("./packages/packages/core/editor-components/src/store/components-styles-provider.ts"),U=n("./packages/packages/core/editor-components/src/store/store.ts"),L=n("./packages/packages/core/editor-components/src/sync/before-save.ts"),R=n("./packages/packages/core/editor-components/src/sync/cleanup-overridable-props-on-delete.ts"),B=n("./packages/packages/core/editor-components/src/sync/handle-component-edit-mode-container.ts"),V=n("./packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts"),G=n("./packages/packages/core/editor-components/src/sync/revert-overridables-on-copy-or-duplicate.ts"),F=n("./packages/packages/core/editor-components/src/utils/tracking.ts");function init(){p.stylesRepository.register(M.componentsStylesProvider),(0,m.__registerSlice)(U.slice),(0,c.__registerPanel)(y.panel),(0,r.registerElementType)(w.COMPONENT_WIDGET_TYPE,e=>(0,w.createComponentType)({...e,showLockedByModal:E.openEditModeDialog})),(0,l.registerDataHook)("dependency","editor/documents/close",e=>((0,s.getV1CurrentDocument)().config.type===k.COMPONENT_DOCUMENT_TYPE&&(e.mode="autosave"),!0)),(0,l.registerDataHook)("after","preview/drop",F.onElementDrop),window.elementorCommon.__beforeSave=L.beforeSave,(0,i.injectTab)({id:"components",label:(0,d.__)("Components","elementor"),component:h.Components,position:1}),(0,o.injectIntoTop)({id:"create-component-popup",component:b.CreateComponentForm}),(0,o.injectIntoLogic)({id:"components-populate-store",component:O.PopulateStore}),(0,o.injectIntoTop)({id:"edit-component",component:C.EditComponent}),(0,a.injectIntoPanelHeaderTop)({id:"component-panel-header",component:f.ComponentPanelHeader}),(0,l.registerDataHook)("after","editor/documents/attach-preview",async()=>{const{id:e,config:t}=(0,s.getV1CurrentDocument)();e&&(0,A.removeComponentStyles)(e),await(0,N.loadComponentsAssets)(t?.elements??[])}),(0,a.registerFieldIndicator)({fieldType:a.FIELD_TYPE.SETTINGS,id:"component-overridable-prop",priority:1,indicator:x.OverridablePropIndicator}),(0,a.registerControlReplacement)({id:k.OVERRIDABLE_PROP_REPLACEMENT_ID,component:P.OverridablePropControl,condition:({value:e})=>D.componentOverridablePropTypeUtil.isValid(e)}),(0,a.registerEditingPanelReplacement)({id:"component-instance-edit-panel",condition:(e,t)=>"e-component"===t.key,component:_.InstanceEditingPanel}),r.settingsTransformersRegistry.register("component-instance",u.componentInstanceTransformer),r.settingsTransformersRegistry.register("overridable",g.componentOverridableTransformer),r.settingsTransformersRegistry.register("override",v.componentOverrideTransformer),(0,R.initCleanupOverridablePropsOnDelete)(),(0,I.initMcp)(),(0,S.initCircularNestingPrevention)(),(0,T.initNonAtomicNestingPrevention)(),(0,V.initLoadComponentDataAfterInstanceAdded)(),(0,B.initHandleComponentEditModeContainer)(),(0,G.initRevertOverridablesOnCopyOrDuplicate)()}},"./packages/packages/core/editor-components/src/mcp/index.ts":function(e,t,n){n.r(t),n.d(t,{initMcp:function(){return initMcp}});var o=n("@elementor/editor-mcp"),r=n("./packages/packages/core/editor-components/src/mcp/save-as-component-tool.ts");function initMcp(){const{setMCPDescription:e}=(0,o.getMCPByDomain)("components");e("Elementor Editor Components MCP - Tools for creating and managing reusable components. \n Components are reusable blocks of content that can be used multiple times across the pages, its a widget which contains a set of elements and styles."),(0,r.initSaveAsComponentTool)()}},"./packages/packages/core/editor-components/src/mcp/save-as-component-tool.ts":function(e,t,n){n.r(t),n.d(t,{ERROR_MESSAGES:function(){return u},handleSaveAsComponent:function(){return handleSaveAsComponent},initSaveAsComponentTool:function(){return initSaveAsComponentTool}});var o=n("@elementor/editor-canvas"),r=n("@elementor/editor-elements"),s=n("@elementor/editor-mcp"),a=n("@elementor/http-client"),i=n("@elementor/schema"),c=n("@elementor/utils"),p=n("./packages/packages/core/editor-components/src/api.ts"),l=n("./packages/packages/core/editor-components/src/store/actions/create-unpublished-component.ts");const m={element_id:i.z.string().describe('The unique identifier of the element to save as a component. Use the "list-elements" tool to find available element IDs in the current document.'),component_name:i.z.string().describe("The name for the new component. Should be descriptive and unique among existing components."),overridable_props:i.z.object({props:i.z.record(i.z.object({elementId:i.z.string().describe("The id of the child element that you want to override its settings"),propKey:i.z.string().describe('The property key of the child element that you want to override its settings (e.g., "text", "url", "tag"). To get the available propKeys for an element, use the "get-element-type-config" tool.'),label:i.z.string().describe('A unique, user-friendly display name for this property (e.g., "Hero Headline", "CTA Button Text"). Must be unique within the same component.')}))}).optional().describe('Overridable properties configuration. Specify which CHILD element properties can be customized. Only elementId and propKey are required; To get the available propKeys for a child element you must use the "get-element-type-config" tool.')},d={message:i.z.string().optional().describe("Additional information about the operation result"),component_uid:i.z.string().optional().describe("The unique identifier of the newly created component (only present on success)")},u={ELEMENT_NOT_FOUND:"Element not found. Use 'list-elements' to get valid element IDs.",ELEMENT_NOT_ONE_OF_TYPES:e=>`Element is not one of the following types: ${e.join(", ")}`,ELEMENT_IS_LOCKED:"Cannot save a locked element as a component."},handleSaveAsComponent=async e=>{const{element_id:t,component_name:n,overridable_props:o}=e,s=function getValidElementTypes(){const e=(0,r.getWidgetsCache)();if(!e)return[];return Object.entries(e).reduce((e,[t,n])=>n.atomic_props_schema&&n.show_in_panel&&"widget"!==n.elType?(e.push(t),e):e,[])}(),i=(0,r.getContainer)(t);if(!i)throw new Error(u.ELEMENT_NOT_FOUND);const m=i.model.get("elType");if(!s.includes(m))throw new Error(u.ELEMENT_NOT_ONE_OF_TYPES(s));const d=i.model.toJSON({remove:["default"]});if(d?.isLocked)throw new Error(u.ELEMENT_IS_LOCKED);const g=o?function enrichOverridableProps(e,t){const n={},o=(0,c.generateUniqueId)("group");return Object.entries(e.props).forEach(([,e])=>{const{elementId:s,propKey:a,label:i}=e,p=findElementById(t,s);if(!p)throw new Error(`Element with ID "${s}" not found in component`);const l=p.elType,m=p.widgetType||p.elType,d=(0,r.getElementType)(m);if(!d)throw new Error(`Element type "${m}" is not atomic or does not have a settings schema. Cannot expose property "${a}" for element "${s}".`);if(!d.propsSchema[a]){const e=Object.keys(d.propsSchema).join(", ");throw new Error(`Property "${a}" does not exist in element "${s}" (type: ${m}). Available properties: ${e}`)}const u=(0,c.generateUniqueId)("prop"),g=p.settings?.[a]?p.settings[a]:d.propsSchema[a].default??null;n[u]={overrideKey:u,label:i,elementId:s,propKey:a,elType:l,widgetType:m,originValue:g,groupId:o}}),{props:n,groups:{items:{[o]:{id:o,label:"Default",props:Object.keys(n)}},order:[o]}}}(o,d):void 0;g&&function updateElementDataWithOverridableProps(e,t){Object.values(t.props).forEach(t=>{const n=findElementById(e,t.elementId);n&&n.settings&&(n.settings[t.propKey]={$$type:"overridable",value:{override_key:t.overrideKey,origin_value:t.originValue}})})}(d,g);const v=(0,c.generateUniqueId)("component");try{await p.apiClient.validate({items:[{uid:v,title:n,elements:[d],settings:{overridable_props:g}}]})}catch(e){if(e instanceof a.AxiosError)throw new Error(e.response?.data.messge);throw new Error("Unknown error")}return await(0,l.createUnpublishedComponent)({name:n,element:d,eventData:null,uid:v,overridableProps:g,source:"mcp_tool"}),{status:"ok",message:`Component "${n}" created successfully.`,component_uid:v}};function findElementById(e,t){if(e.id===t)return e;if(e.elements)for(const n of e.elements){const e=findElementById(n,t);if(e)return e}return null}const generatePrompt=()=>{const e=(0,s.toolPrompts)("save-as-component");return e.description(`\nSave an existing element as a reusable component in the Elementor editor.\n\n# When to use this tool\nUse this tool when the user wants to:\n- Create a reusable component from an existing element structure\n- Make specific child element properties customizable in component instances\n- Build a library of reusable design patterns\n\n# When NOT to use this tool\n- Element is already a component (widgetType: 'e-component')\n- Element is locked\n- Element is not an atomic element (atomic_props_schema is not defined)\n- Element elType is a 'widget'\n\n# **CRITICAL - REQUIRED RESOURCES (Must read before using this tool)**\n1. [${o.DOCUMENT_STRUCTURE_URI}]\n **MANDATORY** - Required to understand the document structure and identify child elements for overridable properties.\n Use this resource to find element IDs and understand the element hierarchy.\n\n2. [${o.WIDGET_SCHEMA_URI}]\n **MANDATORY** - Required to understand which properties are available for each widget type.\n Use this to identify available propKeys in the atomic_props_schema for child elements.\n\n# Instructions - MUST FOLLOW IN ORDER\n## Step 1: Identify the Target Element\n1. Read the [${o.DOCUMENT_STRUCTURE_URI}] resource to understand the document structure\n2. Locate the element you want to save as a component by its element_id\n3. Verify the element type is a valid element type\n4. Ensure the element is not locked and is not already a component\n\n## Step 2: Define Overridable Properties\nDo this step to make child element properties customizable.\nSkip that step ONLY if the user explicitly requests to not make any properties customizable.\n\n1. **Identify Child Elements**\n - Use the [${o.DOCUMENT_STRUCTURE_URI}] resource to find all child elements\n - Note the elementId and widgetType/elType of each child element you want to customize\n\n2. **Find Available Properties**\n - Use the [${o.WIDGET_SCHEMA_URI}] resource to find the child element's widget type schema\n - Review the atomic_props_schema to find available propKeys (ONLY use top-level props)\n - Common propKeys include: "text", "url", "tag", "size", etc.\n - Use only the top level properties, do not use nested properties.\n\n3. **Build the overridable_props Object**\n - For each property you want to make overridable, add an entry:\n \`{ "elementId": "<child-element-id>", "propKey": "<property-key>", "label": "<user-friendly-name>" }\`\n - The label must be unique within the component and should be meaningful to the user (e.g., "Hero Headline", "CTA Button Text")\n - Group all entries under the "props" object\n\n## Step 3: Execute the Tool\nCall the tool with:\n- element_id: The ID of the parent element to save as component\n- component_name: A descriptive name for the component\n- overridable_props: (Optional) The properties configuration from Step 2\n\n# CONSTRAINTS\n- NEVER try to override properties of the parent element itself - ONLY child elements\n- NEVER use invalid propKeys - always verify against the widget's atomic_props_schema in [${o.WIDGET_SCHEMA_URI}]\n- Property keys must exist in the child element's atomic_props_schema\n- Element IDs must exist within the target element's children\n- When tool execution fails, read the error message and adjust accordingly\n- The element being saved must not be inside another component\n`),e.parameter("element_id",`**MANDATORY** The unique identifier of the element to save as a component.\nUse the [${o.DOCUMENT_STRUCTURE_URI}] resource to find available element IDs.`),e.parameter("component_name",'**MANDATORY** A descriptive name for the new component.\nShould be unique and clearly describe the component\'s purpose (e.g., "Hero Section", "Feature Card").'),e.parameter("overridable_props",`**OPTIONAL** Configuration for which child element properties can be customized in component instances.\n\nStructure:\n\`\`\`json\n{\n "props": {\n "<unique-key>": {\n "elementId": "<child-element-id>",\n "propKey": "<property-key>",\n "label": "<user-friendly-name>"\n }\n }\n}\n\`\`\`\n\nTo populate this correctly:\n1. Use [${o.DOCUMENT_STRUCTURE_URI}] to find child element IDs and their widgetType\n2. Use [${o.WIDGET_SCHEMA_URI}] to find the atomic_props_schema for each child element's widgetType\n3. Only include properties you want to be customizable in component instances\n4. Provide a unique, user-friendly label for each property (e.g., "Hero Headline", "CTA Button Text")`),e.example('\nBasic component without overridable properties:\n```json\n{\n "element_id": "abc123",\n "component_name": "Hero Section"\n}\n```\n\nComponent with overridable properties:\n```json\n{\n "element_id": "abc123",\n "component_name": "Feature Card",\n "overridable_props": {\n "props": {\n "heading-text": {\n "elementId": "heading-123",\n "propKey": "text",\n "label": "Card Title"\n },\n "button-text": {\n "elementId": "button-456",\n "propKey": "text",\n "label": "Button Text"\n },\n "button-link": {\n "elementId": "button-456",\n "propKey": "url",\n "label": "Button Link"\n }\n }\n }\n}\n```\n'),e.instruction("After successful creation, the component will be available in the components library and can be inserted into any page or template."),e.instruction("When overridable properties are defined, component instances will show customization controls for those specific properties in the editing panel."),e.prompt()},initSaveAsComponentTool=()=>(0,s.getMCPByDomain)("components").addTool({name:"save-as-component",schema:m,outputSchema:d,description:generatePrompt(),handler:handleSaveAsComponent})},"./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"),a=n("@elementor/store"),i=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/store/store.ts");const p="e-component",l={type:"default",message:(0,i.__)("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,a.__getState)(),n=(0,c.selectCurrentComponentId)(t),o=(0,c.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/prevent-non-atomic-nesting.ts":function(e,t,n){n.r(t),n.d(t,{findNonAtomicElements:function(){return findNonAtomicElements},findNonAtomicElementsInElement:function(){return findNonAtomicElementsInElement},hasNonAtomicElementsInTree:function(){return hasNonAtomicElementsInTree},initNonAtomicNestingPrevention:function(){return initNonAtomicNestingPrevention},isElementAtomic:function(){return isElementAtomic}});var o=n("@elementor/editor-canvas"),r=n("@elementor/editor-elements"),s=n("@elementor/editor-notifications"),a=n("@elementor/editor-v1-adapters"),i=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/utils/is-editing-component.ts");const p={type:"default",message:(0,i.__)("This widget isn't compatible with components. Use atomic elements instead.","elementor"),id:"non-atomic-element-blocked"};function initNonAtomicNestingPrevention(){(0,a.blockCommand)({command:"document/elements/create",condition:blockNonAtomicCreate}),(0,a.blockCommand)({command:"document/elements/move",condition:blockNonAtomicMove}),(0,a.blockCommand)({command:"document/elements/paste",condition:blockNonAtomicPaste})}function isElementAtomic(e){return null!==(0,r.getElementType)(e)}function blockNonAtomicCreate(e){if(!(0,c.isEditingComponent)())return!1;const{model:t}=e,n=t?.widgetType||t?.elType;return!!n&&(!isElementAtomic(n)&&((0,s.notify)(p),!0))}function blockNonAtomicMove(e){if(!(0,c.isEditingComponent)())return!1;const{containers:t=[e.container]}=e,n=t.some(e=>{if(!e)return!1;return(0,r.getAllDescendants)(e).some(e=>!(0,o.isAtomicWidget)(e))});return n&&(0,s.notify)(p),n}function blockNonAtomicPaste(e){if(!(0,c.isEditingComponent)())return!1;const{storageType:t}=e;if("localstorage"!==t)return!1;const n=window?.elementorCommon?.storage?.get();if(!n?.clipboard?.elements)return!1;const o=hasNonAtomicElementsInTree(n.clipboard.elements);return o&&(0,s.notify)(p),o}function hasNonAtomicElementsInTree(e){for(const t of e){const e=t.widgetType||t.elType;if(e&&!isElementAtomic(e))return!0;if(t.elements?.length&&hasNonAtomicElementsInTree(t.elements))return!0}return!1}function findNonAtomicElements(e){const t=[];for(const n of e){const e=n.widgetType||n.elType;e&&!isElementAtomic(e)&&t.push(e),n.elements?.length&&t.push(...findNonAtomicElements(n.elements))}return[...new Set(t)]}function findNonAtomicElementsInElement(e){const t=[],n=e.widgetType||e.elType;if(n&&!isElementAtomic(n)&&t.push(n),e.elements?.length)for(const n of e.elements)t.push(...findNonAtomicElementsInElement(n));return[...new Set(t)]}},"./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 i}});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"),a=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");const i=(0,o.createPropUtils)("overrides",r.z.array(r.z.union([s.componentInstanceOverridePropTypeUtil.schema,a.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 a}});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 a=(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/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/add-overridable-group.ts":function(e,t,n){n.r(t),n.d(t,{addOverridableGroup:function(){return addOverridableGroup}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function addOverridableGroup({componentId:e,groupId:t,label:n,source:a}){const i=(0,s.selectCurrentComponent)((0,o.__getState)()),c=(0,s.selectOverridableProps)((0,o.__getState)(),e);if(!c)return;const p={id:t,label:n,props:[]};return(0,o.__dispatch)(s.slice.actions.setOverridableProps({componentId:e,overridableProps:{...c,groups:{...c.groups,items:{...c.groups.items,[t]:p},order:[t,...c.groups.order]}}})),(0,r.trackComponentEvent)({action:"propertiesGroupCreated",source:a,component_uid:i?.uid,group_name:n}),p}},"./packages/packages/core/editor-components/src/store/actions/archive-component.ts":function(e,t,n){n.r(t),n.d(t,{archiveComponent:function(){return archiveComponent}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-notifications"),s=n("@elementor/store"),a=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/store/store.ts");const archiveComponent=(e,t)=>{(0,s.__dispatch)(i.slice.actions.archive(e)),(0,o.setDocumentModifiedStatus)(!0),(0,r.notify)(((e,t)=>({type:"success",message:(0,a.__)("Successfully deleted component %s","elementor").replace("%s",t),id:`success-archived-components-notification-${e}`}))(e,t))}},"./packages/packages/core/editor-components/src/store/actions/create-unpublished-component.ts":function(e,t,n){n.r(t),n.d(t,{createUnpublishedComponent:function(){return createUnpublishedComponent}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-v1-adapters"),s=n("@elementor/store"),a=n("@elementor/utils"),i=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/components/create-component-form/utils/replace-element-with-component.ts"),p=n("./packages/packages/core/editor-components/src/utils/revert-overridable-settings.ts"),l=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),m=n("./packages/packages/core/editor-components/src/store/store.ts");async function createUnpublishedComponent({name:e,element:t,eventData:n,uid:d,overridableProps:u,source:g}){const v=d??(0,a.generateUniqueId)("component"),f={uid:v,name:e},y=(0,p.revertAllOverridablesInElementData)(t),h=(0,o.getContainer)(t.id),k=h?.model?.toJSON?.(),b={model:k??t,parentId:h?.parent?.id??"",index:h?.view?._index??0};(0,s.__dispatch)(m.slice.actions.addUnpublished({...f,elements:[y],overridableProps:u})),(0,s.__dispatch)(m.slice.actions.addCreatedThisSession(v));const C=await(0,c.replaceElementWithComponent)(t,f);(0,l.trackComponentEvent)({action:"created",source:g,component_uid:v,component_name:e,...n});try{await(0,r.__privateRunCommand)("document/save/auto")}catch(e){throw function restoreOriginalElement(e,t){(0,o.deleteElement)({elementId:t,options:{useHistory:!1}});const n=structuredClone(e.model);(0,o.createElements)({title:(0,i.__)("Restore Element","elementor"),elements:[{containerId:e.parentId,model:n,options:{at:e.index}}]})}(b,C.id),(0,s.__dispatch)(m.slice.actions.removeUnpublished(v)),(0,s.__dispatch)(m.slice.actions.removeCreatedThisSession(v)),e}return{uid:v,instanceId:C.id}}},"./packages/packages/core/editor-components/src/store/actions/delete-overridable-group.ts":function(e,t,n){n.r(t),n.d(t,{deleteOverridableGroup:function(){return deleteOverridableGroup}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts"),s=n("./packages/packages/core/editor-components/src/store/utils/groups-transformers.ts");function deleteOverridableGroup({componentId:e,groupId:t}){const n=(0,r.selectOverridableProps)((0,o.__getState)(),e);if(!n)return!1;const a=n.groups.items[t];if(!a||a.props.length>0)return!1;const i=(0,s.deleteGroup)(n.groups,t);return(0,o.__dispatch)(r.slice.actions.setOverridableProps({componentId:e,overridableProps:{...n,groups:i}})),!0}},"./packages/packages/core/editor-components/src/store/actions/delete-overridable-prop.ts":function(e,t,n){n.r(t),n.d(t,{deleteOverridableProp:function(){return deleteOverridableProp}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/utils/revert-overridable-settings.ts"),s=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),a=n("./packages/packages/core/editor-components/src/store/store.ts"),i=n("./packages/packages/core/editor-components/src/store/utils/groups-transformers.ts");function deleteOverridableProp({componentId:e,propKey:t,source:n}){const c=(0,a.selectOverridableProps)((0,o.__getState)(),e);if(!c)return;const p=c.props[t];if(!p)return;(0,r.revertElementOverridableSetting)(p.elementId,p.propKey,p.originValue,t);const{[t]:l,...m}=c.props,d=(0,i.removePropFromAllGroups)(c.groups,t);(0,o.__dispatch)(a.slice.actions.setOverridableProps({componentId:e,overridableProps:{...c,props:m,groups:d}}));const u=(0,a.selectCurrentComponent)((0,o.__getState)());(0,s.trackComponentEvent)({action:"propertyRemoved",source:n,component_uid:u?.uid,property_id:l.overrideKey,property_path:l.propKey,property_name:l.label,element_type:l.widgetType??l.elType})}},"./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"),a=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,a.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");function loadComponentsOverridableProps(e){if(e.length)return Promise.all(e.map(loadComponentOverrides))}async function loadComponentOverrides(e){if((0,s.selectIsOverridablePropsLoaded)((0,o.__getState)(),e))return;const t=await r.apiClient.getOverridableProps(e);t&&(0,o.__dispatch)(s.slice.actions.setOverridableProps({componentId:e,overridableProps:t}))}},"./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/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function loadComponentsStyles(e){if(!e.size)return;const t=(0,r.selectStyles)((0,o.__getState)()),n=new Map([...e.entries()].filter(([e])=>!t[e]));n.size&&function addStyles(e){const t=Object.fromEntries([...e.entries()].map(([e,t])=>[e,extractStylesFromDocument(t)]));(0,o.__dispatch)(r.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/rename-component.ts":function(e,t,n){n.r(t),n.d(t,{renameComponent:function(){return renameComponent}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-elements"),s=n("@elementor/store"),a=n("./packages/packages/core/editor-components/src/create-component-type.ts"),i=n("./packages/packages/core/editor-components/src/store/store.ts");const c="title_external_change",renameComponent=(e,t)=>{(0,s.__dispatch)(i.slice.actions.rename({componentUid:e,name:t})),(0,o.setDocumentModifiedStatus)(!0),function refreshComponentInstanceTitles(e){const t=function getDocumentContainer(){const e=(0,o.getV1DocumentsManager)();return e?.getCurrent()?.container}();if(!t)return;const n=function findComponentInstancesByUid(e,t){const n=(0,r.getAllDescendants)(e);return n.filter(e=>{const n=e.model.get("widgetType"),o=e.model.get("editor_settings");return n===a.COMPONENT_WIDGET_TYPE&&o?.component_uid===t})}(t,e);n.forEach(e=>{e.model.trigger?.(c)})}(e)}},"./packages/packages/core/editor-components/src/store/actions/rename-overridable-group.ts":function(e,t,n){n.r(t),n.d(t,{renameOverridableGroup:function(){return renameOverridableGroup}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts"),s=n("./packages/packages/core/editor-components/src/store/utils/groups-transformers.ts");function renameOverridableGroup({componentId:e,groupId:t,label:n}){const a=(0,r.selectOverridableProps)((0,o.__getState)(),e);if(!a)return!1;if(!a.groups.items[t])return!1;const i=(0,s.renameGroup)(a.groups,t,n);return(0,o.__dispatch)(r.slice.actions.setOverridableProps({componentId:e,overridableProps:{...a,groups:i}})),!0}},"./packages/packages/core/editor-components/src/store/actions/reorder-group-props.ts":function(e,t,n){n.r(t),n.d(t,{reorderGroupProps:function(){return reorderGroupProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function reorderGroupProps({componentId:e,groupId:t,newPropsOrder:n}){const s=(0,r.selectOverridableProps)((0,o.__getState)(),e);if(!s)return;const a=s.groups.items[t];a&&(0,o.__dispatch)(r.slice.actions.setOverridableProps({componentId:e,overridableProps:{...s,groups:{...s.groups,items:{...s.groups.items,[t]:{...a,props:n}}}}}))}},"./packages/packages/core/editor-components/src/store/actions/reorder-overridable-groups.ts":function(e,t,n){n.r(t),n.d(t,{reorderOverridableGroups:function(){return reorderOverridableGroups}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function reorderOverridableGroups({componentId:e,newOrder:t}){const n=(0,r.selectOverridableProps)((0,o.__getState)(),e);n&&(0,o.__dispatch)(r.slice.actions.setOverridableProps({componentId:e,overridableProps:{...n,groups:{...n.groups,order:t}}}))}},"./packages/packages/core/editor-components/src/store/actions/set-overridable-prop.ts":function(e,t,n){n.r(t),n.d(t,{setOverridableProp:function(){return setOverridableProp}});var o=n("@elementor/store"),r=n("@elementor/utils"),s=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),a=n("./packages/packages/core/editor-components/src/store/store.ts"),i=n("./packages/packages/core/editor-components/src/store/utils/groups-transformers.ts");function setOverridableProp({componentId:e,overrideKey:t,elementId:n,label:c,groupId:p,propKey:l,elType:m,widgetType:d,originValue:u,originPropFields:g,source:v}){const f=(0,a.selectOverridableProps)((0,o.__getState)(),e);if(!f)return;const y=t?f.props[t]:null,h=Object.values(f.props).filter(e=>e.elementId===n&&e.propKey===l&&e!==y),{groups:k,groupId:b}=(0,i.resolveOrCreateGroup)(f.groups,p||y?.groupId||void 0),C={overrideKey:y?.overrideKey||(0,r.generateUniqueId)("prop"),label:c,elementId:n,propKey:l,widgetType:d,elType:m,originValue:u,groupId:b,originPropFields:g},E=(0,i.removePropsFromState)({...f,groups:k},h),_={...E.props,[C.overrideKey]:C};let P=(0,i.addPropToGroup)(E.groups,b,C.overrideKey);P=(0,i.ensureGroupInOrder)(P,b);y&&y.groupId!==b&&(P=(0,i.removePropFromGroup)(P,y.groupId,C.overrideKey)),(0,o.__dispatch)(a.slice.actions.setOverridableProps({componentId:e,overridableProps:{props:_,groups:P}}));if(!y){const e=(0,a.selectCurrentComponent)((0,o.__getState)());(0,s.trackComponentEvent)({action:"propertyExposed",source:v,component_uid:e?.uid,property_id:C.overrideKey,property_path:l,property_name:c,element_type:d??m})}return C}},"./packages/packages/core/editor-components/src/store/actions/update-current-component.ts":function(e,t,n){n.r(t),n.d(t,{archiveComponent:function(){return archiveComponent},updateCurrentComponent:function(){return updateCurrentComponent}});var o=n("@elementor/editor-documents"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function updateCurrentComponent({path:e,currentComponentId:t}){const n=(0,r.__getStore)()?.dispatch;n&&(n(s.slice.actions.setPath(e)),n(s.slice.actions.setCurrentComponentId(t)))}const archiveComponent=e=>{const t=(0,r.__getStore)(),n=t?.dispatch;n&&(n(s.slice.actions.archive(e)),(0,o.setDocumentModifiedStatus)(!0))}},"./packages/packages/core/editor-components/src/store/actions/update-overridable-prop-params.ts":function(e,t,n){n.r(t),n.d(t,{updateOverridablePropParams:function(){return updateOverridablePropParams}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts"),s=n("./packages/packages/core/editor-components/src/store/utils/groups-transformers.ts");function updateOverridablePropParams({componentId:e,overrideKey:t,label:n,groupId:a}){const i=(0,r.selectOverridableProps)((0,o.__getState)(),e);if(!i)return;const c=i.props[t];if(!c)return;const p=c.groupId,l=a??p,m={...c,label:n,groupId:l},d=(0,s.movePropBetweenGroups)(i.groups,t,p,l);return(0,o.__dispatch)(r.slice.actions.setOverridableProps({componentId:e,overridableProps:{...i,props:{...i.props,[t]:m},groups:d}})),m}},"./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("@elementor/store"),r=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function updateOverridableProp(e,t,n){const a=(0,s.selectOverridableProps)((0,o.__getState)(),e);if(!a)return;const i=a.props[t.override_key];if(!i)return;const c=(0,r.resolveOverridePropValue)(t.origin_value),p=n?{originValue:c,originPropFields:n}:{originValue:c},l={...a,props:{...a.props,[i.overrideKey]:{...i,...p}}};(0,o.__dispatch)(s.slice.actions.setOverridableProps({componentId:e,overridableProps: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-styles-repository"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");const a=(0,o.createStylesProvider)({key:"components-styles",priority:100,subscribe:e=>(0,r.__subscribeWithSelector)(e=>e[s.SLICE_NAME],()=>{e()}),actions:{all:()=>(0,s.selectFlatStyles)((0,r.__getState)()),get:e=>(0,s.selectFlatStyles)((0,r.__getState)()).find(t=>t.id===e)??null}})},"./packages/packages/core/editor-components/src/store/store.ts":function(e,t,n){n.r(t),n.d(t,{SLICE_NAME:function(){return a},initialState:function(){return s},selectArchivedThisSession:function(){return selectArchivedThisSession},selectComponent:function(){return selectComponent},selectComponentByUid:function(){return selectComponentByUid},selectComponents:function(){return c},selectCreatedThisSession:function(){return u},selectCurrentComponent:function(){return k},selectCurrentComponentId:function(){return h},selectData:function(){return selectData},selectFlatStyles:function(){return d},selectIsOverridablePropsLoaded:function(){return f},selectLoadIsError:function(){return m},selectLoadIsPending:function(){return l},selectOverridableProps:function(){return v},selectPath:function(){return y},selectStyles:function(){return selectStyles},selectUnpublishedComponents:function(){return p},selectUpdatedComponentNames:function(){return b},slice:function(){return i},useComponent:function(){return useComponent},useCurrentComponent:function(){return useCurrentComponent},useCurrentComponentId:function(){return useCurrentComponentId},useOverridableProps:function(){return useOverridableProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/thunks.ts");const s={data:[],unpublishedData:[],loadStatus:"idle",styles:{},createdThisSession:[],archivedThisSession:[],path:[],currentComponentId:null,updatedComponentNames:{}},a="components",i=(0,o.__createSlice)({name:a,initialState:s,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)},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={}}},extraReducers:e=>{e.addCase(r.loadComponents.fulfilled,(e,{payload:t})=>{e.data=t,e.loadStatus="idle"}),e.addCase(r.loadComponents.pending,e=>{e.loadStatus="pending"}),e.addCase(r.loadComponents.rejected,e=>{e.loadStatus="error"})}}),selectData=e=>e[a].data,selectArchivedThisSession=e=>e[a].archivedThisSession,selectLoadStatus=e=>e[a].loadStatus,selectUnpublishedData=e=>e[a].unpublishedData,getCurrentComponentId=e=>e[a].currentComponentId,selectComponent=(e,t)=>e[a].data.find(e=>e.id===t),useComponent=e=>(0,o.__useSelector)(t=>e?selectComponent(t,e):null),selectComponentByUid=(e,t)=>e[a].data.find(e=>e.uid===t)??e[a].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)]),p=(0,o.__createSelector)(selectUnpublishedData,e=>e),l=(0,o.__createSelector)(selectLoadStatus,e=>"pending"===e),m=(0,o.__createSelector)(selectLoadStatus,e=>"error"===e),selectStyles=e=>e[a].styles??{},d=(0,o.__createSelector)(e=>e[a].styles??{},e=>Object.values(e).flat()),u=(0,o.__createSelector)(e=>e[a].createdThisSession,e=>e),g={props:{},groups:{items:{},order:[]}},v=(0,o.__createSelector)(selectComponent,e=>{if(e)return e.overridableProps??g}),useOverridableProps=e=>(0,o.__useSelector)(t=>e?v(t,e):null),f=(0,o.__createSelector)(selectComponent,e=>!!e?.overridableProps),y=(0,o.__createSelector)(e=>e[a].path,e=>e),h=(0,o.__createSelector)(getCurrentComponentId,e=>e),k=(0,o.__createSelector)(selectData,getCurrentComponentId,(e,t)=>e.find(e=>e.id===t)),useCurrentComponentId=()=>(0,o.__useSelector)(h),useCurrentComponent=()=>(0,o.__useSelector)(k),b=(0,o.__createSelector)(e=>e[a].updatedComponentNames,e=>Object.entries(e).map(([e,t])=>({componentId:Number(e),title: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/store/utils/groups-transformers.ts":function(e,t,n){n.r(t),n.d(t,{addPropToGroup:function(){return addPropToGroup},createGroup:function(){return createGroup},deleteGroup:function(){return deleteGroup},ensureGroupInOrder:function(){return ensureGroupInOrder},movePropBetweenGroups:function(){return movePropBetweenGroups},removePropFromAllGroups:function(){return removePropFromAllGroups},removePropFromGroup:function(){return removePropFromGroup},removePropsFromState:function(){return removePropsFromState},renameGroup:function(){return renameGroup},resolveOrCreateGroup:function(){return resolveOrCreateGroup}});var o=n("@elementor/utils"),r=n("@wordpress/i18n");function removePropFromAllGroups(e,t){return{...e,items:Object.fromEntries(Object.entries(e.items).map(([e,n])=>[e,{...n,props:n.props.filter(e=>e!==t)}]))}}function addPropToGroup(e,t,n){const o=e.items[t];return o?o.props.includes(n)?e:{...e,items:{...e.items,[t]:{...o,props:[...o.props,n]}}}:e}function movePropBetweenGroups(e,t,n,o){if(n===o)return e;return addPropToGroup(removePropFromGroup(e,n,t),o,t)}function removePropFromGroup(e,t,n){const o=e.items[t];return o?{...e,items:{...e.items,[t]:{...o,props:o.props.filter(e=>e!==n)}}}:e}function resolveOrCreateGroup(e,t){return t&&e.items[t]?{groups:e,groupId:t}:!t&&e.order.length>0?{groups:e,groupId:e.order[0]}:createGroup(e,t)}function createGroup(e,t,n){const s=t||(0,o.generateUniqueId)("group"),a=n||(0,r.__)("Default","elementor");return{groups:{...e,items:{...e.items,[s]:{id:s,label:a,props:[]}},order:[...e.order,s]},groupId:s}}function removePropsFromState(e,t){const n=t.map(e=>e.overrideKey);return{props:Object.fromEntries(Object.entries(e.props).filter(([,e])=>!t.includes(e))),groups:{items:Object.fromEntries(Object.entries(e.groups.items).map(([e,t])=>[e,{...t,props:t.props.filter(e=>!n.includes(e))}])),order:e.groups.order.filter(e=>!n.includes(e))}}}function ensureGroupInOrder(e,t){return e.order.includes(t)?e:{...e,order:[...e.order,t]}}function deleteGroup(e,t){const{[t]:n,...o}=e.items;return{items:o,order:e.order.filter(e=>e!==t)}}function renameGroup(e,t,n){const o=e.items[t];return o?{...e,items:{...e.items,[t]:{...o,label:n}}}:e}},"./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/create-components-before-save.ts"),r=n("./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts"),s=n("./packages/packages/core/editor-components/src/sync/set-component-overridable-props-settings-before-save.ts"),a=n("./packages/packages/core/editor-components/src/sync/update-archived-component-before-save.ts"),i=n("./packages/packages/core/editor-components/src/sync/update-component-title-before-save.ts");const beforeSave=({container:e,status:t})=>{const n=e?.model.get("elements").toJSON?.()??[];return Promise.all([syncComponents({elements:n,status:t}),(0,s.setComponentOverridablePropsSettingsBeforeSave)({container:e})])},syncComponents=async({elements:e,status:t})=>{await updateExistingComponentsBeforeSave({elements:e,status:t}),await(0,o.createComponentsBeforeSave)({elements:e,status:t})},updateExistingComponentsBeforeSave=async({elements:e,status:t})=>{await(0,i.updateComponentTitleBeforeSave)(t),await(0,a.updateArchivedComponentBeforeSave)(t),await(0,r.publishDraftComponentsInPageBeforeSave)({elements:e,status:t})}},"./packages/packages/core/editor-components/src/sync/cleanup-overridable-props-on-delete.ts":function(e,t,n){n.r(t),n.d(t,{initCleanupOverridablePropsOnDelete:function(){return initCleanupOverridablePropsOnDelete}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-v1-adapters"),s=n("@elementor/store"),a=n("./packages/packages/core/editor-components/src/store/store.ts"),i=n("./packages/packages/core/editor-components/src/store/utils/groups-transformers.ts");function initCleanupOverridablePropsOnDelete(){(0,r.registerDataHook)("dependency","document/elements/delete",e=>{const t=(0,s.__getState)();if(!t)return!0;const n=(0,a.selectCurrentComponentId)(t);if(!n)return!0;const r=(0,a.selectOverridableProps)(t,n);if(!r||0===Object.keys(r.props).length)return!0;const c=e.containers??(e.container?[e.container]:[]);if(0===c.length)return!0;const p=function collectDeletedElementIds(e){const t=e.filter(Boolean).flatMap(e=>[e,...(0,o.getAllDescendants)(e)]).map(e=>e.model?.get?.("id")??e.id).filter(e=>Boolean(e));return t}(c);if(0===p.length)return!0;const l=Object.entries(r.props).filter(([,e])=>p.includes(e.elementId)).map(([e])=>e);if(0===l.length)return!0;const m=Object.fromEntries(Object.entries(r.props).filter(([e])=>!l.includes(e)));let d=r.groups;for(const e of l)d=(0,i.removePropFromAllGroups)(d,e);return(0,s.__dispatch)(a.slice.actions.setOverridableProps({componentId:n,overridableProps:{...r,props:m,groups:d}})),!0})}},"./packages/packages/core/editor-components/src/sync/create-components-before-save.ts":function(e,t,n){n.r(t),n.d(t,{createComponentsBeforeSave:function(){return createComponentsBeforeSave}});var o=n("@elementor/editor-elements"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/api.ts"),a=n("./packages/packages/core/editor-components/src/store/store.ts");async function createComponentsBeforeSave({elements:e,status:t}){const n=(0,a.selectUnpublishedComponents)((0,r.__getState)());if(n.length)try{const o=await async function createComponents(e,t){const n=await s.apiClient.create({status:t,items:e.map(e=>({uid:e.uid,title:e.name,elements:e.elements,settings:e.overridableProps?{overridable_props:e.overridableProps}:void 0}))}),o=new Map;return Object.entries(n).forEach(([e,t])=>{o.set(e,t)}),o}(n,t);updateComponentInstances(e,o),(0,r.__dispatch)(a.slice.actions.add(n.map(e=>({id:o.get(e.uid),name:e.name,uid:e.uid,overridableProps:e.overridableProps?e.overridableProps:void 0})))),(0,r.__dispatch)(a.slice.actions.resetUnpublished())}catch(e){const t=n.map(e=>e.uid);throw(0,r.__dispatch)(a.slice.actions.removeUnpublished(t)),new Error(`Failed to publish components: ${e}`)}}function updateComponentInstances(e,t){e.forEach(e=>{const{shouldUpdate:n,newComponentId:r}=function shouldUpdateElement(e,t){if("e-component"===e.widgetType){const n=e.settings?.component_instance?.value?.component_id.value;if(n&&t.has(n.toString()))return{shouldUpdate:!0,newComponentId:t.get(n.toString())}}return{shouldUpdate:!1,newComponentId:null}}(e,t);n&&function updateElementComponentId(e,t){(0,o.updateElementSettings)({id:e,props:{component_instance:{$$type:"component-instance",value:{component_id:{$$type:"number",value:t}}}},withHistory:!1})}(e.id,r),e.elements&&updateComponentInstances(e.elements,t)})}},"./packages/packages/core/editor-components/src/sync/handle-component-edit-mode-container.ts":function(e,t,n){n.r(t),n.d(t,{initHandleComponentEditModeContainer:function(){return initHandleComponentEditModeContainer}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-v1-adapters"),s=n("./packages/packages/core/editor-components/src/components/consts.ts"),a=n("./packages/packages/core/editor-components/src/utils/is-editing-component.ts");const i="e-flexbox";function initHandleComponentEditModeContainer(){!function initRedirectDropIntoComponent(){(0,r.registerDataHook)("dependency","preview/drop",e=>{if(!(0,a.isEditingComponent)())return!0;const t=e.containers??(e.container?[e.container]:[]);for(const n of t){if(!isComponent(n))continue;const{shouldRedirect:t,container:o}=getComponentContainer(n);if(t)if(e.containers){const t=e.containers.indexOf(n);e.containers[t]=o}else e.container=o}return!0})}(),function initHandleTopLevelElementDelete(){(0,r.registerDataHook)("after","document/elements/delete",e=>{if(!(0,a.isEditingComponent)())return;const t=e.containers??(e.container?[e.container]:[]);for(const e of t){if(!e.parent||!isComponent(e.parent))continue;const t=e.parent;0===t.children?.length&&createEmptyTopLevelContainer(e.parent)}})}()}function createEmptyTopLevelContainer(e){const t=(0,o.createElement)({containerId:e.id,model:{elType:i}});(0,o.selectElement)(t.id)}function getComponentContainer(e){const t=e.children?.[0];return t?{shouldRedirect:!0,container:t}:{shouldRedirect:!1,container:e}}function isComponent(e){return!("document"!==e.id)&&e.document?.config.type===s.COMPONENT_DOCUMENT_TYPE}},"./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("./packages/packages/core/editor-components/src/api.ts"),s=n("./packages/packages/core/editor-components/src/utils/get-component-documents.ts");async function publishDraftComponentsInPageBeforeSave({status:e,elements:t}){if("publish"!==e)return;const n=[...(await(0,s.getComponentDocuments)(t)).values()].filter(o.isDocumentDirty).map(e=>e.id);0!==n.length&&(await r.apiClient.updateStatuses(n,"publish"),n.forEach(e=>(0,o.invalidateDocumentData)(e)))}},"./packages/packages/core/editor-components/src/sync/revert-overridables-on-copy-or-duplicate.ts":function(e,t,n){n.r(t),n.d(t,{initRevertOverridablesOnCopyOrDuplicate:function(){return initRevertOverridablesOnCopyOrDuplicate}});var o=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/core/editor-components/src/utils/is-editing-component.ts"),s=n("./packages/packages/core/editor-components/src/utils/revert-overridable-settings.ts");function initRevertOverridablesOnCopyOrDuplicate(){(0,o.registerDataHook)("after","document/elements/duplicate",(e,t)=>{(0,r.isEditingComponent)()&&function revertOverridablesForDuplicatedElements(e){(Array.isArray(e)?e:[e]).forEach(e=>{(0,s.revertAllOverridablesInContainer)(e)})}(t)}),(0,o.registerDataHook)("after","document/elements/copy",e=>{(0,r.isEditingComponent)()&&function revertOverridablesInStorage(e){const t=window.elementorCommon?.storage;if(!t)return;const n=t.get(e);if(!n?.elements?.length)return;const o=n.elements.map(s.revertAllOverridablesInElementData);t.set(e,{...n,elements:o})}(e.storageKey??"clipboard")})}},"./packages/packages/core/editor-components/src/sync/set-component-overridable-props-settings-before-save.ts":function(e,t,n){n.r(t),n.d(t,{setComponentOverridablePropsSettingsBeforeSave:function(){return setComponentOverridablePropsSettingsBeforeSave}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/components/consts.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");const setComponentOverridablePropsSettingsBeforeSave=({container:e})=>{const t=e.document;if(!t||t.config.type!==r.COMPONENT_DOCUMENT_TYPE)return;const n=(0,s.selectOverridableProps)((0,o.__getState)(),t.id);n&&e.settings.set("overridable_props",n)}},"./packages/packages/core/editor-components/src/sync/update-archived-component-before-save.ts":function(e,t,n){n.r(t),n.d(t,{updateArchivedComponentBeforeSave:function(){return updateArchivedComponentBeforeSave}});var o=n("@elementor/editor-notifications"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/api.ts"),a=n("./packages/packages/core/editor-components/src/store/store.ts");const updateArchivedComponentBeforeSave=async e=>{try{const t=(0,a.selectArchivedThisSession)((0,r.__getState)());if(!t.length)return;const n=(await s.apiClient.updateArchivedComponents(t,e)).failedIds.join(", ");n&&(0,o.notify)({type:"error",message:`Failed to archive components: ${n}`,id:"failed-archived-components-notification"})}catch(e){throw new Error(`Failed to update archived components: ${e}`)}}},"./packages/packages/core/editor-components/src/sync/update-component-title-before-save.ts":function(e,t,n){n.r(t),n.d(t,{updateComponentTitleBeforeSave:function(){return updateComponentTitleBeforeSave}});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");const updateComponentTitleBeforeSave=async e=>{const t=(0,s.selectUpdatedComponentNames)((0,o.__getState)());if(!t.length)return;0===(await r.apiClient.updateComponentTitle(t,e)).failedIds.length&&(0,o.__dispatch)(s.slice.actions.cleanUpdatedComponentNames())}},"./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/component-name-validation.ts":function(e,t,n){n.r(t),n.d(t,{validateComponentName:function(){return validateComponentName}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/components/create-component-form/utils/component-form-schema.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function validateComponentName(e){const t=(0,s.selectComponents)((0,o.__getState)())?.map(({name:e})=>e)??[],n=(0,r.createSubmitComponentSchema)(t).safeParse({componentName:e.toLowerCase()});if(n.success)return{isValid:!0,errorMessage:null};const a=n.error.format();return{isValid:!1,errorMessage:a.componentName?._errors[0]??a._errors[0]}}},"./packages/packages/core/editor-components/src/utils/expand-navigator.ts":function(e,t,n){n.r(t),n.d(t,{expandNavigator:function(){return expandNavigator}});var o=n("@elementor/editor-v1-adapters");async function expandNavigator(){await(0,o.__privateRunCommand)("navigator/expand-all")}},"./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:a})=>{const i=[];if((0,r.isComponentInstance)({widgetType:e,elType:n})){const e=a?.component_instance?.value?.component_id.value;if(!e)return i;i.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);i.push(...e)}return i}));return[...new Set(n.flat())]}},"./packages/packages/core/editor-components/src/utils/get-container-for-new-element.ts":function(e,t,n){n.r(t),n.d(t,{getContainerForNewElement:function(){return getContainerForNewElement}});var o=n("@elementor/editor-elements");const getContainerForNewElement=()=>{const e=(0,o.getCurrentDocumentContainer)(),t=function getSelectedElementContainer(){const e=(0,o.getSelectedElements)();if(1!==e.length)return;return(0,o.getContainer)(e[0].id)}();let n,r;if(t)switch(t.model.get("elType")){case"widget":{n=t?.parent;const e=t.view?._index??-1;e>-1&&(r={at:e+1});break}case"section":n=t?.children?.[0];break;default:n=t}return{container:n??e,options:r}}},"./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/create-component-type.ts");function isComponentInstance(e){return[e.widgetType,e.elType].includes(o.COMPONENT_WIDGET_TYPE)}},"./packages/packages/core/editor-components/src/utils/is-editing-component.ts":function(e,t,n){n.r(t),n.d(t,{isEditingComponent:function(){return isEditingComponent}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function isEditingComponent(){const e=(0,o.__getStore)()?.getState();return!!e&&null!==(0,r.selectCurrentComponentId)(e)}},"./packages/packages/core/editor-components/src/utils/is-pro-user.ts":function(e,t,n){function isProUser(){const e=window;if(!(e.elementor?.helpers?.hasPro?.()??!1))return!1;return e.elementorPro?.config?.isActive??!1}n.r(t),n.d(t,{isProUser:function(){return isProUser}})},"./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/revert-overridable-settings.ts":function(e,t,n){n.r(t),n.d(t,{revertAllOverridablesInContainer:function(){return revertAllOverridablesInContainer},revertAllOverridablesInElementData:function(){return revertAllOverridablesInElementData},revertElementOverridableSetting:function(){return revertElementOverridableSetting}});var o=n("@elementor/editor-elements"),r=n("./packages/packages/core/editor-components/src/create-component-type.ts"),s=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-instance-overrides-prop-type.ts"),i=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"),p=n("./packages/packages/core/editor-components/src/utils/is-component-instance.ts");function revertElementOverridableSetting(e,t,n,r){const s=(0,o.getContainer)(e);s&&((0,p.isComponentInstance)(s.model.toJSON())?function revertComponentInstanceOverridableSetting(e,t){const n=(0,o.getElementSetting)(e,"component_instance"),r=i.componentInstancePropTypeUtil.extract(n),s=a.componentInstanceOverridesPropTypeUtil.extract(r?.overrides);if(!s?.length)return;const c=revertComponentInstanceOverrides(s,t),p=i.componentInstancePropTypeUtil.create({...r,overrides:a.componentInstanceOverridesPropTypeUtil.create(c)});(0,o.updateElementSettings)({id:e,props:{component_instance:p},withHistory:!1})}(e,r):(0,o.updateElementSettings)({id:e,props:{[t]:n??null},withHistory:!1}))}function revertComponentInstanceOverrides(e,t){return e.map(e=>c.componentOverridablePropTypeUtil.isValid(e)?s.componentInstanceOverridePropTypeUtil.isValid(e.value.origin_value)?t&&e.value.override_key!==t?e:e.value.origin_value:null:e).filter(e=>null!==e)}function revertOverridablePropsFromSettings(e){let t=!1;const n={};for(const[o,r]of Object.entries(e))c.componentOverridablePropTypeUtil.isValid(r)?(n[o]=r.value.origin_value,t=!0):n[o]=r;return{hasChanges:t,settings:n}}function revertAllOverridablesInElementData(e){const t={...e};if((0,p.isComponentInstance)({widgetType:e.widgetType,elType:e.elType}))t.settings=function revertComponentInstanceSettings(e){if(!e?.component_instance)return e;const t=i.componentInstancePropTypeUtil.extract(e.component_instance),n=a.componentInstanceOverridesPropTypeUtil.extract(t?.overrides);if(!n?.length)return e;const o=revertComponentInstanceOverrides(n);return{...e,component_instance:i.componentInstancePropTypeUtil.create({...t,overrides:a.componentInstanceOverridesPropTypeUtil.create(o)})}}(e.settings);else if(t.settings){const{settings:e}=revertOverridablePropsFromSettings(t.settings);t.settings=e}return t.elements&&(t.elements=t.elements.map(revertAllOverridablesInElementData)),t}function revertAllOverridablesInContainer(e){(0,o.getAllDescendants)(e).forEach(e=>{e.model.get("widgetType")===r.COMPONENT_WIDGET_TYPE?function revertComponentInstanceOverridesInElement(e){const t=e.settings?.toJSON()??{},n=i.componentInstancePropTypeUtil.extract(t.component_instance),r=a.componentInstanceOverridesPropTypeUtil.extract(n?.overrides);if(!r?.length)return;const s=revertComponentInstanceOverrides(r),c=i.componentInstancePropTypeUtil.create({...n,overrides:a.componentInstanceOverridesPropTypeUtil.create(s)});(0,o.updateElementSettings)({id:e.id,props:{component_instance:c},withHistory:!1})}(e):function revertElementSettings(e){const t=e.settings?.toJSON()??{},{hasChanges:n,settings:r}=revertOverridablePropsFromSettings(t);if(!n)return;(0,o.updateElementSettings)({id:e.id,props:r,withHistory:!1})}(e)})}},"./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},switchToComponent:function(){return switchToComponent}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-elements"),s=n("./packages/packages/core/editor-components/src/utils/expand-navigator.ts");async function switchToComponent(e,t,n){const a=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:a,mode:"autosave",setAsInitial:!1,shouldScroll:!1});const i=(0,r.getCurrentDocumentContainer)(),c=i?.children?.[0];c&&((0,r.selectElement)(c.id),(0,s.expandNavigator)())}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/mixpanel"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");const trackComponentEvent=({action:e,source:t,...n})=>{const{dispatchEvent:r,config:s}=(0,o.getMixpanel)();if(!s?.names?.components?.[e])return;const a=s.names.components[e];r?.(a,{...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,a=n?.component_uid,i=t.id,c=(0,s.selectCreatedThisSession)((0,r.__getState)()),p=a&&c.includes(a),l=window.elementorCommon.eventsManager.config,{locations:m,secondaryLocations:d}=l;trackComponentEvent({action:"instanceAdded",source:"user",instance_id:i,component_uid:a,component_name:o,is_same_session_reuse:p,location:m.widgetPanel,secondary_location:d.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-mcp":function(e){e.exports=window.elementorV2.editorMcp},"@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-ui":function(e){e.exports=window.elementorV2.editorUi},"@elementor/editor-v1-adapters":function(e){e.exports=window.elementorV2.editorV1Adapters},"@elementor/http-client":function(e){e.exports=window.elementorV2.httpClient},"@elementor/icons":function(e){e.exports=window.elementorV2.icons},"@elementor/mixpanel":function(e){e.exports=window.elementorV2.mixpanel},"@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},"react-dom":function(e){e.exports=window.ReactDOM}},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,{init:function(){return e.init}});var e=__webpack_require__("./packages/packages/core/editor-components/src/init.ts")}(),(window.elementorV2=window.elementorV2||{}).editorComponents=n}(),window.elementorV2.editorComponents?.init?.();
2934 66 //# sourceMappingURL=editor-components.js.map