{"translation-revision-date":"2026-04-14 06:42+0000","generator":"WP-CLI\/2.12.0","source":"gutenberg\/edit-pages-panel\/src\/components\/PageForm.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"tr_TR","plural-forms":"nplurals=2; plural=n != 1;"},"Cancel":["\u0130ptal "],"Error:":["Hata:"],"Page title:":["Sayfa ba\u015fl\u0131\u011f\u0131:"],"Save":["Kaydet"],"Saving":["Kaydediliyor"]}}}!function(){"use strict";var e={d:function(t,n){for(var o in n)e.o(n,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:n[o]})},o:function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{init:function(){return kn}});var n=window.elementorV2.licenseApi;const o="overridable-prop",r="atomic-components",i="elementor_component",a="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.\n\t\t\n\t\tBefore using the tools, you must fetch the list of components from the resource (as mentioned in the required resources), if you see something that might fit, get the component instance.\n\t\tThen you can save the component instance as a new component (Name is unique so do not repeat it).\n\n\t\tIf you see that there is a component that might match the needs of the user, get the component, see if it's published and suggest the user to use it (but only if you are 100% sure on that).\n\t\tIgnore this If statement when the users asks to create a new component, you can only suggest it after the work is done.";var s=window.elementorV2.editor,l=window.elementorV2.editorComponents,c=window.elementorV2.editorControls,p=window.elementorV2.editorDocuments,m=window.elementorV2.editorEditingPanel,d=window.elementorV2.editorElementsPanel,u=window.elementorV2.editorMcp,g=window.elementorV2.editorPanels,f=window.elementorV2.editorV1Adapters,y=window.wp.i18n,h=window.React,v=window.elementorV2.editorCurrentUser,b=window.elementorV2.editorUi,E=window.elementorV2.icons,w=window.elementorV2.store,_=window.elementorV2.ui;function C(){const e=(0,w.__useSelector)(l.selectPath),t=(0,p.getV1DocumentsManager)();return(0,h.useCallback)(()=>{const{componentId:n,instanceId:o}=e.at(-2)??{};n&&o?(0,l.switchToComponent)(n,o):(0,l.switchToComponent)(t.getInitialId())},[e,t])}const x=({anchorRef:e,shouldShowIntroduction:t,onClose:n})=>e.current&&t?h.createElement(_.Popover,{anchorEl:e.current,open:t,anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:-30},onClose:n},h.createElement(_.Box,{sx:{width:"296px"}},h.createElement(b.PopoverHeader,{title:(0,y.__)("Add your first property","elementor-pro"),onClose:n}),h.createElement(_.Image,{sx:{width:"296px",height:"160px"},src:"https://assets.elementor.com/packages/v1/images/components-properties-intro.png",alt:""}),h.createElement(c.PopoverContent,null,h.createElement(_.Stack,{sx:{p:2}},h.createElement(_.Typography,{variant:"body2"},(0,y.__)("Properties make instances flexible.","elementor-pro")),h.createElement(_.Typography,{variant:"body2"},(0,y.__)("Select any Element, then in the General tab, click next to any setting you want users to customize - like text, images, or links.","elementor-pro")),h.createElement(_.Typography,{variant:"body2",sx:{mt:2}},(0,y.__)("Your properties will appear in the Properties panel, where you can organize and manage them anytime.","elementor-pro")),h.createElement(_.Link,{href:"http://go.elementor.com/components-guide",target:"_blank",sx:{mt:2},color:"info.main",variant:"body2"},(0,y.__)("Learn more","elementor-pro")),h.createElement(_.Stack,{direction:"row",alignItems:"center",justifyContent:"flex-end",sx:{pt:1}},h.createElement(_.Button,{size:"medium",variant:"contained",onClick:n},(0,y.__)("Got it","elementor-pro"))))))):null;var I=window.elementorV2.utils,P=window.elementorV2.editorElements;function S(e,t,n,o){const r=(0,P.getContainer)(e);r&&((0,l.isComponentInstance)(r.model.toJSON())?function(e,t){const n=(0,P.getElementSetting)(e,"component_instance"),o=l.componentInstancePropTypeUtil.extract(n),r=l.componentInstanceOverridesPropTypeUtil.extract(o?.overrides);if(!r?.length)return;const i=T(r,t),a=l.componentInstancePropTypeUtil.create({...o,overrides:l.componentInstanceOverridesPropTypeUtil.create(i)});(0,P.updateElementSettings)({id:e,props:{component_instance:a},withHistory:!1})}(e,o):(0,P.updateElementSettings)({id:e,props:{[t]:n??null},withHistory:!1}))}function T(e,t){return e.map(e=>l.componentOverridablePropTypeUtil.isValid(e)?l.componentInstanceOverridePropTypeUtil.isValid(e.value.origin_value)?t&&e.value.override_key!==t?e:e.value.origin_value:null:e).filter(e=>null!==e)}function O(e){let t=!1;const n={};for(const[o,r]of Object.entries(e))l.componentOverridablePropTypeUtil.isValid(r)?(n[o]=r.value.origin_value,t=!0):n[o]=r;return{hasChanges:t,settings:n}}function k(e){const t={...e};if((0,l.isComponentInstance)({widgetType:e.widgetType,elType:e.elType}))t.settings=function(e){if(!e?.component_instance)return e;const t=l.componentInstancePropTypeUtil.extract(e.component_instance),n=l.componentInstanceOverridesPropTypeUtil.extract(t?.overrides);if(!n?.length)return e;const o=T(n);return{...e,component_instance:l.componentInstancePropTypeUtil.create({...t,overrides:l.componentInstanceOverridesPropTypeUtil.create(o)})}}(e.settings);else if(t.settings){const{settings:e}=O(t.settings);t.settings=e}return t.elements&&(t.elements=t.elements.map(k)),t}function D(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 A({componentId:e,propKey:t,executedBy:n,revertElementOverridable:o=!0}){const r=l.componentsSelectors.getOverridableProps(e);if(!r||0===Object.keys(r.props).length)return;const i=Array.isArray(t)?t:[t],a=[];for(const e of i){const t=r.props[e];t&&(a.push(t),o&&S(t.elementId,t.propKey,t.originValue,e))}if(0===a.length)return;const s=Object.fromEntries(Object.entries(r.props).filter(([e])=>!i.includes(e))),c=function(e,t){const n=Array.isArray(t)?t:[t];return{...e,items:Object.fromEntries(Object.entries(e.items).map(([e,t])=>[e,{...t,props:t.props.filter(e=>!n.includes(e))}]))}}(r.groups,t);l.componentsActions.setOverridableProps(e,{...r,props:s,groups:c});const p=l.componentsSelectors.getCurrentComponent();for(const e of a)(0,l.trackComponentEvent)({action:"propertyRemoved",source:n,executedBy:n,component_uid:p?.uid,property_id:e.overrideKey,property_path:e.propKey,property_name:e.label,element_type:e.widgetType??e.elType})}function L({componentId:e,overrideKey:t,label:n,groupId:o}){const r=l.componentsSelectors.getOverridableProps(e);if(!r)return;const i=r.props[t];if(!i)return;const a=i.groupId,s=o??a,c={...i,label:n,groupId:s},p=function(e,t,n,o){if(n===o)return e;const r=function(e,t,n){const o=e.items[t];return o?{...e,items:{...e.items,[t]:{...o,props:o.props.filter(e=>e!==n)}}}:e}(e,n,t);return D(r,o,t)}(r.groups,t,a,s);return l.componentsActions.setOverridableProps(e,{...r,props:{...r.props,[t]:c},groups:p}),c}const R="__cpPropGroupHeaders__",M={EMPTY_NAME:(0,y.__)("Property name is required","elementor-pro"),DUPLICATE_NAME:(0,y.__)("Property name already exists","elementor-pro")};function U(e,t,n){const o=e.trim();if(!o)return{isValid:!1,errorMessage:M.EMPTY_NAME};const r=o.toLowerCase(),i=n?.trim().toLowerCase();return t.some(e=>{const t=e.trim().toLowerCase();return(!i||t!==i)&&t===r})?{isValid:!1,errorMessage:M.DUPLICATE_NAME}:{isValid:!0,errorMessage:null}}function z(){return z=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const t=U(a??"",o,n?.label);t.isValid?e({label:a??"",group:l}):m(t.errorMessage)},"data-testid":"overridable-prop-form"},h.createElement(_.Stack,{alignItems:"start",sx:{width:"268px",...r}},h.createElement(_.Stack,{direction:"row",alignItems:"center",py:1,px:1.5,sx:{columnGap:.5,borderBottom:"1px solid",borderColor:"divider",width:"100%",mb:1.5}},h.createElement(_.Typography,{variant:"caption",sx:{color:"text.primary",fontWeight:"500",lineHeight:1}},f)),h.createElement(_.Grid,{container:!0,gap:.75,alignItems:"start",px:1.5,mb:1.5},h.createElement(_.Grid,{item:!0,xs:12},h.createElement(_.FormLabel,{size:"tiny"},d)),h.createElement(_.Grid,{item:!0,xs:12},h.createElement(_.TextField,{name:d,size:B,fullWidth:!0,autoFocus:!0,placeholder:(0,y.__)("Enter value","elementor-pro"),value:a??"",onChange:e=>{const t=e.target.value;s(t);const r=U(t,o,n?.label);m(r.errorMessage)},error:Boolean(p),helperText:p}))),h.createElement(_.Grid,{container:!0,gap:.75,alignItems:"start",px:1.5,mb:1.5},h.createElement(_.Grid,{item:!0,xs:12},h.createElement(_.FormLabel,{size:"tiny"},u)),h.createElement(_.Grid,{item:!0,xs:12},h.createElement(_.Select,{name:u,size:B,fullWidth:!0,value:l??null,onChange:e=>c(e.target.value),displayEmpty:!0,renderValue:e=>e?i.find(({value:t})=>t===e)?.label??e:i[0].label},i.map(({label:e,...t})=>h.createElement(b.MenuListItem,z({key:t.value},t,{value:t.value??""}),e))))),h.createElement(_.Stack,{direction:"row",justifyContent:"flex-end",alignSelf:"end",mt:1.5,py:1,px:1.5},h.createElement(_.Button,{type:"submit",disabled:!a||Boolean(p),variant:"contained",color:"primary",size:"small"},v))))}var N=window.elementorV2.coreAdapterUtils;function $(){return $=Object.assign?Object.assign.bind():function(e){for(var t=1;th.createElement(_.UnstableSortableProvider,$({restrictAxis:!0,variant:"static",dragPlaceholderStyle:{opacity:"1"}},e)),K=({triggerClassName:e,...t})=>h.createElement(J,$({},t,{role:"button",className:`sortable-trigger ${e??""}`.trim(),"aria-label":"sort"}),h.createElement(E.GripVerticalIcon,{fontSize:"tiny"})),F=({children:e,id:t})=>h.createElement(_.UnstableSortableItem,{id:t,render:({itemProps:t,isDragged:n,triggerProps:o,itemStyle:r,triggerStyle:i,dropIndicationStyle:a,showDropIndication:s,isDragOverlay:l,isDragPlaceholder:c})=>h.createElement(_.Box,$({},t,{style:r,component:"div",role:"listitem",sx:{backgroundColor:l?"background.paper":void 0}}),e({isDragged:n,isDragPlaceholder:c,triggerProps:o,triggerStyle:i}),s&&h.createElement(X,{style:a}))}),H=(0,N.isCoreAtLeast)("4.1.0");function q({children:e,value:t,onChange:n}){return h.createElement(_.UnstableSortable,{mode:"multiple",restrictAxis:!0,dragPlaceholderStyle:{opacity:"1"},value:t,onChange:n},e)}function W({groupId:e,children:t}){return h.createElement(_.UnstableSortableGroup,{groupId:e},t)}function Y({id:e,children:t}){return h.createElement(_.UnstableSortableItem,{id:e},t)}const J=(0,_.styled)("div")(({theme:e})=>({position:"absolute",left:"-2px",top:"50%",transform:`translate( -${e.spacing(1.5)}, -50% )`,color:e.palette.action.active,cursor:"grab"})),X=(0,_.styled)(_.Box)` width: 100%; height: 1px; background-color: ${({theme:e})=>e.palette.text.primary}; `;function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.stopPropagation(),s(e.overrideKey)},"aria-label":(0,y.__)("Delete property","elementor-pro"),sx:{p:.25}},h.createElement(E.XIcon,{fontSize:"tiny"}))),h.createElement(_.Popover,Z({},m,{anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},PaperProps:{sx:{width:c.anchorEl?.getBoundingClientRect().width}}}),h.createElement(j,{onSubmit:e=>{l(e),c.close()},currentValue:e,groups:i,existingLabels:a,sx:{width:"100%"}})))}function ee(){return ee=Object.assign?Object.assign.bind():function(e){for(var t=1;t0,x=u&&w===e.id;return h.createElement(_.Box,ee({},o,{style:r,sx:{opacity:a?.5:1}}),h.createElement(_.Stack,{gap:1},h.createElement(_.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"}}},h.createElement(K,ee({triggerClassName:"group-sortable-trigger"},i)),h.createElement(_.Stack,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:2},x?h.createElement(_.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%"}},h.createElement(b.EditableField,ee({ref:d,as:_.Typography,variant:"caption",error:g??void 0,sx:{color:"text.primary",fontWeight:400,lineHeight:1.66}},f()))):h.createElement(b.EllipsisWithTooltip,{title:e.label,as:_.Typography,variant:"caption",sx:{color:"text.primary",fontWeight:400,lineHeight:1.66}}),h.createElement(_.IconButton,ee({className:"group-menu",size:"tiny",sx:{p:.25,visibility:x?"visible":void 0},"aria-label":(0,y.__)("Group actions","elementor-pro")},(0,_.bindTrigger)(m)),h.createElement(E.DotsVerticalIcon,{fontSize:"tiny"})))),h.createElement(W,{groupId:e.id},({setDroppableRef:e,isEmpty:o,items:r})=>h.createElement(_.List,{ref:e,sx:{p:0,display:"flex",flexDirection:"column",gap:1,...o&&{minHeight:40,backgroundColor:"action.hover",borderRadius:1}}},r.map(e=>{const o=t[String(e)];return o?h.createElement(Y,{key:String(e),id:e},({itemProps:e,itemStyle:r,triggerProps:i,triggerStyle:a,isDragPlaceholder:c})=>h.createElement(Q,{sortableItemProps:e,sortableItemStyle:r,prop:o,sortableTriggerProps:{...i,style:a},isDragPlaceholder:c,groups:n,existingLabels:Object.values(t).map(e=>e.label),onDelete:s,onUpdate:e=>l(o.overrideKey,e)})):null})))),h.createElement(_.Menu,ee({},(0,_.bindMenu)(m),{anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"}}),h.createElement(b.MenuListItem,{sx:{minWidth:"160px"},onClick:()=>{m.close(),v(e.id)}},h.createElement(_.Typography,{variant:"caption",sx:{color:"text.primary"}},(0,y.__)("Rename","elementor-pro"))),C?h.createElement(_.Tooltip,{title:(0,y.__)("To delete the group, first remove all the properties","elementor-pro"),placement:"right"},h.createElement("span",null,h.createElement(b.MenuListItem,{disabled:!0},h.createElement(_.Typography,{variant:"caption",sx:{color:"text.disabled"}},(0,y.__)("Delete","elementor-pro"))))):h.createElement(b.MenuListItem,{onClick:()=>{m.close(),c(e.id)}},h.createElement(_.Typography,{variant:"caption",sx:{color:"error.light"}},(0,y.__)("Delete","elementor-pro")))))}function ne({introductionRef:e}){const[t,n]=(0,h.useState)(!1);return h.createElement(h.Fragment,null,h.createElement(_.Stack,{alignItems:"center",justifyContent:"flex-start",height:"100%",color:"text.secondary",sx:{px:2.5,pt:10,pb:5.5},gap:1},h.createElement(E.ComponentPropListIcon,{fontSize:"large"}),h.createElement(_.Typography,{align:"center",variant:"subtitle2"},(0,y.__)("Add your first property","elementor-pro")),h.createElement(_.Typography,{align:"center",variant:"caption"},(0,y.__)("Make instances flexible while keeping design synced.","elementor-pro")),h.createElement(_.Typography,{align:"center",variant:"caption"},(0,y.__)("Select any element, then click + next to a setting to expose it.","elementor-pro")),h.createElement(_.Link,{variant:"caption",color:"secondary",sx:{textDecorationLine:"underline"},onClick:()=>n(!0)},(0,y.__)("Learn more","elementor-pro"))),h.createElement(x,{anchorRef:e,shouldShowIntroduction:t,onClose:()=>n(!1)}))}function oe(){return oe=Object.assign?Object.assign.bind():function(e){for(var t=1;t{t.stopPropagation(),i(e.overrideKey)},"aria-label":"Delete property",sx:{p:.25}},h.createElement(E.XIcon,{fontSize:"tiny"}))),h.createElement(_.Popover,oe({},c,{anchorOrigin:{vertical:"bottom",horizontal:"left"},transformOrigin:{vertical:"top",horizontal:"left"},PaperProps:{sx:{width:s.anchorEl?.getBoundingClientRect().width}}}),h.createElement(j,{onSubmit:e=>{a(e),s.close()},currentValue:e,groups:o,existingLabels:r,sx:{width:"100%"}})))}function ie(){return ie=Object.assign?Object.assign.bind():function(e){for(var t=1;tt[e]).filter(e=>Boolean(e)),m=(0,_.usePopupState)({variant:"popover",disableAutoFocus:!0}),{editableRef:d,isEditing:u,error:g,getEditableProps:f,setEditingGroupId:v,editingGroupId:w}=c,C=e.props.length>0,x=u&&w===e.id;return h.createElement(_.Box,{sx:{opacity:r?.5:1}},h.createElement(_.Stack,{gap:1},h.createElement(_.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"}}},h.createElement(K,ie({triggerClassName:"group-sortable-trigger"},o)),h.createElement(_.Stack,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:2},x?h.createElement(_.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%"}},h.createElement(b.EditableField,ie({ref:d,as:_.Typography,variant:"caption",error:g??void 0,sx:{color:"text.primary",fontWeight:400,lineHeight:1.66}},f()))):h.createElement(b.EllipsisWithTooltip,{title:e.label,as:_.Typography,variant:"caption",sx:{color:"text.primary",fontWeight:400,lineHeight:1.66}}),h.createElement(_.IconButton,ie({className:"group-menu",size:"tiny",sx:{p:.25,visibility:x?"visible":void 0},"aria-label":(0,y.__)("Group actions","elementor-pro")},(0,_.bindTrigger)(m)),h.createElement(E.DotsVerticalIcon,{fontSize:"tiny"})))),h.createElement(_.List,{sx:{p:0,display:"flex",flexDirection:"column",gap:1}},h.createElement(G,{value:e.props,onChange:i},p.map(e=>h.createElement(F,{key:e.overrideKey,id:e.overrideKey},({triggerProps:o,triggerStyle:r,isDragPlaceholder:i})=>h.createElement(re,{prop:e,sortableTriggerProps:{...o,style:r},isDragPlaceholder:i,groups:n,existingLabels:Object.values(t).map(e=>e.label),onDelete:a,onUpdate:t=>s(e.overrideKey,t)})))))),h.createElement(_.Menu,ie({},(0,_.bindMenu)(m),{anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"}}),h.createElement(b.MenuListItem,{sx:{minWidth:"160px"},onClick:()=>{m.close(),v(e.id)}},h.createElement(_.Typography,{variant:"caption",sx:{color:"text.primary"}},(0,y.__)("Rename","elementor-pro"))),h.createElement(_.Tooltip,{title:C?(0,y.__)("To delete the group, first remove all the properties","elementor-pro"):"",placement:"right"},h.createElement("span",null,h.createElement(b.MenuListItem,{onClick:()=>{m.close(),l(e.id)},disabled:C},h.createElement(_.Typography,{variant:"caption",sx:{color:C?"text.disabled":"error.light"}},(0,y.__)("Delete","elementor-pro")))))))}const se={EMPTY_NAME:(0,y.__)("Group name is required","elementor-pro"),DUPLICATE_NAME:(0,y.__)("Group name already exists","elementor-pro")};function le({currentComponentId:e,overridableProps:t,groups:n,onPropertyDelete:o,onPropertyUpdate:r}){const[i,a]=(0,h.useState)(0),s=(0,h.useMemo)(()=>{const e=n.map(e=>e.id),t=Object.fromEntries(n.map(e=>[e.id,[...e.props]]));return{[R]:e,...t}},[n]);return{sortableKey:`${n.length}:${i}`,sortableValue:s,handlePropertyDelete:e=>{o(e),a(e=>e+1)},handlePropertyUpdate:(e,n)=>{const o=t.props[e],i=!!o&&n.group!==o.groupId;r(e,n),i&&a(e=>e+1)},handleSortableChange:t=>{(function(e,t){const n=l.componentsSelectors.getOverridableProps(t);if(!n)return;const o=e[R]??[],{items:r,props:i}=function(e,t){const n={...t.groups.items},o={...t.props};for(const[t,r]of Object.entries(e)){if(t===R||!Array.isArray(r))continue;const e=[...new Set(r)],i=n[t];i&&(n[t]={...i,props:e});for(const n of e){const e=o[n];e&&e.groupId!==t&&(o[n]={...e,groupId:t})}}return{items:n,props:o}}(e,n);l.componentsActions.setOverridableProps(t,{...n,props:i,groups:{items:r,order:o.filter(e=>e in r)}}),(0,p.setDocumentModifiedStatus)(!0)})(t,e),function(e){return Object.entries(e).some(([e,t])=>e!==R&&Array.isArray(t)&&t.length!==new Set(t).size)}(t)&&a(e=>e+1)}}}const ce="New group";function pe({onClose:e}){const t=(0,l.useCurrentComponentId)(),n=(0,l.useSanitizeOverridableProps)(t),[o,r]=(0,h.useState)(!1),i=(0,h.useRef)(null),a=function(){const[e,t]=(0,h.useState)(null),n=(0,l.useCurrentComponentId)(),o=(0,l.useOverridableProps)(n),r=o?.groups?.items??{},i=e?r[e]:null,{ref:a,openEditMode:s,isEditing:c,error:m,getProps:d}=(0,b.useEditable)({value:i?.label??"",onSubmit:t=>{if(!e||!n)throw new Error((0,y.__)("Group ID or component ID is missing","elementor-pro"));!function({componentId:e,groupId:t,label:n}){const o=l.componentsSelectors.getOverridableProps(e);if(!o)return!1;if(!o.groups.items[t])return!1;const r=function(e,t,n){const o=e.items[t];return o?{...e,items:{...e.items,[t]:{...o,label:n}}}:e}(o.groups,t,n);l.componentsActions.setOverridableProps(e,{...o,groups:r})}({componentId:n,groupId:e,label:t}),(0,p.setDocumentModifiedStatus)(!0)},validation:t=>function(e,t){const n=e.trim();return n?Object.values(t).some(e=>e.label===n)?se.DUPLICATE_NAME:"":se.EMPTY_NAME}(t,Object.fromEntries(Object.entries(r).filter(([t])=>t!==e)))||null});return{editableRef:a,isEditing:c,error:m,getEditableProps:d,setEditingGroupId:e=>{t(e),s()},editingGroupId:e}}(),s=(0,h.useMemo)(()=>n?n.groups.order.map(e=>n.groups.items[e]??null).filter(Boolean):[],[n]),c=(0,h.useMemo)(()=>s.map(e=>({value:e.id,label:e.label})),[s]);if(!t||!n)return null;const m=!(s.length>0||o),d=e=>{A({componentId:t,propKey:e,executedBy:"user"}),(0,p.setDocumentModifiedStatus)(!0)},u=(e,n)=>{L({componentId:t,overrideKey:e,label:n.label,groupId:n.group}),(0,p.setDocumentModifiedStatus)(!0)},f=e=>{!function({componentId:e,groupId:t}){const n=l.componentsSelectors.getOverridableProps(e);if(!n)return!1;const o=n.groups.items[t];if(!o||o.props.length>0)return!1;const r=function(e,t){const{[t]:n,...o}=e.items;return{items:o,order:e.order.filter(e=>e!==t)}}(n.groups,t);l.componentsActions.setOverridableProps(e,{...n,groups:r})}({componentId:t,groupId:e}),(0,p.setDocumentModifiedStatus)(!0)};return h.createElement(h.Fragment,null,h.createElement(g.PanelHeader,{sx:{justifyContent:"start",pl:1.5,pr:1,py:1},"data-testid":"component-property-panel-header"},h.createElement(_.Stack,{direction:"row",alignItems:"center",gap:.5,flexGrow:1},h.createElement(E.ComponentPropListIcon,{fontSize:"tiny"}),h.createElement(g.PanelHeaderTitle,{variant:"subtitle2"},(0,y.__)("Component properties","elementor-pro"))),!m&&h.createElement(_.Tooltip,{title:(0,y.__)("Add new group","elementor-pro")},h.createElement(_.IconButton,{size:"tiny","aria-label":(0,y.__)("Add new group","elementor-pro"),onClick:()=>{if(o)return;const e=(0,I.generateUniqueId)("group"),n=function(e){const t=new Set(e.map(e=>e.label));if(!t.has(ce))return ce;let n=1,o=`${ce}-${n}`;for(;t.has(o);)n++,o=`${ce}-${n}`;return o}(s);!function({componentId:e,groupId:t,label:n,executedBy:o}){const r=l.componentsSelectors.getCurrentComponent(),i=l.componentsSelectors.getOverridableProps(e);if(!i)return;const a={id:t,label:n,props:[]};l.componentsActions.setOverridableProps(e,{...i,groups:{...i.groups,items:{...i.groups.items,[t]:a},order:[t,...i.groups.order]}}),(0,l.trackComponentEvent)({action:"propertiesGroupCreated",source:o,executedBy:o,component_uid:r?.uid,group_name:n})}({componentId:t,groupId:e,label:n,executedBy:"user"}),(0,p.setDocumentModifiedStatus)(!0),r(!1),a.setEditingGroupId(e)}},h.createElement(E.FolderPlusIcon,{fontSize:"tiny"}))),h.createElement(_.Tooltip,{title:(0,y.__)("Close panel","elementor-pro")},h.createElement(_.IconButton,{ref:i,size:"tiny","aria-label":(0,y.__)("Close panel","elementor-pro"),onClick:e},h.createElement(E.XIcon,{fontSize:"tiny"})))),h.createElement(_.Divider,null),h.createElement(g.PanelBody,null,m?h.createElement(ne,{introductionRef:i}):h.createElement(_.List,{sx:{p:2,display:"flex",flexDirection:"column",gap:2}},H?h.createElement(de,{currentComponentId:t,overridableProps:n,groups:s,allGroupsForSelect:c,groupLabelEditable:a,setIsAddingGroup:r,onPropertyDelete:d,onPropertyUpdate:u,onGroupDelete:f}):h.createElement(me,{currentComponentId:t,overridableProps:n,groups:s,allGroupsForSelect:c,groupLabelEditable:a,setIsAddingGroup:r,onPropertyDelete:d,onPropertyUpdate:u,onGroupDelete:f}))))}function me({currentComponentId:e,overridableProps:t,groups:n,allGroupsForSelect:o,groupLabelEditable:r,setIsAddingGroup:i,onPropertyDelete:a,onPropertyUpdate:s,onGroupDelete:c}){const m=t.groups.order;return h.createElement(G,{value:m,onChange:t=>{!function({componentId:e,newOrder:t}){const n=l.componentsSelectors.getOverridableProps(e);n&&l.componentsActions.setOverridableProps(e,{...n,groups:{...n.groups,order:t}})}({componentId:e,newOrder:t}),(0,p.setDocumentModifiedStatus)(!0)}},n.map(n=>h.createElement(F,{key:n.id,id:n.id},({triggerProps:m,triggerStyle:d,isDragPlaceholder:u})=>h.createElement(ae,{group:n,props:t.props,allGroups:o,allGroupsRecord:t.groups.items,sortableTriggerProps:{...m,style:d},isDragPlaceholder:u,setIsAddingGroup:i,onPropsReorder:t=>{return o=n.id,function({componentId:e,groupId:t,newPropsOrder:n}){const o=l.componentsSelectors.getOverridableProps(e);if(!o)return;const r=o.groups.items[t];r&&l.componentsActions.setOverridableProps(e,{...o,groups:{...o.groups,items:{...o.groups.items,[t]:{...r,props:n}}}})}({componentId:e,groupId:o,newPropsOrder:t}),void(0,p.setDocumentModifiedStatus)(!0);var o},onPropertyDelete:a,onPropertyUpdate:s,editableLabelProps:r,onGroupDelete:c}))))}function de({currentComponentId:e,overridableProps:t,groups:n,allGroupsForSelect:o,groupLabelEditable:r,onPropertyDelete:i,onPropertyUpdate:a,onGroupDelete:s}){const{sortableKey:l,sortableValue:c,handlePropertyDelete:p,handlePropertyUpdate:m,handleSortableChange:d}=le({currentComponentId:e,overridableProps:t,groups:n,onPropertyDelete:i,onPropertyUpdate:a});return h.createElement(q,{key:l,value:c,onChange:d},h.createElement(W,{groupId:R},({setDroppableRef:e,items:n})=>h.createElement(_.Stack,{ref:e,direction:"column",sx:{width:"100%",gap:2}},n.map(e=>{const n=String(e),i=t.groups.items[n];return i?h.createElement(Y,{key:n,id:e},({itemProps:e,itemStyle:n,triggerProps:a,triggerStyle:l,isDragPlaceholder:c})=>h.createElement(te,{sortableItemProps:e,sortableItemStyle:n,group:i,props:t.props,allGroups:o,sortableTriggerProps:{...a,style:l},isDragPlaceholder:c,onPropertyDelete:p,onPropertyUpdate:m,editableLabelProps:r,onGroupDelete:s})):null}))))}const{panel:ue,usePanelActions:ge}=(0,g.__createPanel)({id:"component-properties-panel",component:function(){const{close:e}=ge(),{open:t}=(0,m.usePanelActions)();return h.createElement(b.ThemeProvider,null,h.createElement(_.ErrorBoundary,{fallback:h.createElement(fe,null)},h.createElement(g.Panel,{"data-testid":"component-properties-panel"},h.createElement(pe,{onClose:()=>{e(),t()}}))))}}),fe=()=>h.createElement(_.Box,{role:"alert",sx:{minHeight:"100%",p:2}},h.createElement(_.Alert,{severity:"error",sx:{mb:2,maxWidth:400,textAlign:"center"}},h.createElement("strong",null,(0,y.__)("Something went wrong","elementor-pro")))),ye=h.forwardRef(({overridablePropsCount:e,onClick:t},n)=>{const o=function(e){const t=(0,h.useRef)(e);return(0,h.useEffect)(()=>{t.current=e},[e]),t.current}(e),r=0===o&&1===e;return h.createElement(he,{ref:n,color:"primary",key:e,invisible:0===e,animate:r,anchorOrigin:{vertical:"top",horizontal:"right"},badgeContent:h.createElement(_.Box,{sx:{animation:r?"none":`${be} 300ms ease-out`}},e),"data-testid":"component-panel-header-properties-badge"},h.createElement(_.Tooltip,{title:(0,y.__)("Component properties","elementor-pro")},h.createElement(_.ToggleButton,{value:"exposed properties",size:"tiny",onClick:t,"aria-label":(0,y.__)("Component properties","elementor-pro")},h.createElement(E.ComponentPropListIcon,{fontSize:"tiny"}))))}),he=(0,_.styled)(_.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?`${ve} 300ms ease-out`:"none"}})),ve=_.keyframes` 0% { transform: scale(0) translate(50%, 50%); opacity: 0; } 70% { transform: scale(1.1) translate(50%, -50%); opacity: 1; } 100% { transform: scale(1) translate(50%, -50%); opacity: 1; } `,be=_.keyframes` from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } `,Ee=()=>{const{id:e,uid:t}=(0,l.useCurrentComponent)()??{id:null,uid:null},n=(0,l.useSanitizeOverridableProps)(e),o=C(),r=function(){const e=(0,w.__getState)()[l.SLICE_NAME].path,{instanceTitle:t}=e.at(-1)??{};if(t)return t;const n=(0,p.getV1DocumentsManager)().getCurrent();return n?.container?.settings?.get("post_title")??""}(),[i,a]=(0,v.useSuppressedMessage)("components-properties-introduction"),[s,c]=h.useState(!i),{open:m}=ge(),d=n?Object.keys(n.props).length:0,u=h.useRef(null);return e?h.createElement(_.Box,{"data-testid":"component-panel-header"},h.createElement(g.PanelHeader,{sx:{justifyContent:"start",px:2}},h.createElement(_.Tooltip,{title:(0,y.__)("Back","elementor-pro")},h.createElement(_.IconButton,{size:"tiny",onClick:o,"aria-label":(0,y.__)("Back","elementor-pro")},h.createElement(E.ArrowLeftIcon,{fontSize:"tiny"}))),h.createElement(E.ComponentsFilledIcon,{fontSize:"tiny",stroke:"currentColor"}),h.createElement(b.EllipsisWithTooltip,{title:r,as:_.Typography,variant:"caption",sx:{fontWeight:500,flexGrow:1}}),h.createElement(ye,{overridablePropsCount:d,ref:u,onClick:()=>{m(),(0,l.trackComponentEvent)({action:"propertiesPanelOpened",source:"user",executedBy:"user",component_uid:t,properties_count:d})}})),h.createElement(_.Divider,null),h.createElement(x,{anchorRef:u,shouldShowIntroduction:s,onClose:()=>{a(),c(!1)}})):null};var we=window.elementorV2.editorCanvas,_e=window.elementorV2.editorNotifications;var Ce=window.elementorV2.schema;const xe=Ce.z.string().trim().max(50,(0,y.__)("Component name is too long. Please keep it under 50 characters.","elementor-pro")),Ie=e=>Ce.z.object({componentName:xe.refine(t=>!e.includes(t),{message:(0,y.__)("Component name already exists","elementor-pro")})}),Pe=e=>{const t=Ie(e);return t.extend({componentName:t.shape.componentName.refine(e=>e.length>0,{message:(0,y.__)("Component name is required.","elementor-pro")}).refine(e=>e.length>=2,{message:(0,y.__)("Component name is too short. Please enter at least 2 characters.","elementor-pro")})})},Se=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}});function Te({open:e,onClose:t,onConfirm:n}){return h.createElement(b.ConfirmationDialog,{open:e,onClose:t},h.createElement(b.ConfirmationDialog.Title,null,(0,y.__)("Delete this component?","elementor-pro")),h.createElement(b.ConfirmationDialog.Content,null,h.createElement(b.ConfirmationDialog.ContentText,null,(0,y.__)("Existing instances on your pages will remain functional. You will no longer find this component in your list.","elementor-pro"))),h.createElement(b.ConfirmationDialog.Actions,{onClose:t,onConfirm:n}))}function Oe(){return Oe=Object.assign?Object.assign.bind():function(e){for(var t=1;t((e,t)=>{l.componentsActions.rename(e,t),(0,p.setDocumentModifiedStatus)(!0),function(e){const t=function(){const e=(0,p.getV1DocumentsManager)();return e?.getCurrent()?.container}();if(!t)return;const n=function(e,t){return(0,P.getAllDescendants)(e).filter(e=>{const n=e.model.get("widgetType"),o=e.model.get("editor_settings");return n===l.COMPONENT_WIDGET_TYPE&&o?.component_uid===t})}(t,e);n.forEach(e=>{e.model.trigger?.("title_external_change")})}(e)})(e.uid,t),validation:Ae}),w=Se(e),C=(0,_.usePopupState)({variant:"popover",disableAutoFocus:!0});return h.createElement(Re,{isAnimating:c},h.createElement(b.WarningInfotip,{open:Boolean(f),text:f??"",placement:"bottom",width:t.current?.getBoundingClientRect().width,offset:[0,-15]},h.createElement(l.ComponentItem,{ref:t,component:e,disabled:s,draggable:!s,onDragStart:e=>(0,we.startDragElementFromPanel)(w,e),onDragEnd:()=>{(0,l.loadComponentsAssets)([w]),(0,we.endDragElementFromPanel)()},onClick:()=>{De(w)},isEditing:u,error:f,nameSlot:h.createElement(l.ComponentName,{name:e.name,editable:{ref:d,isEditing:u,getProps:v}}),endSlot:m?h.createElement(_.IconButton,Oe({size:"tiny"},(0,_.bindTrigger)(C),{"aria-label":"More actions"}),h.createElement(E.DotsVerticalIcon,{fontSize:"tiny"})):void 0})),m&&h.createElement(_.Menu,Oe({},(0,_.bindMenu)(C),{anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"}}),i&&h.createElement(b.MenuListItem,{sx:{minWidth:"160px"},primaryTypographyProps:{variant:"caption",color:"text.primary"},onClick:()=>{C.close(),g()}},(0,y.__)("Rename","elementor-pro")),a&&h.createElement(b.MenuListItem,{sx:{minWidth:"160px"},primaryTypographyProps:{variant:"caption",color:"error.light"},onClick:()=>{r(!0),C.close()}},(0,y.__)("Delete","elementor-pro"))),h.createElement(Te,{open:o,onClose:()=>{r(!1)},onConfirm:()=>{if(!e.id)throw new Error("Component ID is required");var t,n;r(!1),t=e.id,n=e.name,l.componentsActions.archive(t),(0,p.setDocumentModifiedStatus)(!0),(0,_e.notify)(((e,t)=>({type:"success",message:(0,y.__)("Successfully deleted component %s","elementor-pro").replace("%s",t),id:`success-archived-components-notification-${e}`}))(t,n))}}))}const De=e=>{const{container:t,options:n}=(()=>{const e=(0,P.getCurrentDocumentContainer)(),t=function(){const e=(0,P.getSelectedElements)();if(1===e.length)return(0,P.getContainer)(e[0].id)}();let n,o;if(t)switch(t.model.get("elType")){case"widget":{n=t?.parent;const e=t.view?._index??-1;e>-1&&(o={at:e+1});break}case"section":n=t?.children?.[0];break;default:n=t}return{container:n??e,options:o}})();if(!t)throw new Error("Can't find container to drop new component instance at");(0,l.loadComponentsAssets)([e]),(0,P.dropElement)({containerId:t.id,model:e,options:{...n,useHistory:!1,scrollIntoView:!0}})},Ae=e=>{const t=function(e){const t=l.componentsSelectors.getComponents()?.map(({name:e})=>e)??[],n=Pe(t).safeParse({componentName:e.toLowerCase()});if(n.success)return{isValid:!0,errorMessage:null};const o=n.error.format();return{isValid:!1,errorMessage:o.componentName?._errors[0]??o._errors[0]}}(e);return t.errorMessage?t.errorMessage:null},Le=_.keyframes` 0%, 100% { opacity: 0.4; } 50% { opacity: 0.8; } `,Re=({children:e,isAnimating:t})=>h.createElement(_.Stack,{sx:{animation:t?`${Le} 1.5s ease-in-out infinite`:void 0}},e);var Me=window.elementorV2.events;const Ue=()=>{const{canCreate:e}=(0,l.useComponentsPermissions)();return e&&(0,u.isAngieAvailable)()?h.createElement(_.Box,{sx:{position:"sticky",bottom:0,backgroundColor:"background.default",px:2,pb:2}},h.createElement(_.Stack,{gap:1},h.createElement(_.Divider,null),h.createElement(_.Stack,{direction:"row",alignItems:"center",justifyContent:"space-between"},h.createElement(_.Typography,{variant:"caption",color:"text.secondary"},(0,y.__)("Create components with Angie","elementor-pro")),h.createElement(_.Button,{variant:"text",size:"small",startIcon:h.createElement(E.AIIcon,{fontSize:"small"}),onClick:()=>{(0,Me.trackEvent)({eventName:"angie_cta_clicked",entry_point:"components_tab",has_angie_installed:!0}),(0,u.sendPromptToAngie)("Tell Angie what component you want to build")},sx:{color:"#c00bb9",px:"5px",py:"4px",minWidth:"auto"}},(0,y.__)("Create","elementor-pro"))))):null},ze=()=>h.createElement(_.Box,{sx:{px:2.5,pb:2,position:"sticky",bottom:0,zIndex:1e3}},h.createElement(_.Alert,{variant:"standard",color:"promotion",icon:h.createElement(E.CrownFilledIcon,{fontSize:"tiny"}),"aria-label":"expired-components-promotion",action:h.createElement(_.AlertAction,{color:"promotion",variant:"contained",href:"https://go.elementor.com/renew-license-components-exist-footer/",target:"_blank",rel:"noopener noreferrer"},(0,y.__)("Upgrade Now","elementor-pro")),sx:{maxWidth:296}},h.createElement(_.Box,{sx:{gap:.5,display:"flex",flexDirection:"column"}},h.createElement(_.AlertTitle,null,(0,y.__)("Create New Components","elementor-pro")),h.createElement(_.Typography,{variant:"caption"},(0,y.__)("Your Pro subscription has expired. Renew to create new components.","elementor-pro"))))),Be={fontSize:"0.875rem !important",fontWeight:"500 !important"},Ve=()=>h.createElement(_.Stack,{alignItems:"center",justifyContent:"start",sx:{px:2,pt:4},gap:1.75,overflow:"hidden"},h.createElement(E.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),h.createElement(_.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:Be},(0,y.__)("Create Reusable Components","elementor-pro")),h.createElement(_.Typography,{align:"center",variant:"caption",color:"text.secondary"},(0,y.__)("Create design elements that sync across your entire site.","elementor-pro")),h.createElement(b.CtaButton,{size:"small",href:"https://go.elementor.com/renew-license-components/"}));function je({open:e,onClose:t,prompt:n}){const[o,r]=(0,h.useState)("idle"),i=()=>{"installing"!==o&&(r("idle"),t())};return h.createElement(_.Dialog,{fullWidth:!0,maxWidth:"md",open:e,onClose:i},h.createElement(_.IconButton,{"aria-label":(0,y.__)("Close","elementor-pro"),onClick:i,sx:{position:"absolute",right:8,top:8,zIndex:1}},h.createElement(E.XIcon,null)),h.createElement(_.DialogContent,{sx:{p:0,overflow:"hidden"}},h.createElement(_.Stack,{direction:"row",sx:{height:400}},h.createElement(_.Image,{sx:{height:"100%",aspectRatio:"1 / 1",objectFit:"cover",objectPosition:"right center"},src:"https://assets.elementor.com/packages/v1/images/angie-components-promotion.svg"}),h.createElement(_.Stack,{gap:2,justifyContent:"center",p:4},h.createElement(_.Typography,{variant:"h6",fontWeight:600,whiteSpace:"nowrap"},"error"===o?(0,y.__)("Installation failed","elementor-pro"):(0,y.__)("Install Angie to build components","elementor-pro")),h.createElement(_.Typography,{variant:"body2",color:"text.secondary"},"error"===o?(0,y.__)("We couldn't install Angie automatically. Click below to install it manually.","elementor-pro"):(0,y.__)("Angie lets you create components, widgets, sections, and code using simple instructions.","elementor-pro")),"error"!==o&&h.createElement(_.Typography,{variant:"body2",color:"text.secondary"},(0,y.__)("Install once to start building directly inside the editor.","elementor-pro")),h.createElement(_.Stack,{direction:"row",justifyContent:"flex-end",sx:{mt:2}},"error"===o?h.createElement(_.Button,{variant:"contained",color:"accent",onClick:()=>{(0,u.redirectToInstallation)(n)}},(0,y.__)("Install Manually","elementor-pro")):h.createElement(_.Button,{variant:"contained",color:"accent",onClick:async()=>{r("installing"),(0,Me.trackEvent)({eventName:"angie_install_started",trigger_source:"components_tab"}),(await(0,u.installAngiePlugin)()).success?(0,u.redirectToAppAdmin)(n):r("error")},disabled:"installing"===o,startIcon:"installing"===o?h.createElement(_.CircularProgress,{size:18,color:"inherit"}):void 0},"installing"===o?(0,y.__)("Installing…","elementor-pro"):(0,y.__)("Install Angie","elementor-pro")))))))}const Ne=({open:e,onClose:t,onConfirm:n,anchorRef:o})=>{const r=o?.current,i=r?{popper:{anchorEl:r,modifiers:[{name:"offset",options:{offset:[-40,8]}}]}}:void 0;return h.createElement(_.Infotip,{placement:"right-start",content:h.createElement($e,{onClose:e=>{e.stopPropagation(),t()},onConfirm:n}),open:e,slotProps:i},h.createElement("span",null))};function $e({onClose:e,onConfirm:t}){return h.createElement(_.ClickAwayListener,{disableReactTree:!0,mouseEvent:"onMouseDown",touchEvent:"onTouchStart",onClickAway:e},h.createElement(_.Card,{elevation:0,sx:{width:296,borderRadius:"4px"}},h.createElement(_.CardHeader,{title:h.createElement(_.Box,{sx:{display:"flex",alignItems:"center",gap:1}},h.createElement(_.Typography,{variant:"subtitle2"},(0,y.__)("Meet Angie","elementor-pro")),h.createElement(_.Chip,{label:(0,y.__)("New","elementor-pro"),size:"small",sx:{height:24,fontSize:"13px",backgroundColor:"#ebf2fe",color:"#1945a4",borderRadius:"1000px"}})),action:h.createElement(_.CloseButton,{slotProps:{icon:{fontSize:"tiny"}},onClick:e}),sx:{py:1,px:2}}),h.createElement(_.Box,{sx:{position:"relative",width:"100%",height:148}},h.createElement(_.CardMedia,{component:"img",image:"https://assets.elementor.com/packages/v1/images/angie-components-promotion.svg",alt:"",sx:{width:"100%",height:"100%",objectFit:"cover"}}),h.createElement(_.Box,{sx:{position:"absolute",inset:0,backgroundColor:"rgba(255, 0, 191, 0.6)",pointerEvents:"none"}})),h.createElement(_.CardContent,{sx:{px:2,py:1}},h.createElement(_.Typography,{variant:"body2",color:"text.secondary"},(0,y.__)("Build components using simple instructions.","elementor-pro"))),h.createElement(_.CardActions,{sx:{justifyContent:"flex-end",px:2,pb:1.5,pt:1}},h.createElement(_.Button,{variant:"contained",size:"small",onClick:t,sx:{backgroundColor:"#f0abfc",color:"#0c0d0e","&:hover":{backgroundColor:"#e879f9"}}},(0,y.__)("Start building","elementor-pro")))))}const Ge="Tell Angie what component you want to build",Ke={fontSize:"0.875rem !important",fontWeight:"500 !important"},Fe=()=>{const{canCreate:e}=(0,l.useComponentsPermissions)(),{shouldShowIntro:t,suppressIntro:n}=(()=>{const[e,t]=(0,v.useSuppressedMessage)("angie-components-intro");return{shouldShowIntro:!e,suppressIntro:t}})(),[o,r]=(0,h.useState)(!1),[i,a]=(0,h.useState)(!1),s=(0,h.useRef)(null),c=navigator.platform.toUpperCase().indexOf("MAC")>=0?"Cmd":"Ctrl";return h.createElement(_.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4},gap:1,overflow:"hidden"},h.createElement(_.Stack,{alignItems:"center",gap:1.75},h.createElement(E.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),h.createElement(_.Stack,{alignItems:"center",gap:1.75},h.createElement(_.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:Ke},(0,y.__)("Create your first component","elementor-pro")),h.createElement(_.Typography,{align:"center",variant:"caption",color:"text.tertiary"},e?`${(0,y.__)("To create, press","elementor-pro")} ${c}+ Shift + K ${(0,y.__)("on div-block or flexbox.","elementor-pro")}`:(0,y.__)("With your current role, you cannot create components. Contact an administrator to create one.","elementor-pro")))),e&&(!!(0,u.isAngieAvailable)()||!!window.elementor?.config?.user?.is_administrator)&&h.createElement(_.Stack,{alignItems:"center",gap:1,width:"100%"},h.createElement(_.Typography,{variant:"subtitle2",color:"text.primary",sx:{py:.5,fontWeight:500}},(0,y.__)("Or","elementor-pro")),h.createElement(_.Stack,{alignItems:"center",gap:1},h.createElement(_.Typography,{align:"center",variant:"caption",color:"text.tertiary"},(0,y.__)("Create a custom component with Angie","elementor-pro")),h.createElement(_.Link,{ref:s,component:"button",variant:"caption",onClick:()=>{const e=(0,u.isAngieAvailable)();(0,Me.trackEvent)({eventName:"angie_cta_clicked",entry_point:"components_tab",has_angie_installed:e}),e?(0,u.isAngieSidebarOpen)()?(0,u.sendPromptToAngie)(Ge):t?r(!0):(0,u.sendPromptToAngie)(Ge):a(!0)},sx:{display:"flex",alignItems:"center",padding:.5,gap:.5,color:"#c00bb9",textDecoration:"none","&:hover":{textDecoration:"underline"}}},h.createElement(E.AIIcon,{sx:{fontSize:16}}),(0,y.__)("Create component","elementor-pro")),h.createElement(Ne,{open:o,onClose:()=>{r(!1)},onConfirm:()=>{n(),r(!1),(0,u.sendPromptToAngie)(Ge)},anchorRef:s}))),h.createElement(_.Stack,{alignItems:"center",gap:.5,sx:{mt:"auto",width:"100%"}},h.createElement(_.Divider,{sx:{width:"100%",mb:2}}),h.createElement(_.Typography,{align:"center",variant:"caption",color:"text.tertiary"},(0,y.__)("Components are reusable elements that sync across your site.","elementor-pro")),h.createElement(_.Link,{href:"http://go.elementor.com/components-guide-article",target:"_blank",rel:"noopener noreferrer",variant:"caption",color:"info.main"},(0,y.__)("Learn more","elementor-pro"))),h.createElement(je,{open:i,onClose:()=>{a(!1)},prompt:Ge}))},He=()=>h.createElement(b.ThemeProvider,null,h.createElement(l.SearchProvider,{localStorageKey:"elementor-components-search"},h.createElement(qe,null))),qe=()=>{const{components:e,isLoading:t}=(0,l.useComponents)(),n=!t&&e.length>0;return h.createElement(h.Fragment,null,n&&h.createElement(l.ComponentSearch,null),h.createElement(Ye,null))},We="components-empty-state-full-height",Ye=()=>{const{isLoading:e}=(0,l.useComponents)(),{components:t,isLoading:o,searchValue:r}=(0,l.useFilteredComponents)(),{data:i=!1,isPending:a}=(0,n.useIsLicenseExpired)();if((0,h.useLayoutEffect)(()=>{let e=document.getElementById(We);return e||(e=document.createElement("style"),e.id=We,e.textContent="\n#elementor-panel-page-elements {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n}\n\n#elementor-panel-elements {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n}\n\n#elementor-panel-elements-wrapper {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n}\n",document.head.appendChild(e)),()=>{document.getElementById(We)?.remove()}},[]),o||e||a)return h.createElement(l.LoadingComponents,null);const s=!t?.length,c=r.length>0;return s?c?h.createElement(l.EmptySearchResult,null):i?h.createElement(Ve,null):h.createElement(Fe,null):h.createElement(_.Stack,{justifyContent:"space-between",sx:{flex:1,minHeight:0}},h.createElement(_.List,{sx:{display:"flex",flexDirection:"column",gap:1,px:2}},t.map(e=>h.createElement(ke,{key:e.uid,component:e}))),i?h.createElement(ze,null):h.createElement(Ue,null))};function Je(){const{canEdit:e}=(0,l.useComponentsPermissions)(),t=(0,l.useInstancePanelData)();if(!t)return null;const{componentId:n,component:o,overrides:r,overridableProps:i,groups:a,isEmpty:s,componentInstanceId:c}=t,p=(0,y.__)("Edit %s","elementor-pro").replace("%s",o.name),m=()=>(0,l.switchToComponent)(n,c),d=h.createElement(_.Stack,{direction:"row",gap:.5},h.createElement(l.DetachAction,{componentInstanceId:c,componentId:n}),e?h.createElement(l.EditComponentAction,{label:p,onClick:m,icon:E.PencilIcon}):null);return h.createElement(_.Box,{"data-testid":"instance-editing-panel",sx:{height:"100%"}},h.createElement(l.ComponentInstanceProvider,{componentId:n,overrides:r,overridableProps:i},h.createElement(l.InstancePanelHeader,{componentName:o.name,actions:d}),h.createElement(l.InstancePanelBody,{groups:a,isEmpty:s,emptyState:h.createElement(l.InstanceEmptyState,{onEditComponent:e?m:void 0}),componentInstanceId:c})))}function Xe(){return Xe=Object.assign?Object.assign.bind():function(e){for(var t=1;t!e.id||e.id!==o);if(!d)return null;if(!r?.override_key)throw new Error("Override key is required");const f="e-component"===n.key,y=u?.props?.[r.override_key],v=n.propsSchema[i],b=(y?(0,l.getPropTypeForComponentOverride)(y):void 0)??v;if(!b)return null;const E=(0,m.createTopLevelObjectType)({schema:{[i]:b}}),w=f?(r.origin_value?.value).override_value:r.origin_value,_=s?{[i]:s}:void 0;return h.createElement(l.OverridablePropProvider,{value:r},h.createElement(c.PropProvider,Xe({},p,{propType:E,setValue:e=>{const t={...r,origin_value:e[i]};a(t),f||(0,l.updateOverridableProp)(d,t,y?.originPropFields)},value:{[i]:w},placeholder:_}),h.createElement(c.PropKeyProvider,{bind:i},h.createElement(c.ControlReplacementsProvider,{replacements:g},h.createElement(Qe,{OriginalControl:e,props:t})))))}function Qe({OriginalControl:e,props:t}){const{ControlToRender:n,isReplaced:o}=(0,c.useControlReplacement)(e);if(o){const o=n;return h.createElement(o,Xe({},t,{OriginalControl:e}))}return h.createElement(e,t)}function et({componentId:e,overrideKey:t,elementId:n,label:o,groupId:r,propKey:i,elType:a,widgetType:s,originValue:c,originPropFields:p,executedBy:m}){const d=l.componentsSelectors.getOverridableProps(e);if(!d)throw new Error(`Component not found for componentId: ${e}`);const u=Object.values(d.props).filter(e=>e.elementId===n&&e.propKey===i),{groups:g,groupId:f}=function(e,t){return t&&e.items[t]?{groups:e,groupId:t}:!t&&e.order.length>0?{groups:e,groupId:e.order[0]}:function(e,t){const n=t||(0,I.generateUniqueId)("group"),o=(0,y.__)("Default","elementor-pro");return{groups:{...e,items:{...e.items,[n]:{id:n,label:o,props:[]}},order:[...e.order,n]},groupId:n}}(e,t)}(d.groups,r??void 0),h={overrideKey:t||(0,I.generateUniqueId)("prop"),label:o,elementId:n,propKey:i,widgetType:s,elType:a,originValue:c,groupId:f,originPropFields:p},v=function(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))}}}({...d,groups:g},u),b={...v.props,[h.overrideKey]:h};let E=D(v.groups,f,h.overrideKey);E=function(e,t){return e.order.includes(t)?e:{...e,order:[...e.order,t]}}(E,f),l.componentsActions.setOverridableProps(e,{props:b,groups:E});const w=l.componentsSelectors.getCurrentComponent();return(0,l.trackComponentEvent)({action:"propertyExposed",source:m,executedBy:m,component_uid:w?.uid,property_id:h.overrideKey,property_path:i,property_name:o,element_type:s??a}),h}function tt(){return tt=Object.assign?Object.assign.bind():function(e){for(var t=1;t svg { position: absolute; top: 50%; left: 50%; transform: translate( -50%, -50% ); width: 10px; height: 10px; fill: ${({theme:e})=>e.palette.primary.contrastText}; stroke: ${({theme:e})=>e.palette.primary.contrastText}; stroke-width: 2px; } `,rt=(0,_.styled)(_.Box)` position: relative; display: flex; align-items: center; justify-content: center; cursor: pointer; width: 16px; height: 16px; margin-inline: ${({theme:e})=>e.spacing(.5)}; &:before { content: ''; display: block; position: absolute; top: 50%; left: 50%; transform: translate( -50%, -50% ) rotate( 45deg ); width: 5px; height: 5px; border-radius: 1px; background-color: ${({theme:e})=>e.palette.primary.main}; transition: all 0.1s ease-in-out; } &:hover, &.enlarged { &:before { width: 12px; height: 12px; border-radius: 2px; } .icon { opacity: 1; } } `,it=(0,h.forwardRef)(({isOpen:e,isOverridable:t,...n},o)=>h.createElement(rt,tt({role:"button",ref:o},n,{className:e||t?"enlarged":"","aria-label":t?(0,y.__)("Overridable property","elementor-pro"):(0,y.__)("Make prop overridable","elementor-pro")}),h.createElement(ot,{className:"icon"},t?h.createElement(E.CheckIcon,{fontSize:nt}):h.createElement(E.PlusIcon,{fontSize:nt}))));function at(){return at=Object.assign?Object.assign.bind():function(e){for(var t=1;t{const n=({componentOverridablePropConfig:t,elementOriginValue:n})=>{const o=et(t);return e({override_key:o.overrideKey,origin_value:n},void 0,{withHistory:!1}),(0,p.setDocumentModifiedStatus)(!0),{createdOverridableProp:o}};return(0,f.undoable)({do:({componentOverridablePropConfig:e,elementOriginValue:t})=>n({componentOverridablePropConfig:e,elementOriginValue:t}),undo:({componentOverridablePropConfig:e,elementOriginValue:n},{createdOverridableProp:o})=>{A({componentId:e.componentId,propKey:o.overrideKey,executedBy:"system",revertElementOverridable:!1}),t(n,void 0,{withHistory:!1})},redo:({elementOriginValue:e,componentOverridablePropConfig:t},{createdOverridableProp:o})=>n({componentOverridablePropConfig:{...t,overrideKey:o.overrideKey},elementOriginValue:e})},{title:({componentOverridablePropConfig:e})=>e.label,subtitle:(0,y.__)("property exposed","elementor-pro")})},[t,e])}({setElementOverridableValue:v,setElementOriginValue:s}),E=g??d,w=(0,_.usePopupState)({variant:"popover"}),C=(0,_.bindTrigger)(w),x=(0,_.bindPopover)(w),{elType:I}=(0,P.getWidgetsCache)()?.[o.key]??{elType:"widget"},S=E?(0,l.getOverridableProp)({componentId:e,overrideKey:E.override_key}):void 0;return h.createElement(h.Fragment,null,h.createElement(_.Tooltip,{placement:"top",title:(0,y.__)("Override Property","elementor-pro")},h.createElement(it,at({},C,{isOpen:!!x.open,isOverridable:!!E}))),h.createElement(_.Popover,at({disableScrollLock:!0,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},PaperProps:{sx:{my:2.5}}},x),h.createElement(j,{onSubmit:({label:s,group:c})=>{const p=E?t?.props?.[E.override_key]:void 0;if(p)L({componentId:e,overrideKey:p.overrideKey,label:s,groupId:c});else{const t=a.default??{},p=(0,l.resolveOverridePropValue)(E?.origin_value)??r??t,m={componentId:e,overrideKey:E?.override_key??null,elementId:u?.element.id??n,label:s,groupId:c,propKey:i,elType:I??"widget",widgetType:u?.elementType.key??o.key,originValue:p,executedBy:"user"};b({componentOverridablePropConfig:m,elementOriginValue:p})}w.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})))}function ct(e,t){Object.values(t.props).forEach(t=>{const n=pt(e,t.elementId);n?.settings&&(n.settings[t.propKey]={$$type:"overridable",value:{override_key:t.overrideKey,origin_value:n.settings[t.propKey]}})})}function pt(e,t){for(const n of e){if(n.id===t)return n;if(n.elements){const e=pt(n.elements,t);if(e)return e}}return null}const mt=(e,t)=>(0,P.replaceElement)({currentElementId:e.id,newElement:Se(t),withHistory:!1});async function dt({name:e,element:t,eventData:n,uid:o,overridableProps:r,executedBy:i}){const a=o??(0,I.generateUniqueId)("component"),s={uid:a,name:e},c=[k(t)];r&&ct(c,r);const p=(0,P.getContainer)(t.id),m=p?.model?.toJSON?.(),d={model:m??t,parentId:p?.parent?.id??"",index:p?.view?._index??0};l.componentsActions.addUnpublished({...s,elements:c,overridableProps:r}),l.componentsActions.addCreatedThisSession(a);const u=mt(t,s);(0,l.trackComponentEvent)({action:"created",source:i,executedBy:i,component_uid:a,component_name:e,...n});try{await(0,f.__privateRunCommand)("document/save/auto")}catch(e){throw function(e,t){const n=(0,P.getContainer)(t);n&&(0,P.deleteElement)({container:n,options:{useHistory:!1}});const o=(0,P.getContainer)(e.parentId);if(!o)return;const r=structuredClone(e.model);(0,P.createElements)({title:(0,y.__)("Restore Element","elementor-pro"),elements:[{container:o,model:r,options:{at:e.index}}]})}(d,u.id),l.componentsActions.removeUnpublished(a),l.componentsActions.removeCreatedThisSession(a),e}try{await(0,l.loadComponentsAssets)([u.model.toJSON()])}catch{}return{uid:a,instanceId:u.id}}function ut(){return null!==l.componentsSelectors.getCurrentComponentId()}const gt={type:"default",message:(0,y.__)("This widget isn't compatible with components. Use atomic elements instead.","elementor-pro"),id:"non-atomic-element-blocked"};function ft(e){return null!==(0,P.getElementType)(e)}function yt(e){if(!ut())return!1;const{model:t}=e,n=t?.widgetType||t?.elType;return!!n&&!ft(n)&&((0,_e.notify)(gt),!0)}function ht(e){if(!ut())return!1;const{containers:t=[e.container]}=e,n=t.some(e=>!!e&&(0,P.getAllDescendants)(e).some(e=>!(0,we.isAtomicWidget)(e)));return n&&(0,_e.notify)(gt),n}function vt(e){if(!ut())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=bt(n.clipboard.elements);return o&&(0,_e.notify)(gt),o}function bt(e){for(const t of e){const e=t.widgetType||t.elType;if(e&&!ft(e))return!0;if(t.elements?.length&&bt(t.elements))return!0}return!1}function Et(e){const t=[],n=e.widgetType||e.elType;if(n&&!ft(n)&&t.push(n),e.elements?.length)for(const n of e.elements)t.push(...Et(n));return[...new Set(t)]}const wt=e=>{const[t,n]=(0,h.useState)(e),[o,r]=(0,h.useState)({}),i=(0,h.useMemo)(()=>!Object.values(o).some(e=>e),[o]);return{values:t,errors:o,isValid:i,handleChange:(e,o,i)=>{const a={...t,[o]:e.target.value};n(a);const{success:s,errors:l}=_t(a,i);r(s?{}:l)},validateForm:e=>{const{success:n,errors:o,parsedValues:i}=_t(t,e);return n?(r({}),{success:n,parsedValues:i}):(r(o),{success:n})}}},_t=(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}},Ct=(e,t)=>{const{elementsCount:n,componentsCount:o}=xt(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 xt(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}=xt(o);t+=e,n+=r}return{elementsCount:t,componentsCount:n}}const It=100;function Pt(){const[e,t]=(0,h.useState)(null),[n,o]=(0,h.useState)(),{components:r}=(0,l.useComponents)(),i=(0,h.useRef)(null);(0,h.useEffect)(()=>{const e="elementor/editor/open-save-as-component-form",n=e=>{const{shouldOpen:n,notification:a}=function(e,t){return Et(e).length>0?{shouldOpen:!1,notification:{type:"default",message:(0,y.__)("Components require atomic elements only. Remove widgets to create this component.","elementor-pro"),id:"non-atomic-element-save-blocked"}}:t>=It?{shouldOpen:!1,notification:{type:"default",message:(0,y.__)("You've reached the limit of %s components. Please remove an existing one to create a new component.","elementor-pro").replace("%s",It.toString()),id:"maximum-number-of-components-exceeded"}}:{shouldOpen:!0,notification:null}}(e.detail.element,r?.length??0);n?(t({element:e.detail.element,elementLabel:(0,P.getElementLabel)(e.detail.element.id)}),o(e.detail.anchorPosition),i.current=Ct(e.detail.element,e.detail.options),(0,l.trackComponentEvent)({action:"createClicked",source:"user",executedBy:"user",...i.current})):(0,_e.notify)(a)};return window.addEventListener(e,n),()=>{window.removeEventListener(e,n)}},[r?.length]);const a=()=>{t(null),o(void 0)},s=()=>{a(),(0,l.trackComponentEvent)({action:"createCancelled",source:"user",executedBy:"user",...i.current})};return h.createElement(b.ThemeProvider,null,h.createElement(_.Popover,{open:null!==e,onClose:s,anchorReference:"anchorPosition",anchorPosition:n,"data-testid":"create-component-form"},null!==e&&h.createElement(Tt,{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 dt({name:t.componentName,element:e.element,eventData:i.current,executedBy:"user"}),r=l.componentsSelectors.getComponentByUid(n)?.id;if(!r)throw new Error("Failed to find published component");(0,l.switchToComponent)(r,o),(0,_e.notify)({type:"success",message:(0,y.__)("Component created successfully.","elementor-pro"),id:`component-saved-successfully-${n}`}),a()}catch{const e=(0,y.__)("Failed to create component. Please try again.","elementor-pro");(0,_e.notify)({type:"error",message:e,id:"component-save-failed"}),a()}},closePopup:s})))}const St="tiny",Tt=({initialValues:e,handleSave:t,closePopup:n})=>{const{values:o,errors:r,isValid:i,handleChange:a,validateForm:s}=wt(e),c=(0,b.useTextFieldAutoSelect)(),{components:p}=(0,l.useComponents)(),m=(0,h.useMemo)(()=>p?.map(e=>e.name)??[],[p]),d=(0,h.useMemo)(()=>Ie(m),[m]),u=(0,h.useMemo)(()=>Pe(m),[m]),g={heading:(0,y.__)("Create component","elementor-pro"),name:(0,y.__)("Name","elementor-pro"),cancel:(0,y.__)("Cancel","elementor-pro"),create:(0,y.__)("Create","elementor-pro")},f="component-name";return h.createElement(b.Form,{onSubmit:()=>{const{success:e,parsedValues:n}=s(u);e&&t(n)}},h.createElement(_.Stack,{alignItems:"start",width:"268px"},h.createElement(_.Stack,{direction:"row",alignItems:"center",py:1,px:1.5,sx:{columnGap:.5,borderBottom:"1px solid",borderColor:"divider",width:"100%"}},h.createElement(E.ComponentsIcon,{fontSize:St}),h.createElement(_.Typography,{variant:"caption",sx:{color:"text.primary",fontWeight:"500",lineHeight:1}},g.heading)),h.createElement(_.Grid,{container:!0,gap:.75,alignItems:"start",p:1.5},h.createElement(_.Grid,{item:!0,xs:12},h.createElement(_.FormLabel,{htmlFor:f,size:"tiny"},g.name)),h.createElement(_.Grid,{item:!0,xs:12},h.createElement(_.TextField,{id:f,size:St,fullWidth:!0,value:o.componentName,onChange:e=>a(e,"componentName",d),inputProps:{style:{color:"text.primary",fontWeight:"600"}},error:Boolean(r.componentName),helperText:r.componentName,inputRef:c}))),h.createElement(_.Stack,{direction:"row",justifyContent:"flex-end",alignSelf:"end",py:1,px:1.5},h.createElement(_.Button,{onClick:n,color:"secondary",variant:"text",size:"small"},g.cancel),h.createElement(_.Button,{type:"submit",disabled:!i,variant:"contained",color:"primary",size:"small"},g.create))))};function Ot(e){l.componentsActions.setPath(e.path),l.componentsActions.setCurrentComponentId(e.currentComponentId)}var kt=window.ReactDOM;const Dt=(0,N.isCoreAtLeast)("4.2.0"),At=Dt?we.useCanvasDocument:function(){return(0,f.__privateUseListenTo)((0,f.commandEndEvent)("editor/documents/attach-preview"),()=>(0,f.getCanvasIframeDocument)())},Lt=Dt?we.useEscapeOnCanvas:function(e,t){(0,h.useEffect)(()=>{if(!e)return;const n=e=>{"Escape"===e.key&&t()};return e.body.addEventListener("keydown",n),()=>{e.body.removeEventListener("keydown",n)}},[e,t])},Rt=Dt?we.SpotlightBackdrop:function({canvas:e,element:t,onExit:n,ariaLabel:o}){const r=function(e){const[t,n]=(0,h.useState)(new DOMRect(0,0,0,0)),o=(0,I.throttle)(()=>{n(e?.getBoundingClientRect()??new DOMRect(0,0,0,0))},20,!0);return function({element:e,onChange:t}){(0,h.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:o}),function({element:e,onChange:t}){(0,h.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:o}),function({element:e,onChange:t}){(0,h.useEffect)(()=>{if(!e)return;const n=new MutationObserver(t);return n.observe(e,{childList:!0,subtree:!0}),()=>{n.disconnect()}},[e,t])}({element:e,onChange:o}),(0,h.useEffect)(()=>()=>{o.cancel()},[o]),t}(t),i={position:"fixed",top:0,left:0,width:"100vw",height:"100vh",backgroundColor:"rgba(0, 0, 0, 0.5)",zIndex:999,pointerEvents:"painted",cursor:"pointer",clipPath:t?function(e,t){const{x:n,y:o,width:r,height:i}=e,{innerWidth:a,innerHeight:s}=t;return`path(evenodd, 'M 0 0 L ${a} 0 L ${a} ${s} L 0 ${s} Z M ${n} ${o} L ${n+r} ${o} L ${n+r} ${o+i} L ${n} ${o+i} L ${n} ${o} Z')`}(r,e.defaultView):void 0};return h.createElement("div",{style:i,onClick:n,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),n())},role:"button",tabIndex:0,"aria-label":o})};function Mt({topLevelElementDom:e,onClose:t}){const n=At();return Lt(n,t),n?.body?(0,kt.createPortal)(h.createElement(h.Fragment,null,h.createElement(Ut,null),h.createElement(Rt,{canvas:n,element:e,onExit:t,ariaLabel:(0,y.__)("Exit component editing mode","elementor-pro")})),n.body):null}function Ut(){return h.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")}function zt(){const e=(0,l.useCurrentComponentId)();!function(){const e=(0,p.getV1DocumentsManager)(),t=(0,l.useCurrentComponentId)(),n=(0,w.__useSelector)(l.selectPath);(0,h.useEffect)(()=>(0,f.__privateListenTo)((0,f.commandEndEvent)("editor/documents/open"),()=>{const o=e.getCurrent();o.id!==t&&(t&&l.apiClient.unlockComponent(t),l.componentsActions.resetSanitizedComponents(),o.config.type===i?Ot({path:Bt(n,o),currentComponentId:o.id}):Ot({path:[],currentComponentId:null}))}),[n,e,t])}();const t=C(),n=(0,I.throttle)(t,100),o=function(e){const{componentContainerDomElement:t,topLevelElementDom:n}=function(e){if(!e)return{componentContainerDomElement:null,topLevelElementDom:null};const t=(0,p.getV1DocumentsManager)().get(e),n=t?.container,o=n?.view?.el?.children?.[0]??null;return{componentContainerDomElement:o,topLevelElementDom:o?.children[0]??null}}(e),[o,r]=(0,h.useState)(n);return(0,h.useEffect)(()=>{r(n)},[n]),(0,h.useEffect)(()=>{if(!t)return;const e=new MutationObserver(()=>{const e=t.children[0];r(e)});return e.observe(t,{childList:!0}),()=>{e.disconnect()}},[t]),o}(e??void 0);return e?h.createElement(Mt,{topLevelElementDom:o,onClose:n}):null}function Bt(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,r=function(e,t){if(!e)return;const n=(0,p.getV1DocumentsManager)(),o=t.at(-1)?.componentId??n.getInitialId(),r=n.get(o),i=r?.container,a=i?.children?.findRecursive?.(t=>t.id===e),s=a?.model?.get?.("editor_settings");return s?.title}(o,e);return[...e,{instanceId:o,instanceTitle:r,componentId:t.id}]}var Vt=window.elementorV2.editorTemplatesExtended;const jt=()=>(0,Vt.isCoreHandlingTemplateStyles)()?null:h.createElement(Nt,null);function Nt(){const e=(0,Vt.useLoadedTemplates)();return(0,h.useEffect)(()=>{(0,l.loadComponentsAssets)(e.flatMap(e=>e??[]))},[e]),null}const $t=new Map;function Gt(){return(0,h.useEffect)(()=>{(0,f.registerDataHook)("dependency","document/elements/delete",(e,t)=>{if(function(e){const t=e?.commandsCurrentTrace?.includes("document/elements/move")||e?.commandsCurrentTrace?.includes("document/repeater/move");return Boolean(t)}(t))return!0;const n=e.containers??(e.container?[e.container]:[]);if(0===n.length)return!0;const o=function(e){return e.filter(Boolean).flatMap(e=>[e,...(0,P.getAllDescendants)(e)]).map(e=>e.model?.get?.("id")??e.id).filter(e=>Boolean(e))}(n);return 0===o.length||Kt(o,t?.currentHistoryItemId),!0}),(0,f.registerDataHook)("after","document/history/undo",async(e,t)=>{t?.originHistoryItemId&&Ft(t.originHistoryItemId)}),(0,f.registerDataHook)("after","document/history/redo",(e,t)=>{t?.originHistoryItemId&&Ht(t.originHistoryItemId)});const e=function(){const e=e=>{const{detachedInstanceId:t,detachActionId:n}=e.detail;Kt([t],n)},t=e=>{const{detachActionId:t}=e.detail;Ft(t)},n=e=>{const{detachActionId:t}=e.detail;Ht(t)};return window.addEventListener(qt,e),window.addEventListener(Wt,t),window.addEventListener(Yt,n),()=>{window.removeEventListener(qt,e),window.removeEventListener(Wt,t),window.removeEventListener(Yt,n)}}();return(0,f.registerDataHook)("after","editor/documents/attach-preview",()=>{$t.clear()}),()=>{e()}},[]),null}function Kt(e,t){const n=l.componentsSelectors.getCurrentComponentId();if(!n)return;const o=l.componentsSelectors.getOverridableProps(n);if(!o||0===Object.keys(o.props).length)return;const r=Object.values(o.props).filter(t=>e.includes(t.elementId));0!==r.length&&(void 0!==t&&$t.set(t,{props:r,elementIds:e}),A({componentId:n,propKey:r.map(e=>e.overrideKey),executedBy:"system",revertElementOverridable:!1}))}function Ft(e){const t=l.componentsSelectors.getCurrentComponentId();if(!t)return;const n=$t.get(e);if(!n)return;(0,N.isCoreAtLeast)("4.1.0")&&(0,we.doAfterRender)(n.elementIds,()=>{for(const e of n.props)et({componentId:t,...e,executedBy:"system"})})}function Ht(e){const t=l.componentsSelectors.getCurrentComponentId();if(!t)return;const n=$t.get(e);n&&A({componentId:t,propKey:n.props.map(e=>e.overrideKey),executedBy:"system",revertElementOverridable:!1})}const qt="elementor/components/detach-instance",Wt="elementor/components/undo-detach-instance",Yt="elementor/components/redo-detach-instance";function Jt(){const e=(0,l.useCurrentComponentId)(),t=(0,l.useOverridableProps)(e),n=(0,l.useIsSanitizedComponent)(e,"overridableProps");return(0,h.useEffect)(()=>{if(n||!t||!e)return;const o=(0,l.filterValidOverridableProps)(t),r=Object.keys(t.props??{}).filter(e=>!o.props[e]);var i;r.length>0&&r.forEach(t=>{A({componentId:e,propKey:t,executedBy:"system"})}),i=e,l.componentsActions.updateComponentSanitizedAttribute(i,"overridableProps")},[e,n,t]),null}function Xt(){return h.createElement(en,null,h.createElement(ue.component,null))}function Zt(){return h.createElement(en,null,h.createElement(Pt,null),h.createElement(zt,null))}function Qt(){return h.createElement(en,null,h.createElement(Jt,null),h.createElement(jt,null),h.createElement(Gt,null))}function en({children:e}){const{data:t,isFetched:o}=(0,n.useHasFeature)(r);return o&&t?h.createElement(h.Fragment,null,e):null}const tn="elementor://components/list",nn=e=>{const{resource:t,sendResourceUpdated:n}=e;t("components-list",tn,{description:"Live list of all reusable components (published and unpublished) with full component data."},()=>({contents:[{uri:tn,mimeType:"application/json",text:JSON.stringify([...l.componentsSelectors.getComponents()??[],...l.componentsSelectors.getUnpublishedComponents()??[]])}]})),(0,w.__subscribeWithSelector)(e=>e[l.SLICE_NAME],()=>{n({uri:tn})})};var on=window.elementorV2.httpClient;const rn={action:Ce.z.enum(["save","get"]).describe('The operation to perform: "get" - retrieve a specific component by UID; "save" - create a new component from an existing element.'),element_id:Ce.z.string().optional().describe('[Required for "save"] 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:Ce.z.string().optional().describe('[Required for "save"] The name for the new component. Should be descriptive and unique among existing components. Must be unique among all components.'),overridable_props:Ce.z.object({props:Ce.z.record(Ce.z.object({elementId:Ce.z.string().describe("The id of the child element that you want to override its settings"),propKey:Ce.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:Ce.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.'),group:Ce.z.string().optional().describe("Non unique, optional property grouping")}))}).optional().describe('[Optional for "save"] 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.'),groups:Ce.z.array(Ce.z.string()).describe('[Optional for "save"] Property Groups, by order, unique values').optional(),component_uid:Ce.z.string().optional().describe('[Required for "get"] The unique identifier of the component to retrieve.')},an={message:Ce.z.string().optional().describe("Additional information about the operation result"),component_uid:Ce.z.string().optional().describe('The unique identifier of the newly created component (only present on "save" success)'),component:Ce.z.object({uid:Ce.z.string(),name:Ce.z.string(),status:Ce.z.enum(["published","unpublished"]),id:Ce.z.number().optional(),overridableProps:Ce.z.unknown().optional(),elements:Ce.z.array(Ce.z.any()).optional().describe("The elements of the component (only when component is unpublished)")}).optional().describe('The requested component data (only present on "get")')},sn=async e=>{const{action:t}=e;switch(t){case"get":return async function(e){const{component_uid:t}=e;if(!t)throw new Error('component_uid is required for the "get" action.');const n=l.componentsSelectors.getComponentByUid(t);if(!n)throw new Error(`Component with UID "${t}" not found.`);const o="id"in n;let r;if(o){const e=(0,p.getV1DocumentsManager)();try{const t=await e.request(n.id);r=t?.elements}catch{r=void 0}}return{status:"ok",component:{uid:n.uid,name:n.name,status:o?"published":"unpublished",id:o?n.id:void 0,overridableProps:n.overridableProps,elements:r}}}(e);case"save":return async function(e){const{groups:t=[],element_id:n,component_name:o,overridable_props:r}=e;if(!n)throw new Error('element_id is required for the "save" action.');if(!o)throw new Error('component_name is required for the "save" action.');const i=function(){const e=(0,P.getWidgetsCache)();return e?Object.entries(e).reduce((e,[t,n])=>n.atomic_props_schema&&n.show_in_panel&&"widget"!==n.elType?(e.push(t),e):e,[]):[]}(),a=(0,P.getContainer)(n);if(!a)throw new Error("Element not found. Use 'list-elements' to get valid element IDs.");const s=a.model.get("elType");if(!i.includes(s))throw new Error(`Element is not one of the following types: ${i.join(", ")}`);const c=a.model.toJSON({remove:["default"]});if(c?.isLocked)throw new Error("Cannot save a locked element as a component.");const p=(t.indexOf("Default")>=0?[...t]:["Default",...t]).map(e=>({id:(0,I.generateUniqueId)("group"),label:e,props:[]})),m=r?function(e,t,n){const o={},r={},i=n.find(e=>"Default"===e.label);if(!i)throw new Error("Internal mcp error: could not generate default group");return Object.entries(e.props).forEach(([,e])=>{const{elementId:a,propKey:s,label:l,group:c="Default"}=e,p=n.find(e=>e.label===c)||i,m=p.id,d=ln(t,a);if(!d)throw new Error(`Element with ID "${a}" not found in component`);const u=d.elType,g=d.widgetType||d.elType,f=(0,P.getElementType)(g);if(!f)throw new Error(`Element type "${g}" is not atomic or does not have a settings schema. Cannot expose property "${s}" for element "${a}".`);if(!f.propsSchema[s]){const e=Object.keys(f.propsSchema).join(", ");throw new Error(`Property "${s}" does not exist in element "${a}" (type: ${g}). Available properties: ${e}`)}const y=(0,I.generateUniqueId)("prop"),h=d.settings?.[s]?d.settings[s]:f.propsSchema[s].default??null;r[m]||(r[m]={id:m,label:p.label,props:[]}),r[m].props.push(y),o[y]={overrideKey:y,label:l,elementId:a,propKey:s,elType:u,widgetType:g,originValue:h,groupId:m}}),{props:o,groups:{items:r,order:n.filter(e=>r[e.id]).map(e=>e.id)}}}(r,c,p):void 0;m&&function(e,t){Object.values(t.props).forEach(t=>{const n=ln(e,t.elementId);n&&n.settings&&(n.settings[t.propKey]={$$type:"overridable",value:{override_key:t.overrideKey,origin_value:t.originValue}})})}(c,m);const d=(0,I.generateUniqueId)("component");try{await l.apiClient.validate({items:[{uid:d,title:o,elements:[c],settings:{overridable_props:m}}]})}catch(e){if(e instanceof on.AxiosError)throw new Error(e.response?.data.message);throw new Error("Unknown error")}return await dt({name:o,element:c,eventData:null,uid:d,overridableProps:m,executedBy:"mcp_tool"}),m&&Object.values(m.props).forEach(e=>{(0,l.trackComponentEvent)({action:"propertyExposed",source:"mcp_tool",executedBy:"mcp_tool",component_uid:d,property_id:e.overrideKey,property_path:e.propKey,property_name:e.label,element_type:e.widgetType??e.elType})}),{status:"ok",message:`Component "${o}" created successfully.`,component_uid:d}}(e)}};function ln(e,t){if(e.id===t)return e;if(e.elements)for(const n of e.elements){const e=ln(n,t);if(e)return e}return null}const cn=()=>{const e=(0,u.toolPrompts)("manage-component");return e.description(`\nManage reusable components in the Elementor editor: retrieve a specific component or save an element as a new component.\n\n# **CRITICAL - Before any operation, read the resources**\nAlways read all required resources before performing any action.\n\n# Actions\n\n## "get" - Get a specific component\nReturns full details of a component including its overridable properties.\nRequired: component_uid\n\n## "save" - Save an element as a new component\nCreates a new reusable component from an existing element.\nRequired: element_id, component_name\nOptional: overridable_props, groups\n\n# IMPORTANT - Before saving a new component\n**Always read [${tn}] first** to see existing components and avoid creating duplicates.\nUse "get" to inspect an existing component if you need to understand its structure.\n\n# When NOT to use "save"\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# **REQUIRED RESOURCES (Must read before any operation)**\n1. [${tn}]\n **MANDATORY** - Live list of all existing components. Always read this first to check for duplicates.\n\n2. [${we.DOCUMENT_STRUCTURE_URI}]\n **MANDATORY** - Required to understand the document structure and identify child elements for overridable properties.\n\n3. [${we.WIDGET_SCHEMA_URI}]\n **MANDATORY** - Required to understand which properties are available for each widget type.\n\n# Instructions for "save" - MUST FOLLOW IN ORDER\n## Step 1: Check existing components\n1. Read the [${tn}] resource to see all existing components\n2. If a suitable component already exists, consider using it instead\n\n## Step 2: Identify the Target Element\n1. Read the [${we.DOCUMENT_STRUCTURE_URI}] resource\n2. Locate the element by its element_id\n3. Verify the element type is valid, not locked, and not already a component\n\n## Step 3: Define Overridable Properties\nSkip ONLY if the user explicitly requests no customizable properties.\n\n1. **Identify Child Elements** via [${we.DOCUMENT_STRUCTURE_URI}]\n2. **Find Available Properties** via [${we.WIDGET_SCHEMA_URI}] → atomic_props_schema\n - Use only top-level props (e.g., "text", "url", "tag", "size")\n3. **Build the overridable_props object** with unique, user-friendly labels\n\n## Step 4: Execute "save"\nCall with element_id, component_name, and optionally overridable_props and groups.\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 atomic_props_schema in [${we.WIDGET_SCHEMA_URI}]\n- Element IDs must exist within the target element's children\n- The element being saved must not be inside another component\n`),e.parameter("action",'**MANDATORY** The operation to perform:\n- "get": Returns details of a specific component. Requires component_uid.\n- "save": Creates a new component from an element. Requires element_id and component_name.'),e.parameter("component_uid",`**Required for "get"** The unique identifier of the component to retrieve.\nRead the [${tn}] resource first to discover available component UIDs.`),e.parameter("element_id",`**Required for "save"** The unique identifier of the element to save as a component.\nUse the [${we.DOCUMENT_STRUCTURE_URI}] resource to find available element IDs.`),e.parameter("component_name",'**Required for "save"** 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 for "save"** Configuration for which child element properties can be customized in component instances.\n\nStructure:\n\`\`\`json\n{\n "props": {\n "": {\n "elementId": "",\n "propKey": "",\n "label": ""\n }\n }\n}\n\`\`\`\n\nTo populate this correctly:\n1. Use [${we.DOCUMENT_STRUCTURE_URI}] to find child element IDs and their widgetType\n2. Use [${we.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.example('\nGet a specific component:\n```json\n{ "action": "get", "component_uid": "component-abc123" }\n```\n\nSave without overridable properties:\n```json\n{ "action": "save", "element_id": "abc123", "component_name": "Hero Section" }\n```\n\nSave with overridable properties:\n```json\n{\n "action": "save",\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 "group": "Content"\n },\n "button-link": {\n "elementId": "button-456",\n "propKey": "url",\n "label": "Button Link",\n "group": "Settings"\n }\n }\n }\n}\n```\n'),e.instruction('After successful "save", 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()},pn=e=>{const{addTool:t}=e;t({name:"manage-component",schema:rn,outputSchema:an,description:cn(),requiredResources:[{uri:tn,description:"List of all components"},{uri:we.DOCUMENT_STRUCTURE_URI,description:"Document structure"},{uri:we.WIDGET_SCHEMA_URI,description:"Widget schema"}],handler:sn})},mn="ctrl+shift+k",dn="elementor/editor/open-save-as-component-form";function un(){const e=(0,P.getSelectedElements)();if(1!==e.length)return{allowed:!1};const t=e[0];if(!(0,P.getElementType)(t.type))return{allowed:!1};const n=(0,P.getWidgetsCache)(),o=n?.[t.type];if(!o?.atomic_props_schema||!o?.show_in_panel||"widget"===o?.elType)return{allowed:!1};const r=window.elementor.getContainer(t.id);return!r||r.isLocked()?{allowed:!1}:{allowed:!0,container:r}}const gn=({container:e})=>{const t=e.document;if(!t||t.config.type!==i)return;const n=l.componentsSelectors.getOverridableProps(t.id);n&&e.settings.set("overridable_props",n)};async function fn({elements:e,status:t}){const n=l.componentsSelectors.getUnpublishedComponents();if(n.length)try{const o=await async function(e,t){const n=await l.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);yn(e,o),l.componentsActions.add(n.map(e=>({id:o.get(e.uid),name:e.name,uid:e.uid,overridableProps:e.overridableProps?e.overridableProps:void 0}))),l.componentsActions.resetUnpublished()}catch(e){const t=n.map(e=>e.uid);throw l.componentsActions.removeUnpublished(t),new Error(`Failed to publish components: ${e}`)}}function yn(e,t){e.forEach(e=>{const{shouldUpdate:n,newComponentId:o}=function(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);var r,i;n&&(r=e.id,i=o,(0,P.updateElementSettings)({id:r,props:{component_instance:{$$type:"component-instance",value:{component_id:{$$type:"number",value:i}}}},withHistory:!1})),e.elements&&yn(e.elements,t)})}const hn=({container:e,status:t})=>{const n=e?.model.get("elements").toJSON?.()??[];return Promise.all([vn({elements:n,status:t}),gn({container:e})])},vn=async({elements:e,status:t})=>{await bn({elements:e,status:t}),await fn({elements:e,status:t})},bn=async({elements:e,status:t})=>{await(async e=>{const t=l.componentsSelectors.getUpdatedComponentNames();t.length&&0===(await l.apiClient.updateComponentTitle(t,e)).failedIds.length&&l.componentsActions.cleanUpdatedComponentNames()})(t),await(async e=>{try{const t=l.componentsSelectors.getArchivedThisSession();if(!t.length)return;const n=(await l.apiClient.updateArchivedComponents(t,e)).failedIds.join(", ");n&&(0,_e.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}`)}})(t),await(0,l.publishDraftComponentsInPageBeforeSave)({elements:e,status:t})};var En=window.elementorV2.editorCanvasExtended;const wn="e-flexbox";function _n(e){const t=(0,P.createElement)({container:e,model:{elType:wn}});(0,P.selectElement)(t.id)}function Cn(e){return!("document"!==e.id)&&e.document?.config.type===i}function xn(){(0,f.registerDataHook)("after","document/elements/duplicate",(e,t)=>{var n;ut()&&(n=t,(Array.isArray(n)?n:[n]).forEach(e=>{!function(e){(0,P.getAllDescendants)(e).forEach(e=>{e.model.get("widgetType")===l.COMPONENT_WIDGET_TYPE?function(e){const t=e.settings?.toJSON()??{},n=l.componentInstancePropTypeUtil.extract(t.component_instance),o=l.componentInstanceOverridesPropTypeUtil.extract(n?.overrides);if(!o?.length)return;const r=T(o),i=l.componentInstancePropTypeUtil.create({...n,overrides:l.componentInstanceOverridesPropTypeUtil.create(r)});(0,P.updateElementSettings)({id:e.id,props:{component_instance:i},withHistory:!1})}(e):function(e){const t=e.settings?.toJSON()??{},{hasChanges:n,settings:o}=O(t);n&&(0,P.updateElementSettings)({id:e.id,props:o,withHistory:!1})}(e)})}(e)}))}),(0,f.registerDataHook)("after","document/elements/copy",e=>{ut()&&function(e){const t=window.elementorCommon?.storage;if(!t)return;const n=t.get(e);if(!n?.elements?.length)return;const o=n.elements.map(k);t.set(e,{...n,elements:o})}(e.storageKey??"clipboard")})}function In(){return(0,h.useEffect)(()=>(window.addEventListener(we.ELEMENT_ADDED_EVENT,Pn),(0,f.registerDataHook)("after","preview/drop",(e,t)=>{"e-component"===t?.model?.get("widgetType")&&Sn(t.model.toJSON(),"user")}),()=>{window.removeEventListener(we.ELEMENT_ADDED_EVENT,Pn)}),[]),null}function Pn(e){const{element:t,executedBy:n}=e.detail;Sn(t,n)}function Sn(e,t){if("e-component"!==e?.widgetType)return;const n=e.editor_settings,o=n?.component_uid,r=(0,l.selectComponentByUid)?.((0,w.__getState)(),o??"")?.name,i=e.id,a=(0,l.selectCreatedThisSession)((0,w.__getState)()),s=o&&a.includes(o),c=window.elementorCommon.eventsManager.config,{locations:p,secondaryLocations:m}=c,d={location:p.widgetPanel,secondary_location:m.componentsTab};let u={source:t,executedBy:t,instance_id:i,component_uid:o,component_name:r,is_same_session_reuse:s};"mcp_tool"!==t&&(u={...u,...d}),(0,l.trackComponentEvent)({action:"instanceAdded",...u})}const Tn=1;function On({isLicenseExpired:e}){(0,m.registerEditingPanelReplacement)({id:"extended-component-instance-edit-panel",priority:Tn,condition:(e,t)=>"e-component"===t.key,component:Je}),(0,d.registerTab)({id:"components",label:(0,y.__)("Components","elementor-pro"),component:He,priority:Tn}),(0,f.registerDataHook)("dependency","editor/documents/close",e=>((0,p.getV1CurrentDocument)().config.type===i&&(e.mode="autosave"),!0)),window.elementorCommon.__beforeSave=hn,(0,m.injectIntoPanelHeaderTop)({id:"component-panel-header",component:Ee,options:{overwrite:!0}}),(0,m.registerFieldIndicator)({fieldType:m.FIELD_TYPE.SETTINGS,id:"component-overridable-prop",priority:1,indicator:st}),(0,c.registerControlReplacement)({id:o,component:Ze,condition:({value:e})=>l.componentOverridablePropTypeUtil.isValid(e)}),(0,f.blockCommand)({command:"document/elements/create",condition:yt}),(0,f.blockCommand)({command:"document/elements/move",condition:ht}),(0,f.blockCommand)({command:"document/elements/paste",condition:vt}),(0,En.registerDropContainerRedirect)({shouldHandle:ut,resolveRedirect:e=>Cn(e)?function(e){const t=e.children?.[0];return t?{shouldRedirect:!0,container:t}:{shouldRedirect:!1,container:e}}(e):{shouldRedirect:!1,container:e}}),(0,f.registerDataHook)("after","document/elements/delete",e=>{if(!ut())return;const t=e.containers??(e.container?[e.container]:[]);for(const e of t){if(!e.parent||!Cn(e.parent))continue;const t=e.parent;0===t.children?.length&&_n(e.parent)}}),xn(),e||window.$e.shortcuts.register(mn,{callback:()=>{const e=un();e.allowed&&function(e){const t=window,n=e.view.el.getBoundingClientRect(),o=t.elementor.$preview[0].getBoundingClientRect(),r={left:o.left+n.left+n.width/2,top:o.top+n.top};window.dispatchEvent(new CustomEvent(dn,{detail:{element:e.model.toJSON({remove:["default"]}),anchorPosition:r,options:{trigger:"keyboard",location:"canvas",secondaryLocation:"canvasElement"}}}))}(e.container)},dependency:()=>un().allowed,exclude:["input"]}),function(e){const{setMCPDescription:t,waitForReady:n}=e;t("Components V4 MCP Server - Tools for creating and managing reusable components."),n().then(()=>{nn(e),pn(e)})}((0,u.getMCPByDomain)("components",{instructions:a}))}async function kn(){(0,s.injectIntoTop)({id:"component-popups",component:Zt,options:{overwrite:!0}}),(0,g.__registerPanel)({id:ue.id,component:Xt}),(0,s.injectIntoLogic)({id:"components-logic-effects",component:Qt,options:{overwrite:!0}}),(0,s.injectIntoLogic)({id:"components-track-instance-added",component:In});const{isFeatureEnabled:e,isLicenseExpired:t}=await async function(){const[e,t]=await Promise.allSettled([(0,n.fetchTierFeatures)(),(0,n.fetchLicenseStatus)()]),o="fulfilled"===e.status?e.value:[],i="fulfilled"===t.status&&t.value;return{isFeatureEnabled:o.includes(r),isLicenseExpired:i}}();e&&On({isLicenseExpired:t})}(window.elementorV2=window.elementorV2||{}).editorComponentsExtended=t}(),window.elementorV2.editorComponentsExtended?.init?.(); PT. Petra Gracia Kreasi https://petragk.com/ Distributor Alat Kesehatan Indonesia Mon, 24 Aug 2026 11:48:57 +0000 en-US hourly 1 https://petragk.com/wp-content/uploads/2022/06/cropped-Icon-PGK-Petra-Gracia-Kreasi-100x100.png PT. Petra Gracia Kreasi https://petragk.com/ 32 32 USG dengan Teknologi AI: Transformasi Digital dalam Dunia Diagnostik Medis https://petragk.com/usg-dengan-ai/ https://petragk.com/usg-dengan-ai/#respond Mon, 09 Jun 2025 03:57:01 +0000 https://petragk.com/?p=636 USG dengan Teknologi AI: Transformasi Digital dalam Dunia Diagnostik Medis Dalam dunia medis yang terus berkembang, kemajuan teknologi telah membawa perubahan besar terhadap cara diagnosis dilakukan. Salah satu inovasi paling menjanjikan adalah penerapan Artificial Intelligence (AI) dalam pemeriksaan Ultrasonografi (USG). Dengan memadukan metode pencitraan klasik dan kecanggihan algoritma komputer, USG berbasis AI kini menjadi solusi… Continue reading USG dengan Teknologi AI: Transformasi Digital dalam Dunia Diagnostik Medis

The post USG dengan Teknologi AI: Transformasi Digital dalam Dunia Diagnostik Medis appeared first on PT. Petra Gracia Kreasi.

]]>

USG dengan Teknologi AI: Transformasi Digital dalam Dunia Diagnostik Medis

Dalam dunia medis yang terus berkembang, kemajuan teknologi telah membawa perubahan besar terhadap cara diagnosis dilakukan. Salah satu inovasi paling menjanjikan adalah penerapan Artificial Intelligence (AI) dalam pemeriksaan Ultrasonografi (USG). Dengan memadukan metode pencitraan klasik dan kecanggihan algoritma komputer, USG berbasis AI kini menjadi solusi revolusioner yang mengubah standar diagnosis medis menjadi lebih cepat, akurat, dan efisien.

Apa Itu USG (Ultrasonografi)?

USG (Ultrasound) adalah teknik pencitraan medis yang menggunakan gelombang suara frekuensi tinggi untuk memvisualisasikan bagian dalam tubuh manusia. Tidak seperti rontgen atau CT scan yang menggunakan radiasi, USG bersifat non-invasif dan aman, sehingga banyak digunakan dalam pemeriksaan kehamilan, jantung, hati, ginjal, dan organ internal lainnya.

Jenis-Jenis Pemeriksaan USG

  • USG Abdomen – untuk memeriksa organ perut seperti hati, ginjal, pankreas, dan limpa.
  • USG Transvaginal dan Transrektal – digunakan untuk mengevaluasi organ reproduksi.
  • USG Kehamilan (Obstetri) – untuk memantau pertumbuhan janin.
  • USG Doppler – untuk mengevaluasi aliran darah.
  • USG Jantung (Ekokardiografi) – untuk melihat struktur dan fungsi jantung.

Bagaimana Teknologi AI Diintegrasikan ke Dalam USG?

Artificial Intelligence (AI) merujuk pada kemampuan mesin untuk meniru fungsi kognitif manusia seperti belajar, berpikir, dan membuat keputusan. Ketika AI diterapkan dalam USG, sistem perangkat lunak belajar dari jutaan data citra medis untuk mengenali pola, mengklasifikasikan kelainan, dan memberikan interpretasi yang akurat secara otomatis.

 

Teknologi AI yang Digunakan

  • Machine Learning (ML) – digunakan untuk melatih sistem mengenali pola-pola tertentu dalam gambar USG.
  • Deep Learning – algoritma berbasis jaringan saraf tiruan yang meniru cara kerja otak manusia untuk meningkatkan akurasi deteksi.
  • Computer Vision – memungkinkan sistem mengenali dan memproses gambar medis secara otomatis.
  • Natural Language Processing (NLP) – digunakan untuk mengkonversi hasil citra menjadi laporan tekstual otomatis.

Manfaat USG Berbasis Teknologi AI

Integrasi AI dalam teknologi USG membawa berbagai manfaat besar, baik bagi tenaga medis maupun pasien.

1. Meningkatkan Akurasi dan Konsistensi Diagnosis

AI dapat mengidentifikasi struktur anatomi dengan tingkat presisi tinggi dan mengurangi kesalahan manusia (human error), terutama dalam kasus-kasus yang kompleks seperti deteksi tumor kecil atau kelainan janin.


2. Otomatisasi Pengukuran dan Pemetaan

Dengan AI, proses pengukuran struktur organ seperti panjang tulang, lingkar kepala janin, atau volume jantung dapat dilakukan secara otomatis, cepat, dan akurat.


3. Efisiensi Waktu dan Biaya

AI memungkinkan analisis gambar dalam waktu nyaris real-time, mengurangi waktu tunggu hasil dan mempercepat proses diagnosis, sehingga efisiensi operasional rumah sakit meningkat.


4. Bantuan di Wilayah Minim Dokter Spesialis

Di daerah terpencil atau negara berkembang yang kekurangan dokter spesialis, teknologi ini membantu tenaga medis umum untuk tetap dapat melakukan pemeriksaan dengan hasil berkualitas.


5. Pelatihan Tenaga Medis Lebih Cepat

Sistem AI dapat memberikan umpan balik real-time kepada tenaga medis junior, sehingga mempercepat proses pembelajaran dan pelatihan.


Studi Kasus dan Contoh Penerapan

GE Healthcare
Melalui teknologi Voluson dengan SonoCNS™, GE memperkenalkan AI untuk membantu pemetaan otak janin secara otomatis pada pemeriksaan kehamilan, meningkatkan konsistensi pengukuran dan meminimalkan variabilitas antar operator.


Philips Ultrasound AI

Philips mengembangkan AI-powered image interpretation untuk diagnosis jantung dan liver, serta mempermudah navigasi probe selama pemeriksaan USG.


Butterfly iQ

Startup Butterfly Network menciptakan USG portabel berbasis AI yang dapat digunakan dengan smartphone, ideal untuk kebutuhan lapangan, telemedisin, dan diagnosa cepat.

Tantangan dan Batasan Teknologi

Meskipun menjanjikan, terdapat sejumlah tantangan yang masih harus diatasi:

1. Kualitas dan Kuantitas Data

AI membutuhkan ribuan hingga jutaan data citra yang berkualitas tinggi dan beranotasi baik. Kekurangan data ini dapat menghambat pengembangan algoritma yang andal.


2. Validasi Klinis dan Etika

Teknologi ini harus melewati uji klinis ketat sebelum dapat digunakan secara luas. Selain itu, isu privasi data pasien dan keamanan siber juga menjadi perhatian besar.


3. Adaptasi dan Pelatihan SDM

Implementasi AI membutuhkan pelatihan ulang bagi tenaga medis dan radiolog agar dapat menginterpretasikan serta berinteraksi dengan hasil yang diberikan oleh sistem.


4. Ketergantungan Teknologi

Kecenderungan bergantung sepenuhnya pada AI juga perlu dihindari. AI seharusnya menjadi alat bantu, bukan pengganti dokter.


Masa Depan USG Berbasis AI

Potensi teknologi ini dalam 5–10 tahun ke depan sangat besar, antara lain:

  • Integrasi dengan sistem EHR (Electronic Health Records) untuk akses cepat data pasien.
  • Deteksi penyakit secara prediktif berdasarkan pola citra dan riwayat medis.
  • Penerapan teleultrasound AI, memungkinkan diagnosis jarak jauh secara real-time.
  • Pemanfaatan cloud computing dan IoT untuk pencitraan berbasis cloud yang bisa diakses lintas rumah sakit.

Dengan terus berkembangnya teknologi, AI dalam USG akan memainkan peran sentral dalam sistem kesehatan berbasis nilai (value-based care), di mana tujuan utamanya adalah meningkatkan hasil klinis dan efisiensi layanan.

USG berbasis AI adalah wujud nyata dari transformasi digital di dunia kesehatan. Kombinasi antara teknologi pencitraan konvensional dan algoritma cerdas menciptakan sistem diagnosis yang cepat, akurat, dan mudah diakses. Meskipun masih memiliki tantangan, penerapan USG AI akan terus berkembang seiring dengan meningkatnya kebutuhan terhadap layanan kesehatan yang efisien dan berkualitas tinggi.

Bagi rumah sakit, klinik, maupun praktisi medis yang ingin berinovasi dan meningkatkan layanan, adopsi USG berbasis AI adalah langkah strategis yang patut dipertimbangkan.

The post USG dengan Teknologi AI: Transformasi Digital dalam Dunia Diagnostik Medis appeared first on PT. Petra Gracia Kreasi.

]]>
https://petragk.com/usg-dengan-ai/feed/ 0
Bagaiman Memilih Peralatan Alat Medis yang Memenuhi Standar https://petragk.com/tips-memilih-peralatan-medis/ https://petragk.com/tips-memilih-peralatan-medis/#respond Fri, 23 Feb 2024 03:00:00 +0000 https://petragk.com/?p=581 Dalam industri perawatan kesehatan, pemilihan peralatan alat medis yang memenuhi standar sangat penting untuk memastikan keselamatan pasien dan efektivitas prosedur medis. Dengan begitu banyak pilihan yang tersedia di pasaran, memilih peralatan yang tepat dapat menjadi tugas yang menantang. Artikel ini akan memberikan panduan lengkap tentang bagaimana memilih peralatan alat medis yang memenuhi standar, serta tips… Continue reading Bagaiman Memilih Peralatan Alat Medis yang Memenuhi Standar

The post Bagaiman Memilih Peralatan Alat Medis yang Memenuhi Standar appeared first on PT. Petra Gracia Kreasi.

]]>

Dalam industri perawatan kesehatan, pemilihan peralatan alat medis yang memenuhi standar sangat penting untuk memastikan keselamatan pasien dan efektivitas prosedur medis. Dengan begitu banyak pilihan yang tersedia di pasaran, memilih peralatan yang tepat dapat menjadi tugas yang menantang. Artikel ini akan memberikan panduan lengkap tentang bagaimana memilih peralatan alat medis yang memenuhi standar, serta tips yang dapat membantu Anda membuat keputusan yang tepat.

1. Menentukan Kebutuhan Spesifik

Langkah pertama dalam memilih peralatan alat medis adalah memahami kebutuhan spesifik dari fasilitas kesehatan atau praktik Anda. Pertimbangkan jenis prosedur medis yang akan Anda lakukan dan fitur apa yang diperlukan untuk mendukung kegiatan tersebut. Misalnya, apakah Anda membutuhkan peralatan untuk diagnosis, pencegahan, atau perawatan?

2. Mengevaluasi Kualitas Produk

Kualitas produk adalah hal yang tidak boleh diabaikan saat memilih peralatan alat medis. Pastikan untuk memilih merek yang terpercaya dan memiliki reputasi baik dalam industri. Lakukan riset mendalam tentang produsen dan periksa apakah produk mereka telah disertifikasi oleh otoritas regulasi yang berwenang.

3. Memeriksa Kepatuhan Regulasi

Kepatuhan terhadap regulasi dan standar industri adalah aspek penting dalam memilih peralatan alat medis. Pastikan peralatan yang Anda pilih memenuhi semua persyaratan yang ditetapkan oleh badan pengawas kesehatan dan organisasi standar seperti ISO (International Organization for Standardization).

4. Mempertimbangkan Faktor Keselamatan

Keselamatan pasien harus menjadi prioritas utama dalam pemilihan peralatan alat medis. Pilihlah peralatan yang dilengkapi dengan fitur keselamatan yang canggih dan dirancang untuk mengurangi risiko cedera atau infeksi nosokomial.

5. Membandingkan Fitur dan Fungsi

Bandingkan fitur dan fungsi dari beberapa pilihan peralatan sebelum membuat keputusan akhir. Perhatikan hal-hal seperti keakuratan, ketepatan, kemudahan penggunaan, dan kemampuan untuk diintegrasikan dengan sistem lain yang mungkin Anda miliki.

6. Memperhatikan Biaya Total Pemilikan

Biaya total pemilikan merupakan faktor penting yang harus dipertimbangkan dalam memilih peralatan alat medis. Selain harga pembelian, pertimbangkan juga biaya operasional, pemeliharaan, dan perbaikan jangka panjang. Pilihlah peralatan yang menawarkan nilai terbaik untuk investasi Anda.

7. Mencari Umpan Balik dan Review

Mencari umpan balik dari pengguna lain dan membaca ulasan produk dapat memberikan wawasan berharga tentang kinerja dan keandalan peralatan alat medis yang dipilih. Tinjauan dari pengguna yang telah menggunakan peralatan secara langsung dapat membantu Anda membuat keputusan yang lebih terinformasi.

8. Mengikuti Perkembangan Teknologi

Industri peralatan alat medis terus berkembang dengan cepat, dengan penemuan dan inovasi baru yang terjadi secara teratur. Pertimbangkan untuk memilih peralatan yang menggunakan teknologi terkini dan memiliki kemampuan untuk diupgrade atau diperbarui di masa depan.

Kesimpulan

Memilih peralatan alat medis yang memenuhi standar adalah langkah penting dalam memastikan kualitas perawatan kesehatan yang optimal. Dengan memperhatikan kebutuhan spesifik, kualitas produk, kepatuhan regulasi, keselamatan, fitur dan fungsi, biaya total pemilikan, umpan balik pengguna, dan perkembangan teknologi, Anda dapat membuat keputusan yang tepat untuk fasilitas kesehatan atau praktik Anda. Dengan demikian, Anda dapat meningkatkan efisiensi, keselamatan, dan hasil perawatan pasien Anda.

The post Bagaiman Memilih Peralatan Alat Medis yang Memenuhi Standar appeared first on PT. Petra Gracia Kreasi.

]]>
https://petragk.com/tips-memilih-peralatan-medis/feed/ 0
Distributor Perlengkapan Medis, Mengapa Kami? https://petragk.com/distributor-peralatan-medis-petragk/ https://petragk.com/distributor-peralatan-medis-petragk/#respond Wed, 14 Feb 2024 02:48:00 +0000 https://petragk.com/?p=579 Dalam dunia perawatan kesehatan, peralatan medis menjadi tulang punggung untuk menyediakan perawatan yang berkualitas dan menyeluruh bagi pasien. Peran distributor peralatan medis sangat vital dalam rantai pasok ini, karena mereka bertanggung jawab atas distribusi produk-produk yang penting ini ke berbagai fasilitas kesehatan. Dalam artikel ini, kita akan menjelajahi pentingnya menjadi distributor peralatan medis yang dapat… Continue reading Distributor Perlengkapan Medis, Mengapa Kami?

The post Distributor Perlengkapan Medis, Mengapa Kami? appeared first on PT. Petra Gracia Kreasi.

]]>
Dalam dunia perawatan kesehatan, peralatan medis menjadi tulang punggung untuk menyediakan perawatan yang berkualitas dan menyeluruh bagi pasien. Peran distributor peralatan medis sangat vital dalam rantai pasok ini, karena mereka bertanggung jawab atas distribusi produk-produk yang penting ini ke berbagai fasilitas kesehatan. Dalam artikel ini, kita akan menjelajahi pentingnya menjadi distributor peralatan medis yang dapat dipercaya dan berpengalaman, serta strategi untuk membangun bisnis yang berkelanjutan dalam industri ini.

Mengapa Petra GK?

Kenapa memilih kami untuk menjadi distributor peralatan medis? Karena kami memiliki berbagai keunggulan dalam menyediakan kebutuhan alat medis diantaranya :

Kualitas Produk

Sebagai distributor peralatan medis, kepercayaan dari pelanggan terutama bergantung pada kualitas produk yang Anda distribusikan. Produk-produk berkualitas tinggi tidak hanya meningkatkan kepercayaan pelanggan tetapi juga mengurangi risiko terjadinya komplikasi atau masalah kesehatan yang mungkin timbul akibat penggunaan peralatan yang kurang berkualitas.

Keandalan dan Ketersediaan

Distributor peralatan medis yang andal akan selalu memastikan ketersediaan produk-produk penting, seperti alat-alat medis dan perlengkapan lainnya. Ini sangat penting karena ketersediaan yang baik dapat memengaruhi proses pengobatan pasien.

Kepatuhan Regulasi

Industri peralatan medis sangat diatur oleh berbagai badan pengawas kesehatan. Menjadi distributor yang mematuhi semua peraturan dan standar yang berlaku adalah suatu keharusan. Pelanggaran dalam hal ini tidak hanya dapat merugikan bisnis Anda tetapi juga dapat membahayakan nyawa pasien.

Pelayanan Pelanggan yang Unggul

Pelayanan pelanggan yang baik adalah kunci kesuksesan dalam bisnis apa pun, dan ini juga berlaku dalam distributor peralatan medis. Menyediakan layanan pelanggan yang responsif, informatif, dan ramah akan membangun hubungan yang kuat dengan pelanggan.

Menjadi distributor peralatan medis yang terpercaya dan berpengalaman adalah langkah penting dalam mendukung perawatan kesehatan yang berkualitas. Petra GK terus berkomitmen untuk memberikan yang terbaik untuk Anda.

The post Distributor Perlengkapan Medis, Mengapa Kami? appeared first on PT. Petra Gracia Kreasi.

]]>
https://petragk.com/distributor-peralatan-medis-petragk/feed/ 0