PluginProbe
Elementor Website Builder – more than just a page builder / 3.34.0-beta1
Elementor Website Builder – more than just a page builder v3.34.0-beta1
4.3.4 4.3.3 4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 All 457 releases
← All changes | assets/js/packages/editor-variables/editor-variables.min.js +1 -6 4.3.3 → 3.34.0-beta1 View file →
@@ -1,6 +1 @@
1 -(function(){var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,__commonJSMin=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),__copyProps=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},__toESM=(n,r,a)=>(a=n==null?{}:e(i(n)),__copyProps(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),o=__toESM(__commonJSMin(((e,t)=>{var n=Object.create,r=Object.defineProperty,i=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,__export=(e,t)=>{for(var n in t)r(e,n,{get:t[n],enumerable:!0})},__copyProps=(e,t,n,o)=>{if(t&&typeof t==`object`||typeof t==`function`)for(let c of a(t))!s.call(e,c)&&c!==n&&r(e,c,{get:()=>t[c],enumerable:!(o=i(t,c))||o.enumerable});return e},__toESM=(e,t,i)=>(i=e==null?{}:n(o(e)),__copyProps(t||!e||!e.__esModule?r(i,`default`,{value:e,enumerable:!0}):i,e)),__toCommonJS=e=>__copyProps(r({},`__esModule`,{value:!0}),e),c={};__export(c,{GLOBAL_VARIABLES_URI:()=>Nr,Utils:()=>vi,VariablesManagerPanelEmbedded:()=>VariablesManagerPanelEmbedded,getMenuActionsForVariable:()=>getMenuActionsForVariable,hasVariable:()=>hasVariable,init:()=>init,registerVariableType:()=>_e,registerVariableTypes:()=>registerVariableTypes,service:()=>N,sizeVariablePropTypeUtil:()=>ti,trackVariablesManagerEvent:()=>trackVariablesManagerEvent}),t.exports=__toCommonJS(c);var l=__toESM(globalThis.React),u=globalThis.React,d=globalThis.elementorV2.editorCurrentUser,f=globalThis.elementorV2.editorPanels,p=globalThis.elementorV2.editorUi,m=globalThis.elementorV2.icons,h=globalThis.elementorV2.ui,g=globalThis.wp.i18n,_=globalThis.elementorV2.events,trackVariableEvent=({varType:e,controlPath:t,action:n,executedBy:r})=>{let{dispatchEvent:i,config:a}=(0,_.getMixpanel)();if(!a?.names?.variables?.[n])return;let o=a.names.variables[n],s={var_type:e,action_type:o};r&&(s.executed_by=r);let c={location:a?.locations?.variables||``,secondaryLocation:a?.secondaryLocations?.variablesPopover||``,trigger:a?.triggers?.click||``};(!r||r!==`mcp_tool`)&&(s={...c,...s}),t&&(s.control_path=t),i?.(o,s)},trackVariablesManagerEvent=({action:e,source:t,varType:n,controlPath:r})=>{let{dispatchEvent:i,config:a}=(0,_.getMixpanel)();if(!a?.names?.variables?.[e])return;let o=a.names.variables[e],s={location:a?.locations?.variablesManager||``,trigger:a?.triggers?.click||``,action_type:o};t&&(s.source=t),n&&(s.var_type=n),r&&(s.style_control_path=r),i?.(o,s)},trackVariableSyncToV3=({variableLabel:e,action:t})=>{let{dispatchEvent:n,config:r}=(0,_.getMixpanel)();if(!r?.names?.variables?.variableSyncToV3)return;let i=r.names.variables.variableSyncToV3,a=t===`sync`;n?.(i,{interaction_type:`click`,target_type:e,target_name:a?`sync_to_v3`:`unsync_to_v3`,interaction_result:a?`var_is_synced_to_V3`:`var_is_unsynced_from_V3`,target_location:`widget_panel`,location_l1:`var_manager`,interaction_description:a?`user_synced_${e}_to_v3`:`user_unsync_${e}_from_v3`})},v=globalThis.elementorV2.icons,y=globalThis.wp.i18n,b={MISSING_VARIABLE_NAME:(0,y.__)(`Give your variable a name.`,`elementor`),MISSING_VARIABLE_VALUE:(0,y.__)(`Add a value to complete your variable.`,`elementor`),INVALID_CHARACTERS:(0,y.__)(`Use letters, numbers, dashes (-), or underscores (_) for the name.`,`elementor`),NO_NON_SPECIAL_CHARACTER:(0,y.__)(`Names have to include at least one non-special character.`,`elementor`),VARIABLE_LABEL_MAX_LENGTH:(0,y.__)(`Keep names up to 50 characters.`,`elementor`),DUPLICATED_LABEL:(0,y.__)(`This variable name already exists. Please choose a unique name.`,`elementor`),UNEXPECTED_ERROR:(0,y.__)(`There was a glitch. Try saving your variable again.`,`elementor`),BATCH:{DUPLICATED_LABELS:(e,t)=>(0,y.sprintf)((0,y.__)(`We found %1$d duplicated %2$s.`,`elementor`),e,t),UNEXPECTED_ERROR:(0,y.__)(`There was a glitch.`,`elementor`),DUPLICATED_LABEL_ACTION:(0,y.__)(`Take me there`,`elementor`),DUPLICATED_LABEL_ACTION_MESSAGE:(0,y.__)(`Please rename the variables.`,`elementor`),UNEXPECTED_ERROR_ACTION_MESSAGE:(0,y.__)(`Try saving your variables again.`,`elementor`)}},x=50,mapServerError=e=>{if(e?.response?.data?.code===`duplicated_label`)return{field:`label`,message:b.DUPLICATED_LABEL};if(e?.response?.data?.code===`batch_duplicated_label`){let t=e?.response?.data?.data??{},n=Object.keys(t).length,r=n===1?`name`:`names`,i=Object.keys(t);return{field:`label`,message:b.BATCH.DUPLICATED_LABELS(n,r),severity:`error`,IconComponent:v.AlertTriangleFilledIcon,action:{label:b.BATCH.DUPLICATED_LABEL_ACTION,message:b.BATCH.DUPLICATED_LABEL_ACTION_MESSAGE,data:{duplicatedIds:i}}}}if(e?.response?.data?.code===`batch_operation_failed`)return{field:`label`,message:b.BATCH.UNEXPECTED_ERROR,severity:`secondary`,IconComponent:v.InfoCircleFilledIcon,action:{message:b.BATCH.UNEXPECTED_ERROR_ACTION_MESSAGE}}},validateLabel=(e,t)=>e.trim()?/^[a-zA-Z0-9_-]+$/.test(e)?/[a-zA-Z0-9]/.test(e)?x<e.length?b.VARIABLE_LABEL_MAX_LENGTH:Object.values(t??{}).some(t=>t.label===e)?b.DUPLICATED_LABEL:``:b.NO_NON_SPECIAL_CHARACTER:b.INVALID_CHARACTERS:b.MISSING_VARIABLE_NAME,labelHint=e=>x*.8-1<e.length?b.VARIABLE_LABEL_MAX_LENGTH:``,validateValue=e=>e.trim()?``:b.MISSING_VARIABLE_VALUE,S=globalThis.elementorV2.editorCanvas,C=__toESM(globalThis.React),ee=globalThis.elementorV2.editorCanvas,w=globalThis.elementorV2.ui,te=globalThis.wp.i18n,ne=globalThis.elementorV2.ui,re=(0,ne.styled)(ne.UnstableColorIndicator)(({theme:e})=>({borderRadius:`${e.shape.borderRadius/2}px`,marginRight:e.spacing(.25)})),T=globalThis.elementorV2.editorProps,ie=globalThis.elementorV2.schema,E=(0,T.createPropUtils)(`global-color-variable`,ie.z.string()),ae=globalThis.wp.i18n,D=globalThis.elementorV2.httpClient,O=`elementor/v1/variables`,k={list:()=>(0,D.httpService)().get(O+`/list`),create:(e,t,n)=>(0,D.httpService)().post(O+`/create`,{type:e,label:t,value:n}),update:(e,t,n,r)=>(0,D.httpService)().put(O+`/update`,{id:e,label:t,value:n,type:r}),delete:e=>(0,D.httpService)().post(O+`/delete`,{id:e}),restore:(e,t,n,r)=>{let i={id:e};return t&&(i.label=t),n&&(i.value=n),r&&(i.type=r),(0,D.httpService)().post(O+`/restore`,i)},batch:e=>(0,D.httpService)().post(O+`/batch`,e)},generateTempId=()=>`tmp-${Date.now().toString(36)}-${Math.random().toString(36).substring(2,8)}`,isTempId=e=>e.startsWith(`tmp-`),buildOperationsArray=(e,t,n)=>{let r=[];return Object.entries(t).forEach(([t,n])=>{if(isTempId(t))r.push({type:`create`,variable:{...n,id:t}});else if(e[t]){let i=e[t],a=i.sync_to_v3!==n.sync_to_v3;i.deleted&&!n.deleted?r.push({type:`restore`,id:t,...i.label!==n.label&&{label:n.label},...i.value!==n.value&&{value:n.value}}):!n.deleted&&(i.label!==n.label||i.value!==n.value||i.order!==n.order||i.type!==n.type||a)&&r.push({type:`update`,id:t,variable:{...i.label!==n.label&&{label:n.label},...i.value!==n.value&&{value:n.value},...i.order!==n.order&&{order:n.order},...i.type!==n.type&&{type:n.type},...a&&{sync_to_v3:n.sync_to_v3}}})}}),n.forEach(e=>{r.push({type:`delete`,id:e})}),r.filter(e=>{let n=e.id||e.variable?.id;return n&&!(isTempId(n)&&t[n]?.deleted)})},oe=`elementor-global-variables`,se=`elementor-global-variables-watermark`,ce=`variables:updated`,A=`RW`,le=`RO`,Storage=class{state;notifyChange(){window.dispatchEvent(new Event(ce))}constructor(){this.state={watermark:-1,variables:{}}}load(){return this.state.watermark=parseInt(localStorage.getItem(se)||`-1`),this.state.variables=JSON.parse(localStorage.getItem(oe)||`{}`),this.state.variables}fill(e,t){this.state.variables={},e&&Object.keys(e).length&&(this.state.variables=e),this.state.watermark=t,localStorage.setItem(se,this.state.watermark.toString()),localStorage.setItem(oe,JSON.stringify(this.state.variables)),this.notifyChange()}add(e,t){this.load(),this.state.variables[e]=t,localStorage.setItem(oe,JSON.stringify(this.state.variables)),this.notifyChange()}update(e,t){this.load(),this.state.variables[e]=t,localStorage.setItem(oe,JSON.stringify(this.state.variables)),this.notifyChange()}watermark(e){this.state.watermark=e,localStorage.setItem(se,this.state.watermark.toString())}watermarkDiff(e,t){let n=t-this.state.watermark;return A===e?n!==1:le===e&&n!==0}},ue=globalThis.elementorV2.editorV1Adapters,de=globalThis.elementorV2.editorProps,fe=globalThis.elementorV2.schema,pe=(0,de.createPropUtils)(`global-font-variable`,fe.z.string()),createStyleVariablesRepository=()=>{let e={},subscription,subscribe=e=>(subscription=e,()=>{subscription=()=>{}}),notify=()=>{typeof subscription==`function`&&subscription({...e})},shouldUpdate=(t,n)=>!!(!(t in e)||e[t].label!==n.label||e[t].value!==n.value||!e[t]?.deleted&&n?.deleted||e[t]?.deleted&&!n?.deleted),applyUpdates=t=>{let n=!1;for(let[r,i]of Object.entries(t))shouldUpdate(r,i)&&(e[r]=i,i.type===pe.key&&fontEnqueue(i.value),n=!0);return n},fontEnqueue=e=>{if(e)try{(0,ue.enqueueFont)(e)}catch{}},update=e=>{applyUpdates(e)&&notify()};return{subscribe,update}},j=createStyleVariablesRepository(),M=new Storage,N={variables:()=>M.load(),findIdByLabel(e){let t=Object.entries(this.variables()).find(([,t])=>t.label===e);if(!t)throw Error(`Variable with label ${e} not found`);return t[0]},findVariableByLabel(e){return Object.values(this.variables()).find(t=>t.label===e)||null},getWatermark:()=>M.state.watermark,init:()=>N.load(),load:()=>k.list().then(e=>{let{success:t,data:n}=e.data;if(!t)throw Error(`Unexpected response from server`);return n}).then(e=>{let{variables:t,watermark:n}=e;return M.fill(t,n),j.update(t),t}),create:({type:e,label:t,value:n},r={})=>k.create(e,t,n).then(e=>{let{success:t,data:n}=e.data;if(!t){let e=n?.message||(0,ae.__)(`Unexpected response from server`,`elementor`);throw Error(e)}return n}).then(t=>{let{variable:n,watermark:i}=t;handleWatermark(A,i);let{id:a,...o}=n;return M.add(a,o),j.update({[a]:o}),trackVariableEvent({varType:e,action:`save`,...r.eventData}),{id:a,variable:o}}),update:(e,{label:t,value:n,type:r},i={})=>k.update(e,t,n,r).then(e=>{let{success:t,data:n}=e.data;if(!t){let e=n?.message||(0,ae.__)(`Unexpected response from server`,`elementor`);throw Error(e)}return n}).then(e=>{let{variable:t,watermark:n}=e;handleWatermark(A,n);let{id:r,...a}=t;return M.update(r,a),j.update({[r]:a}),trackVariableEvent({varType:a.type,action:`update`,...i.eventData}),{id:r,variable:a}}),delete:e=>k.delete(e).then(e=>{let{success:t,data:n}=e.data;if(!t)throw Error(`Unexpected response from server`);return n}).then(e=>{let{variable:t,watermark:n}=e;handleWatermark(A,n);let{id:r,...i}=t;return M.update(r,i),j.update({[r]:i}),{id:r,variable:i}}),restore:(e,t,n,r)=>k.restore(e,t,n,r).then(e=>{let{success:t,data:n}=e.data;if(!t)throw Error(`Unexpected response from server`);return n}).then(e=>{let{variable:t,watermark:n}=e;handleWatermark(A,n);let{id:r,...i}=t;return M.update(r,i),j.update({[r]:i}),{id:r,variable:i}}),batchSave:(e,t,n)=>{let r=buildOperationsArray(e,t,n),i={operations:r,watermark:M.state.watermark};return r.length===0?Promise.resolve({success:!0,watermark:M.state.watermark,operations:0}):k.batch(i).then(e=>{let{success:t,data:n}=e.data;if(!t)throw Error(`Unexpected response from server`);return n}).then(e=>{let{results:t,watermark:n}=e;return handleWatermark(A,n),t&&t.forEach(e=>{let t=e.id;e.variable&&(e.type===`create`?M.add(t,e.variable):M.update(t,e.variable),j.update({[t]:e.variable}))}),{success:!0,watermark:n,operations:r.length}})}},handleWatermark=(e,t)=>{M.watermarkDiff(e,t)&&setTimeout(()=>N.load(),500),M.watermark(t)},applyLocalMutation=(e,t,n)=>{let{id:r,...i}=t;handleWatermark(A,n),e===`create`?M.add(r,i):M.update(r,i),j.update({[r]:i})},resolveCssVariable=(e,t)=>{let n=e,r=``;if(t&&(r=t.value),t&&!t.deleted&&(n=t.label),!n.trim())return null;let i=`--${n}`;return r.trim()?`var(${i}, ${r})`:`var(${i})`},me=(0,ee.createTransformer)(e=>{let t=N.variables()[e];if(!t)return C.createElement(`span`,null,(0,te.__)(`Missing variable`,`elementor`));let n=t.type===E.key,r=resolveCssVariable(e,t);return C.createElement(w.Stack,{direction:`row`,spacing:.5,sx:{paddingInline:`1px`},alignItems:`center`},n&&C.createElement(re,{size:`inherit`,value:t.value}),C.createElement(w.Typography,{variant:`caption`,overflow:`hidden`,whiteSpace:`nowrap`,textOverflow:`ellipsis`},r))}),he=globalThis.elementorV2.editorCanvas,ge=(0,he.createTransformer)((e,{key:t})=>{let n=N.variables()[e]||N.findVariableByLabel(e);if(!n)return null;if((0,he.isGridTrackProperty)(t)){let e=parseInt((n.value??``).trim(),10);return(0,he.formatGridTrackRepeat)(e)}return resolveCssVariable(N.findIdByLabel(n.label),n)});function createVariableTypeRegistry(){let e={},registerVariableType2=({key:t,icon:n,startIcon:r,valueField:i,propTypeUtil:a,variableType:o,defaultValue:s,selectionFilter:c,valueTransformer:l,styleTransformer:u,fallbackPropTypeUtil:d,isCompatible,emptyState:f,isActive:p=!0,menuActionsFactory:m})=>{let h=t??a.key;isCompatible||=(e,t)=>e.kind===`union`&&t.type in e.prop_types,e[h]={icon:n,startIcon:r,valueField:i,propTypeUtil:a,variableType:o,defaultValue:s,selectionFilter:c,valueTransformer:l,fallbackPropTypeUtil:d,isCompatible,emptyState:f,isActive:p,menuActionsFactory:m},registerTransformer(a.key,u),registerInheritanceTransformer(a.key)},registerTransformer=(e,t)=>{S.styleTransformersRegistry.register(e,t??ge)},registerInheritanceTransformer=e=>{S.stylesInheritanceTransformersRegistry.register(e,me)},getVariableType2=t=>e[t],getVariableTypes2=()=>e,hasVariableType2=t=>t in e&&!!e[t].isActive;return{registerVariableType:registerVariableType2,getVariableType:getVariableType2,getVariableTypes:getVariableTypes2,hasVariableType:hasVariableType2}}var{registerVariableType:_e,getVariableType:P,getVariableTypes:ve,hasVariableType:ye}=createVariableTypeRegistry();function getMenuActionsForVariable(e,t){let n=P(e);return n?.menuActionsFactory?n.menuActionsFactory(t):[]}var be=__toESM(globalThis.React),xe=globalThis.elementorV2.editorUi,Se=globalThis.elementorV2.ui,Ce=globalThis.wp.i18n,DeleteConfirmationDialog=({open:e,label:t,closeDialog:n,onConfirm:r})=>be.createElement(xe.ConfirmationDialog,{open:e,onClose:n},be.createElement(xe.ConfirmationDialog.Title,null,(0,Ce.__)(`Delete this variable?`,`elementor`)),be.createElement(xe.ConfirmationDialog.Content,null,be.createElement(xe.ConfirmationDialog.ContentText,null,(0,Ce.__)(`All elements using`,`elementor`),`\xA0`,be.createElement(Se.Typography,{variant:`subtitle2`,component:`span`,sx:{lineBreak:`anywhere`}},t),`\xA0`,(0,Ce.__)(`will keep their current values, but the variable itself will be removed.`,`elementor`))),be.createElement(xe.ConfirmationDialog.Actions,{onClose:n,onConfirm:r})),we=__toESM(globalThis.React),Te=globalThis.elementorV2.ui,Ee=globalThis.wp.i18n,De=globalThis.elementorV2.editorCurrentUser,usePermissions=()=>{let{canUser:e,isAdmin:t}=(0,De.useCurrentUserCapabilities)();return{canAssign:()=>e(`edit_posts`),canUnlink:()=>e(`edit_posts`),canAdd:()=>t,canDelete:()=>t,canEdit:()=>t,canRestore:()=>t,canManageSettings:()=>t}},EmptyState=({icon:e,title:t,message:n,onAdd:r,children:i})=>{let a=usePermissions().canAdd(),o=a?t:(0,Ee.__)(`There are no variables`,`elementor`),s=a?n:(0,Ee.__)(`With your current role, you can only connect and detach variables.`,`elementor`);return we.createElement(Content,{title:o,message:s,icon:e},i||r&&we.createElement(Te.Button,{variant:`outlined`,color:`secondary`,size:`small`,onClick:r},(0,Ee.__)(`Create a variable`,`elementor`)))};function Content({title:e,message:t,icon:n,children:r}){return we.createElement(Te.Stack,{gap:1,alignItems:`center`,justifyContent:`flex-start`,height:`100%`,color:`text.secondary`,sx:{p:2.5,pt:8,pb:5.5}},n,we.createElement(Te.Typography,{align:`center`,variant:`subtitle2`},e),we.createElement(Te.Typography,{align:`center`,variant:`caption`,maxWidth:`180px`},t),r)}var Oe=__toESM(globalThis.React),ke=globalThis.elementorV2.ui,Ae=globalThis.wp.i18n,NoSearchResults=({searchValue:e,onClear:t,icon:n})=>Oe.createElement(ke.Stack,{gap:1,alignItems:`center`,justifyContent:`center`,p:2.5,color:`text.secondary`,sx:{pb:3.5,pt:8}},n,Oe.createElement(ke.Typography,{align:`center`,variant:`subtitle2`},(0,Ae.__)(`Sorry, nothing matched`,`elementor`),Oe.createElement(`br`,null),`“`,e,`”.`),Oe.createElement(ke.Typography,{align:`center`,variant:`caption`,sx:{display:`flex`,flexDirection:`column`}},(0,Ae.__)(`Try something else.`,`elementor`),Oe.createElement(ke.Link,{color:`text.secondary`,variant:`caption`,component:`button`,onClick:t},(0,Ae.__)(`Clear & try again`,`elementor`)))),je=globalThis.React,useAutoEdit=()=>{let[e,t]=(0,je.useState)(void 0);return{autoEditVariableId:e,startAutoEdit:(0,je.useCallback)(e=>{t(e)},[]),handleAutoEditComplete:(0,je.useCallback)(()=>{setTimeout(()=>{t(void 0)},100)},[])}},Me=globalThis.React,useErrorNavigation=()=>{let e=(0,Me.useRef)(0);return{createNavigationCallback:(0,Me.useCallback)((t,n,r)=>()=>{if(!t?.length)return;let i=e.current,a=t[i];if(a){n(a);let o=i+1;o>=t.length?(r(),e.current=0):e.current=o}},[]),resetNavigation:(0,Me.useCallback)(()=>{e.current=0},[])}},F=globalThis.React,Ne=globalThis.React,Pe=globalThis.elementorV2.editorControls,Fe=__toESM(globalThis.React),Ie=globalThis.React,Le=(0,Ie.createContext)(null);function VariableTypeProvider({children:e,propTypeKey:t}){return Fe.createElement(Le.Provider,{value:t},e)}function useVariableType(){let e=(0,Ie.useContext)(Le);if(e===null)throw Error(`useVariableType must be used within a VariableTypeProvider`);return P(e)}function filterBySearch(e,t){let n=t.toLowerCase();return e.filter(e=>e.label.toLowerCase().includes(n))}var variablesToList=e=>Object.entries(e).map(([e,t])=>({key:e,...t})),toNormalizedVariable=({key:e,label:t,value:n,order:r,sync_to_v3:i})=>({key:e,label:t,value:n,order:r,sync_to_v3:i}),applySelectionFilters=(e,t)=>{let n={};return e.forEach(e=>(n[e.type]??=[]).push(e)),Object.entries(n).flatMap(([e,n])=>{let r=t[e]?.selectionFilter,i=n.map(toNormalizedVariable);return(r?.(i)??i).map(t=>({...t,type:e}))})},getVariables=(e=!0)=>{let t=N.variables();return e?t:Object.fromEntries(Object.entries(t).filter(([,e])=>!e.deleted))},hasVariable=e=>getVariables()[e]!==void 0,useVariable=e=>getVariable(e);function getVariable(e){let t=getVariables();return t?.[e]?{...t[e],key:e}:null}var useFilteredVariables=(e,t)=>{let n=usePropVariables(t),r=useVariableSelectionFilter(n),i=filterBySearch(r,e);return{list:i.sort((e,t)=>(e.order??2**53-1)-(t.order??2**53-1)),hasMatches:i.length>0,isSourceNotEmpty:r.length>0,hasNoCompatibleVariables:n.length>0&&r.length===0}},useVariableSelectionFilter=e=>{let{selectionFilter:t}=useVariableType(),{propType:n}=(0,Pe.useBoundProp)();return t?t(e,n):e},usePropVariables=e=>(0,Ne.useMemo)(()=>normalizeVariables(e),[e]),getMatchingTypes=e=>{let t=[],n=ve(),r=P(e);return Object.entries(n).forEach(([e,n])=>{r.variableType===n.variableType&&t.push(e)}),t},normalizeVariables=e=>{let t=getVariables(!1),n=getMatchingTypes(e);return variablesToList(t).filter(e=>n.includes(e.type)).map(toNormalizedVariable)},extractId=({id:e})=>e,createVariable=(e,t)=>N.create(e,t).then(extractId),updateVariable=(e,{value:t,label:n,type:r},i)=>N.update(e,{value:t,label:n,type:r},i).then(extractId),deleteVariable=e=>N.delete(e).then(extractId),restoreVariable=(e,t,n,r)=>N.restore(e,t,n,r).then(extractId),Re=`-Copy`,trimToFit=(e,t)=>{let n=e+t;return n.length<=x?n:e.slice(0,x-t.length)+t},generateDuplicateLabel=(e,t)=>{let n=new Set(t),r=trimToFit(e,Re);if(!n.has(r))return r;for(let t=2;t<=n.size+1;t++){let r=trimToFit(e,`${Re}-${t}`);if(!n.has(r))return r}return r},useVariablesManagerState=()=>{let[e,t]=(0,F.useState)(()=>getVariables(!1)),[n,r]=(0,F.useState)([]),[i,a]=(0,F.useState)(!1),[o,s]=(0,F.useState)(!1),[c,l]=(0,F.useState)(!1),[u,d]=(0,F.useState)(``);(0,F.useEffect)(()=>{let handleStorageUpdated=()=>{t(getVariables(!1)),r([]),s(!1)};return window.addEventListener(ce,handleStorageUpdated),()=>{window.removeEventListener(ce,handleStorageUpdated)}},[]);let f=(0,F.useCallback)(n=>{Object.entries(n).some(([t,n])=>{let r=e[t];return!r||r.label!==n.label||r.value!==n.value||r.order!==n.order||r.type!==n.type||(r.sync_to_v3??!1)!==(n.sync_to_v3??!1)})&&(t({...e,...n}),s(!0))},[e]),p=(0,F.useCallback)((e,n,r)=>{let i=generateTempId(),a={id:i,label:n.trim(),value:r.trim(),type:e};return t(e=>({...e,[i]:a})),s(!0),i},[]),m=(0,F.useCallback)(e=>{let n=generateTempId();return t(t=>{let r=t[e];if(!r||r.deleted)return t;let i=Object.values(t).filter(e=>!e.deleted).map(e=>e.label);return{...t,[n]:{label:generateDuplicateLabel(r.label,i),value:r.value,type:r.type}}}),s(!0),n},[]),h=(0,F.useCallback)(e=>{r(t=>[...t,e]),t(t=>({...t,[e]:{...t[e],deleted:!0}})),s(!0)},[]),g=(0,F.useCallback)(e=>{t(t=>({...t,[e]:{...t[e],sync_to_v3:!0}})),s(!0)},[]),_=(0,F.useCallback)(e=>{t(t=>({...t,[e]:{...t[e],sync_to_v3:!1}})),s(!0)},[]),handleSearch=e=>{d(e)},v=(0,F.useCallback)(async()=>{let i=getVariables(!1);l(!0);let a=await N.batchSave(i,e,n);if(a.success){await N.load();let e=N.variables();t(e),r([]),s(!1)}return{success:a.success}},[e,n]);return{variables:(0,F.useCallback)(()=>{let t=filterBySearch(applySelectionFilters(variablesToList(e).filter(e=>!e.deleted),ve()),u);return Object.fromEntries(t.map(({key:e,...t})=>[e,t]))},[e,u])(),deletedVariables:n,isDirty:o,isSaveDisabled:i,handleOnChange:f,createVariable:p,duplicateVariable:m,handleDeleteVariable:h,handleStartSync:g,handleStopSync:_,handleSave:v,isSaving:c,handleSearch,searchValue:u,setIsSaving:l,setIsSaveDisabled:a}},I=__toESM(globalThis.React),ze=globalThis.React,Be=globalThis.elementorV2.icons,Ve=globalThis.elementorV2.ui,He=globalThis.elementorV2.utils,Ue=globalThis.wp.i18n,useQuotaPermissions=e=>{let t={...window.ElementorVariablesQuotaConfig??{},...window.ElementorVariablesQuotaConfigExtended??{}},n=t[e]===void 0&&window.elementorPro,r=t[e]||0,i=n||r>0;return{canAdd:()=>i,canEdit:()=>i}},We=__toESM(globalThis.React),Ge=globalThis.React,Ke=globalThis.elementorV2.editorControls,qe=globalThis.elementorV2.editorUi,Je=globalThis.elementorV2.ui,Ye=globalThis.elementorV2.utils,Xe=globalThis.wp.i18n,Ze=(0,Ge.forwardRef)(({variableType:e,upgradeUrl:t,trackingData:n},r)=>{let[i,a]=(0,Ge.useState)(!1);(0,qe.useCanvasClickHandler)(i,()=>a(!1));let o=(0,Ge.useCallback)(()=>{a(e=>(e||(0,Ke.trackViewPromotion)(n),!e))},[n]);(0,Ge.useImperativeHandle)(r,()=>({toggle:o}),[o]);let s=(0,Xe.sprintf)((0,Xe.__)(`%s variables`,`elementor`),(0,Ye.capitalize)(e)),c=(0,Xe.sprintf)((0,Xe.__)(`Upgrade to continue creating and editing %s variables.`,`elementor`),e);return We.createElement(qe.PromotionPopover,{open:i,title:s,content:c,ctaText:(0,Xe.__)(`Upgrade now`,`elementor`),ctaUrl:t,onClose:e=>{e.stopPropagation(),a(!1)},onCtaClick:()=>(0,Ke.trackUpgradePromotionClick)(n)},We.createElement(Je.Box,{onClick:e=>{e.stopPropagation(),o()},sx:{cursor:`pointer`,display:`inline-flex`}},We.createElement(qe.PromotionChip,null)))}),Qe={target_name:`variables_manager`,target_location:`variables_manager`,location_l1:`create variable menu`},$e=`tiny`,VariableManagerCreateMenu=({variables:e,onCreate:t,menuState:n,outlinedTrigger:r=!1})=>{let i=(0,ze.useRef)(null),a=ve(),o=(0,ze.useMemo)(()=>Object.entries(a).filter(([,e])=>!!e.defaultValue).map(([e,t])=>({key:e,propTypeKey:t.propTypeUtil.key,variableType:t.variableType,defaultValue:t.defaultValue||``,icon:t.icon})),[a]);return I.createElement(I.Fragment,null,I.createElement(Ve.IconButton,{...(0,Ve.bindTrigger)(n),ref:i,size:$e,variant:r?`outlined`:void 0,"aria-label":(0,Ue.__)(`Add variable`,`elementor`)},I.createElement(Be.PlusIcon,{fontSize:$e})),I.createElement(Ve.Menu,{disablePortal:!0,MenuListProps:{dense:!0},PaperProps:{elevation:6},...(0,Ve.bindMenu)(n),anchorEl:i.current,anchorOrigin:{vertical:`bottom`,horizontal:`right`},transformOrigin:{vertical:`top`,horizontal:`right`},"data-testid":`variable-manager-create-menu`},o.map(r=>I.createElement(MenuOption,{key:r.key,config:r,variables:e,onCreate:t,onClose:n.close}))))},MenuOption=({config:e,variables:t,onCreate:n,onClose:r})=>{let i=(0,ze.useRef)(null),a=useQuotaPermissions(e.propTypeKey),o=(0,He.capitalize)(e.variableType),s=!a.canAdd(),handleClick=()=>{if(s){i.current?.toggle();return}let a=getDefaultName(t,e.variableType);n(e.key,a,e.defaultValue),trackVariablesManagerEvent({action:`add`,varType:e.variableType}),r()};return I.createElement(Ve.MenuItem,{onClick:handleClick,sx:{gap:1.5,cursor:`pointer`}},(0,ze.createElement)(e.icon,{fontSize:$e,color:s?`disabled`:`action`}),I.createElement(Ve.Typography,{variant:`caption`,color:s?`text.disabled`:`text.primary`},o),s&&I.createElement(Ze,{variableType:e.variableType,upgradeUrl:`https://go.elementor.com/go-pro-manager-${e.variableType}-variable/`,ref:i,trackingData:Qe}))},getDefaultName=(e,t)=>{let n=RegExp(`^${t}-(\\d+)$`,`i`),r=new Set;Object.values(e).forEach(e=>{let t=e.label.match(n);t&&r.add(parseInt(t[1],10))});let i=1;for(;r.has(i);)i++;return`${t}-${i}`},L=__toESM(globalThis.React),et=globalThis.React,R=globalThis.elementorV2.ui,tt=globalThis.wp.i18n,nt=__toESM(globalThis.React),rt=globalThis.elementorV2.ui,VariableTableCell=({children:e,isHeader:t,width:n,maxWidth:r,align:i,noPadding:a,sx:o})=>{let s={maxWidth:r??150,cursor:`initial`,typography:`caption`,...t&&{color:`text.primary`,fontWeight:`bold`},...t&&!a&&{padding:`10px 16px`},...n&&{width:n},...o};return nt.createElement(rt.TableCell,{size:`small`,padding:a?`none`:void 0,align:i,sx:s},e)},z=__toESM(globalThis.React),it=globalThis.React,at=globalThis.elementorV2.editorUi,ot=globalThis.elementorV2.icons,st=globalThis.elementorV2.ui,ct=__toESM(globalThis.React),lt=globalThis.React,ut=globalThis.elementorV2.editorUi,dt=globalThis.elementorV2.ui;function isLabelEqual(e,t){return e.trim().toLowerCase()===t.trim().toLowerCase()}var useLabelError=e=>{let[t,n]=(0,lt.useState)(e??{value:``,message:``});return{labelFieldError:t,setLabelFieldError:n}},LabelField=({value:e,error:t,onChange:n,id:r,onErrorChange:i,size:a=`tiny`,focusOnShow:o=!1,selectOnShow:s=!1,showWarningInfotip:c=!1,variables:l,onKeyDown:u})=>{let[d,f]=(0,lt.useState)(e),[p,m]=(0,lt.useState)(``),h=(0,lt.useRef)(null),handleChange=e=>{f(e);let r=validateLabel(e,l);m(r),i?.(r),n(isLabelEqual(e,t?.value??``)||r?``:e)},g=p;isLabelEqual(d,t?.value??``)&&t?.message&&(g=t.message);let _=g?``:labelHint(d),v=ct.createElement(dt.TextField,{ref:h,id:r,size:a,fullWidth:!0,value:d,error:!!g,onChange:e=>handleChange(e.target.value),inputProps:{maxLength:x,...s&&{onFocus:e=>e.target.select()},"aria-label":`Name`,onKeyDown:u},autoFocus:o});if(c){let e=Math.max(240,h.current?.getBoundingClientRect().width??240);return ct.createElement(ut.WarningInfotip,{open:!!(g||_),text:g||_,placement:`bottom-start`,width:e,offset:[0,-15],..._&&{hasError:!1}},v)}return v},ft=__toESM(globalThis.React),B=globalThis.React,pt=globalThis.elementorV2.ui,mt=ft.memo(({initialValue:e,children:t,editableElement:n,onChange:r,prefixElement:i,autoEdit:a=!1,onRowRef:o,onAutoEditComplete:s,gap:c=1,fieldType:l,disabled:u=!1})=>{let[d,f]=(0,B.useState)(e),[p,m]=(0,B.useState)(!1),{labelFieldError:h,setLabelFieldError:g}=useLabelError(),[_,v]=(0,B.useState)(``),y=(0,B.useRef)(null),b=(0,B.useCallback)(()=>{l===`label`&&h?.message||l===`value`&&_||r(d),m(!1)},[d,r,l,h,_]);(0,B.useEffect)(()=>{o?.(y?.current)},[o]),(0,B.useEffect)(()=>{a&&!p&&!u&&(m(!0),s?.())},[a,p,s,u]);let handleDoubleClick=()=>{u||m(!0)},handleKeyDown=e=>{u||(e.key===`Enter`?b():e.key===`Escape`&&m(!1),e.key===` `&&!p&&(e.preventDefault(),m(!0)))},x=(0,B.useCallback)(e=>{f(e)},[]),S=(0,B.useCallback)(e=>{l===`label`?g({value:d,message:e}):v(e)},[l,d,g,v]),C;l===`label`?C=h:l===`value`&&(C={value:d,message:_});let ee=n({value:d,onChange:x,onValidationChange:S,error:C});return p?ft.createElement(pt.ClickAwayListener,{onClickAway:b},ft.createElement(pt.Stack,{ref:y,direction:`row`,alignItems:`center`,gap:c,onDoubleClick:handleDoubleClick,onKeyDown:handleKeyDown,tabIndex:0,role:`button`,"aria-label":`Double click or press Space to edit`},i,ee)):ft.createElement(pt.Stack,{ref:y,direction:`row`,alignItems:`center`,gap:c,onDoubleClick:handleDoubleClick,onKeyDown:handleKeyDown,tabIndex:u?-1:0,role:`button`,"aria-label":u?``:`Double click or press Space to edit`},i,t)}),ht=__toESM(globalThis.React),gt=globalThis.React,_t=globalThis.elementorV2.icons,vt=globalThis.elementorV2.ui,VariableEditMenu=({menuActions:e,disabled:t,itemId:n})=>{let r=(0,vt.usePopupState)({variant:`popover`}),i=(0,vt.bindTrigger)(r);return ht.createElement(ht.Fragment,null,ht.createElement(vt.IconButton,{...i,disabled:t,size:`tiny`,onClick:e=>{e.stopPropagation(),i.onClick?.(e)}},ht.createElement(_t.DotsVerticalIcon,{fontSize:`tiny`})),ht.createElement(vt.Menu,{disablePortal:!0,MenuListProps:{dense:!0},PaperProps:{elevation:6},...(0,vt.bindMenu)(r),anchorEl:r.anchorEl,anchorOrigin:{vertical:`bottom`,horizontal:`right`},transformOrigin:{vertical:`top`,horizontal:`right`},open:r.isOpen,onClose:r.close},e.map(e=>ht.createElement(vt.MenuItem,{key:e.name,onClick:t=>{t.stopPropagation(),e.onClick?.(n),r.close()},sx:{color:e.color,gap:1}},e.icon&&(0,gt.createElement)(e.icon,{fontSize:`inherit`}),` `,e.name))))},yt={target_name:`variables_manager`,target_location:`variables_manager`},VariableRow=e=>{let{row:t,variables:n,handleOnChange:r,autoEditVariableId:i,onAutoEditComplete:a,onFieldError:o,menuActions:s,handleRowRef:c,itemProps:l,showDropIndication:u,triggerProps:d,itemStyle:f,triggerStyle:p,isDragged:m,dropPosition:h,setTriggerRef:g,isSorting:_}=e,v=(0,it.useRef)(null),y=!useQuotaPermissions(t.type).canEdit(),b=u&&h===`before`,x=u&&h===`after`;return z.createElement(st.TableRow,{...l,ref:l.ref,selected:m,sx:{...y&&{"& td, & th":{color:`text.disabled`}},...b&&{"& td, & th":{borderTop:`2px solid`,borderTopColor:`primary.main`}},...x&&{"& td, & th":{borderBottom:`2px solid`,borderBottomColor:`primary.main`}},"&:hover, &:focus-within":{backgroundColor:`action.hover`,'& [role="toolbar"], & [draggable]':{opacity:1}},'& [role="toolbar"], & [draggable]':{opacity:0}},style:{...f,...p},onClick:()=>{y&&v.current?.toggle()}},z.createElement(VariableTableCell,{noPadding:!0,width:10,maxWidth:10},z.createElement(st.IconButton,{size:`small`,ref:g,...d,disabled:_,draggable:!0},z.createElement(ot.GripVerticalIcon,{fontSize:`inherit`}))),z.createElement(VariableTableCell,null,z.createElement(mt,{initialValue:t.name,onChange:e=>{e!==t.name&&!y&&r({...n,[t.id]:{...n[t.id],label:e}})},prefixElement:(0,it.createElement)(t.icon,{fontSize:`inherit`,color:y?`disabled`:`inherit`}),editableElement:({value:e,onChange:r,onValidationChange:a,error:s})=>z.createElement(LabelField,{id:`variable-label-`+t.id,size:`tiny`,value:e,onChange:r,onErrorChange:e=>{a?.(e),o?.(!!e)},error:s,focusOnShow:!0,selectOnShow:i===t.id,showWarningInfotip:!0,variables:n}),autoEdit:i===t.id&&!y,onRowRef:c(t.id),onAutoEditComplete:i===t.id?a:void 0,fieldType:`label`,disabled:y},z.createElement(at.EllipsisWithTooltip,{title:t.name,sx:{border:`4px solid transparent`}},t.name))),z.createElement(VariableTableCell,null,z.createElement(mt,{initialValue:t.value,onChange:e=>{e!==t.value&&!y&&r({...n,[t.id]:{...n[t.id],value:e}})},editableElement:({value:e,onChange:i,onValidationChange:a,error:s})=>t.valueField?.({value:e,onChange:i,onPropTypeKeyChange:e=>{!y&&e!==t.type&&r({...n,[t.id]:{...n[t.id],type:e}})},propTypeKey:t.type,onValidationChange:e=>{a?.(e),o?.(!!e)},error:s})??z.createElement(z.Fragment,null),onRowRef:c(t.id),gap:.25,fieldType:`value`,disabled:y},t.startIcon&&t.startIcon({value:t.value}),z.createElement(at.EllipsisWithTooltip,{title:t.value,sx:{border:`4px solid transparent`,lineHeight:`1`,pt:.25}},t.value))),z.createElement(VariableTableCell,{align:`right`,noPadding:!0,width:16,maxWidth:16,sx:{paddingInlineEnd:1}},z.createElement(st.Stack,{role:`toolbar`,direction:`row`,justifyContent:`flex-end`,alignItems:`center`},y&&z.createElement(Ze,{variableType:t.variableType,upgradeUrl:`https://go.elementor.com/renew-license-manager-${t.variableType}-variable`,ref:v,trackingData:yt}),z.createElement(VariableEditMenu,{menuActions:s(t.id),disabled:_,itemId:t.id}))))},VariablesManagerTable=({menuActions:e,variables:t,onChange:n,autoEditVariableId:r,onAutoEditComplete:i,onFieldError:a})=>{let o=(0,et.useRef)(null),s=(0,et.useRef)(new Map);(0,et.useEffect)(()=>{if(r&&o.current){let e=s.current.get(r);e&&setTimeout(()=>{e.scrollIntoView({behavior:`smooth`,block:`center`,inline:`nearest`})},100)}},[r]);let handleRowRef=e=>t=>{t?s.current.set(e,t):s.current.delete(e)},c=Object.keys(t).sort(sortVariablesOrder(t)),l=c.map(e=>{let n=t[e],r=P(n.type);return r?{id:e,type:n.type,name:n.label,value:n.value,...r}:null}).filter(Boolean),u={minWidth:250,tableLayout:`fixed`},handleReorder=e=>{let r={...t};e.forEach((e,t)=>{let n=r[e];n&&(r[e]=Object.assign({},n,{order:t+1}))}),n(r)};return L.createElement(R.TableContainer,{ref:o,sx:{overflow:`initial`}},L.createElement(R.Table,{sx:u,"aria-label":`Variables manager list with drag and drop reordering`,stickyHeader:!0},L.createElement(R.TableHead,null,L.createElement(R.TableRow,null,L.createElement(VariableTableCell,{isHeader:!0,noPadding:!0,width:10,maxWidth:10}),L.createElement(VariableTableCell,{isHeader:!0},(0,tt.__)(`Name`,`elementor`)),L.createElement(VariableTableCell,{isHeader:!0},(0,tt.__)(`Value`,`elementor`)),L.createElement(VariableTableCell,{isHeader:!0,noPadding:!0,width:16,maxWidth:16}))),L.createElement(R.TableBody,null,L.createElement(R.UnstableSortableProvider,{value:c,onChange:handleReorder,variant:`static`,restrictAxis:!0,dragOverlay:({children:e,...t})=>L.createElement(R.Table,{sx:u,...t},L.createElement(R.TableBody,null,e))},l.map(o=>L.createElement(R.UnstableSortableItem,{key:o.id,id:o.id,render:s=>L.createElement(VariableRow,{...s,row:o,variables:t,handleOnChange:n,autoEditVariableId:r,onAutoEditComplete:i,onFieldError:a,menuActions:e,handleRowRef})}))))))};function sortVariablesOrder(e){return(t,n)=>(e[t]?.order??2**53-1)-(e[n]?.order??2**53-1)}var bt=`stop-sync-variable`;function VariablesManagerPanelEmbedded({onRequestClose:e,onExposeCloseAttempt:t}){return l.createElement(VariablesManagerPanelContent,{onRequestClose:e,onExposeCloseAttempt:t})}function VariablesManagerPanelContent({onRequestClose:e,onExposeCloseAttempt:t}){let{open:n,close:r,isOpen:i}=(0,p.useDialog)(),[a]=(0,d.useSuppressedMessage)(bt),o=(0,h.usePopupState)({variant:`popover`}),{variables:s,isDirty:c,searchValue:_,isSaveDisabled:v,handleOnChange:y,createVariable:b,duplicateVariable:x,handleDeleteVariable:S,handleStartSync:C,handleStopSync:ee,handleSave:w,isSaving:te,handleSearch:ne,setIsSaving:re,setIsSaveDisabled:T}=useVariablesManagerState(),{autoEditVariableId:ie,startAutoEdit:E,handleAutoEditComplete:ae}=useAutoEdit(),{createNavigationCallback:D,resetNavigation:O}=useErrorNavigation(),[k,oe]=(0,u.useState)(null),[se,ce]=(0,u.useState)(null),[A,le]=(0,u.useState)(null);usePreventUnload(c);let ue=(0,u.useCallback)(()=>{if(c){n();return}e()},[c,n,e]);(0,u.useEffect)(()=>{if(t)return t(()=>ue()),()=>t(null)},[t,ue]);let de=(0,u.useCallback)((e,t,n)=>{let r=b(e,t,n);r&&E(r)},[b,E]),handleSaveClick=async()=>{try{le(null),O();let e=await w();return trackVariablesManagerEvent({action:`saveChanges`}),e}catch(e){let t=mapServerError(e),n=t?.action?.data?.duplicatedIds;return t&&t.field===`label`&&(n&&t.action&&(t.action.callback=D(n,E,()=>{T(!1)})),le(t),T(!0),O()),{success:!1,error:t}}finally{re(!1)}},fe=(0,u.useCallback)(e=>{S(e),oe(null)},[S]),pe=(0,u.useCallback)(e=>{ee(e);let t=s[e];t&&trackVariableSyncToV3({variableLabel:t.label,action:`unsync`})},[ee,s]),j=(0,u.useCallback)(e=>{C(e);let t=s[e];t&&trackVariableSyncToV3({variableLabel:t.label,action:`sync`})},[C,s]),M=(0,u.useCallback)(e=>{a?pe(e):ce(e)},[a,pe]),N=(0,u.useCallback)(e=>{let t=s[e];if(!t)return[];let n=getMenuActionsForVariable(t.type,{variable:t,variableId:e,handlers:{onStartSync:j,onStopSync:M}}),r={name:(0,g.__)(`Duplicate`,`elementor`),icon:m.CopyIcon,color:`text.primary`,onClick:e=>{let n=x(e);E(n),trackVariablesManagerEvent({action:`duplicate`,varType:P(t.type)?.variableType})}},i={name:(0,g.__)(`Delete`,`elementor`),icon:m.TrashIcon,color:`error.main`,onClick:e=>{let t=s[e];t&&(oe({id:e,label:t.label}),trackVariablesManagerEvent({action:`delete`,varType:P(t.type)?.variableType}))}};return[...n,r,i]},[s,j,M,x,E]),me=Object.keys(s).length>0;return l.createElement(l.Fragment,null,l.createElement(h.Stack,{direction:`column`,sx:{height:`100%`,width:`100%`,flex:1,minHeight:0,overflow:`hidden`}},l.createElement(h.Stack,{direction:`row`,alignItems:`center`,spacing:1,width:`100%`,sx:{flexShrink:0,px:2,pb:1}},l.createElement(p.SearchField,{placeholder:(0,g.__)(`Search`,`elementor`),value:_,onSearch:ne,sx:{flex:1,minWidth:0,px:0,py:0,display:`flex`,alignItems:`center`,alignSelf:`stretch`}}),l.createElement(h.Box,{sx:{display:`flex`,flexShrink:0,alignItems:`center`}},l.createElement(VariableManagerCreateMenu,{outlinedTrigger:!0,onCreate:de,variables:s,menuState:o}))),l.createElement(h.Divider,{sx:{width:`100%`}}),l.createElement(f.PanelBody,{sx:{display:`flex`,flexDirection:`column`,flex:1,minHeight:0}},me&&l.createElement(VariablesManagerTable,{menuActions:N,variables:s,onChange:y,autoEditVariableId:ie,onAutoEditComplete:ae,onFieldError:T}),!me&&_&&l.createElement(NoSearchResults,{searchValue:_,onClear:()=>ne(``),icon:l.createElement(m.ColorFilterIcon,{fontSize:`large`})}),!me&&!_&&l.createElement(EmptyState,{title:(0,g.__)(`Create your first variable`,`elementor`),message:(0,g.__)(`Variables are saved attributes that you can apply anywhere on your site.`,`elementor`),icon:l.createElement(m.ColorFilterIcon,{fontSize:`large`}),onAdd:o.open})),l.createElement(f.PanelFooter,null,l.createElement(h.Infotip,{placement:`right`,open:!!A,content:A?l.createElement(h.Alert,{severity:A.severity??`error`,action:A.action?.label?l.createElement(h.AlertAction,{onClick:A.action.callback},A.action.label):void 0,onClose:A.action?.label?void 0:()=>{le(null),T(!1)},icon:A.IconComponent?l.createElement(A.IconComponent,null):l.createElement(m.AlertTriangleFilledIcon,null)},l.createElement(h.AlertTitle,null,A.message),A.action?.message):null,arrow:!1,slotProps:{popper:{modifiers:[{name:`offset`,options:{offset:[-10,10]}}]}}},l.createElement(h.Button,{fullWidth:!0,size:`small`,color:`global`,variant:`contained`,disabled:v||!c||te,onClick:handleSaveClick,loading:te},(0,g.__)(`Save changes`,`elementor`))))),k&&l.createElement(DeleteConfirmationDialog,{open:!0,label:k.label,onConfirm:()=>fe(k.id),closeDialog:()=>oe(null)}),se&&l.createElement(StopSyncConfirmationDialog,{open:!0,onClose:()=>ce(null),onConfirm:()=>{pe(se),ce(null)}}),i&&l.createElement(p.SaveChangesDialog,null,l.createElement(p.SaveChangesDialog.Title,{onClose:r},(0,g.__)(`You have unsaved changes`,`elementor`)),l.createElement(p.SaveChangesDialog.Content,null,l.createElement(p.SaveChangesDialog.ContentText,null,(0,g.__)(`You have unsaved changes in the Variables Manager.`,`elementor`)),l.createElement(p.SaveChangesDialog.ContentText,null,(0,g.__)(`To avoid losing your updates, save your changes before leaving.`,`elementor`))),l.createElement(p.SaveChangesDialog.Actions,{actions:{discard:{label:(0,g.__)(`Discard`,`elementor`),action:()=>{r(),e()}},confirm:{label:(0,g.__)(`Save`,`elementor`),action:async()=>{let t=await handleSaveClick();r(),t?.success&&e()}}}})))}var usePreventUnload=e=>{(0,u.useEffect)(()=>{let handleBeforeUnload=t=>{e&&t.preventDefault()};return window.addEventListener(`beforeunload`,handleBeforeUnload),()=>{window.removeEventListener(`beforeunload`,handleBeforeUnload)}},[e])},StopSyncConfirmationDialog=({open:e,onClose:t,onConfirm:n})=>{let[,r]=(0,d.useSuppressedMessage)(bt);return l.createElement(p.ConfirmationDialog,{open:e,onClose:t},l.createElement(p.ConfirmationDialog.Title,{icon:m.ColorFilterIcon,iconColor:`primary`},(0,g.__)(`Stop syncing variable color`,`elementor`)),l.createElement(p.ConfirmationDialog.Content,null,l.createElement(p.ConfirmationDialog.ContentText,null,(0,g.__)(`This will disconnect the variable color from Global Colors. Existing uses on your site will automatically switch to a default color.`,`elementor`))),l.createElement(p.ConfirmationDialog.Actions,{onClose:t,onConfirm:n,cancelLabel:(0,g.__)(`Cancel`,`elementor`),confirmLabel:(0,g.__)(`Got it`,`elementor`),color:`primary`,onSuppressMessage:r,suppressLabel:(0,g.__)(`Don't show again`,`elementor`)}))},xt=globalThis.elementorV2.editor,St=globalThis.elementorV2.editorControls,Ct=globalThis.elementorV2.editorMcp,wt=globalThis.elementorV2.editorProps,Tt=globalThis.elementorV2.menus,Et=globalThis.React,Dt=globalThis.elementorV2.editorCanvas;function GlobalStylesImportListener(){return(0,Et.useEffect)(()=>{let handleGlobalStylesImported=()=>{N.load()};return window.addEventListener(Dt.GLOBAL_STYLES_IMPORTED_EVENT,handleGlobalStylesImported),()=>{window.removeEventListener(Dt.GLOBAL_STYLES_IMPORTED_EVENT,handleGlobalStylesImported)}},[]),null}var Ot=globalThis.React,kt=globalThis.elementorV2.editorMcp,At=globalThis.elementorV2.editorProps,jt=[`global-color-variable`,`global-font-variable`,`global-size-variable`,`global-custom-size-variable`];function tryExtractVariable(e){for(let t of jt){let n=(0,At.getPropSchemaFromCache)(t);if(n?.isValid(e))return{type:t,variableId:n.extract(e)}}return null}function traverse(e,t,n){let r=tryExtractVariable(e);if(r){n.push({...r,controlPath:t.join(`.`)});return}if((0,At.isTransformable)(e)){traverse(e.value,t,n);return}if(e&&typeof e==`object`)for(let[r,i]of Object.entries(e))traverse(i,[...t,r],n)}function extractVariablesFromStyleValue(e){let t=[];return traverse(e,[],t),t}function McpVariableConnectListener(){return(0,Ot.useEffect)(()=>{let handleMcpStylesApplied=e=>{let{styleValue:t}=e.detail;extractVariablesFromStyleValue(t).forEach(({type:e,controlPath:t})=>{trackVariableEvent({varType:e,controlPath:t,action:`connect`,executedBy:`mcp_tool`})})};return window.addEventListener(kt.MCP_STYLES_APPLIED_EVENT,handleMcpStylesApplied),()=>{window.removeEventListener(kt.MCP_STYLES_APPLIED_EVENT,handleMcpStylesApplied)}},[]),null}var Mt=__toESM(globalThis.React),Nt=globalThis.elementorV2.editorControls,Pt=globalThis.React,Ft=__toESM(globalThis.React),It=globalThis.elementorV2.editorControls,Lt=globalThis.elementorV2.icons,Rt=globalThis.elementorV2.ui;function transformValueBeforeUnlink(e,t){let{valueTransformer:n}=P(t);return n?n(e.value,e.type):e.value}function createUnlinkHandler(e,t,n){return()=>{let{fallbackPropTypeUtil:r}=P(t),i=transformValueBeforeUnlink(e,t);n(r.create(i))}}var zt=__toESM(globalThis.React),Bt=globalThis.React,Vt=__toESM(globalThis.React),Ht=globalThis.React,Ut=globalThis.elementorV2.ui,Wt=(0,Ht.createContext)(null),PopoverContentRefContextProvider=({children:e})=>{let[t,n]=(0,Ht.useState)(null);return Vt.createElement(Wt.Provider,{value:t},Vt.createElement(Ut.Box,{ref:n},e))},usePopoverContentRef=()=>(0,Ht.useContext)(Wt),V=__toESM(globalThis.React),Gt=globalThis.React,Kt=globalThis.elementorV2.editorControls,qt=globalThis.elementorV2.editorUi,Jt=globalThis.elementorV2.icons,Yt=globalThis.elementorV2.ui,Xt=globalThis.wp.i18n,Zt=globalThis.elementorV2.editorControls,useInitialValue=()=>{let{value:e}=(0,Zt.useBoundProp)(),t=ye(e?.$$type)&&!!e?.value,n=useVariable(t?e.value:``);return t?n?n.value:``:e?.value??``},Qt=globalThis.elementorV2.editorControls,$t=globalThis.elementorV2.editorProps,useVariableBoundProp=()=>{let{propTypeUtil:e}=useVariableType(),t=(0,Qt.useBoundProp)(e);return{...t,setVariableValue:e=>resolveBoundPropAndSetValue(e,t),variableId:t.value??t.placeholder}},resolveBoundPropAndSetValue=(e,t)=>{let n=unwrapValue(t.value),r=unwrapValue(t.placeholder),i=unwrapValue(e);return!n&&r===i?t.setValue(null):t.setValue(e)},unwrapValue=e=>(0,$t.isTransformable)(e)?e.value:e,en=__toESM(globalThis.React),tn=globalThis.elementorV2.ui,FormField=({id:e,label:t,errorMsg:n,noticeMsg:r,children:i})=>en.createElement(tn.Grid,{container:!0,gap:.75,alignItems:`center`},en.createElement(tn.Grid,{item:!0,xs:12},en.createElement(tn.FormLabel,{htmlFor:e,size:`tiny`},t)),en.createElement(tn.Grid,{item:!0,xs:12},i,n&&en.createElement(tn.FormHelperText,{error:!0},n),r&&en.createElement(tn.FormHelperText,null,r))),nn=`tiny`,VariableCreation=({onGoBack:e,onClose:t})=>{let{icon:n,valueField:r,propTypeUtil:i}=useVariableType(),{setVariableValue:a,path:o}=useVariableBoundProp(),{propType:s}=(0,Kt.useBoundProp)(),c=useInitialValue(),[l,u]=(0,Gt.useState)(c),[d,f]=(0,Gt.useState)(``),[p,m]=(0,Gt.useState)(``),[h,g]=(0,Gt.useState)(``),[_,v]=(0,Gt.useState)(i.key),{labelFieldError:y,setLabelFieldError:x}=useLabelError(),resetFields=()=>{u(``),f(``),m(``),g(``)},closePopover=()=>{resetFields(),t()},handleCreateAndTrack=()=>{createVariable({value:l,label:d,type:_},{eventData:{controlPath:o.join(`.`)}}).then(e=>{a(e),closePopover()}).catch(e=>{let t=mapServerError(e);if(t&&t.field===`label`){f(``),x({value:d,message:t.message});return}m(b.UNEXPECTED_ERROR)})},hasEmptyFields=()=>d.trim()===``?!0:typeof l==`string`?l.trim()===``:!!l==0,hasErrors=()=>!!p,S=hasEmptyFields()||hasErrors(),handleKeyDown=e=>{e.key===`Enter`&&!S&&(e.preventDefault(),handleCreateAndTrack())};return V.createElement(qt.SectionPopoverBody,{height:`auto`},V.createElement(qt.PopoverHeader,{icon:V.createElement(V.Fragment,null,e&&V.createElement(Yt.IconButton,{size:nn,"aria-label":(0,Xt.__)(`Go Back`,`elementor`),onClick:e},V.createElement(Jt.ArrowLeftIcon,{fontSize:nn})),V.createElement(n,{fontSize:nn})),title:(0,Xt.__)(`Create variable`,`elementor`),onClose:closePopover}),V.createElement(Yt.Divider,null),V.createElement(Kt.PopoverContent,{p:2},V.createElement(FormField,{id:`variable-label`,label:(0,Xt.__)(`Name`,`elementor`),errorMsg:y?.message,noticeMsg:labelHint(d)},V.createElement(LabelField,{id:`variable-label`,value:d,error:y,onChange:e=>{f(e),m(``)},onErrorChange:e=>{x({value:``,message:e})},onKeyDown:handleKeyDown,focusOnShow:!0})),r&&V.createElement(FormField,{errorMsg:h,label:(0,Xt.__)(`Value`,`elementor`)},V.createElement(Yt.Typography,{variant:`h5`,id:`variable-value-wrapper`},V.createElement(r,{value:l,onPropTypeKeyChange:e=>v(e),onChange:e=>{u(e),m(``),g(``)},onValidationChange:g,propType:s,onKeyDown:handleKeyDown}))),p&&V.createElement(Yt.FormHelperText,{error:!0},p)),V.createElement(Yt.CardActions,{sx:{pt:.5,pb:1}},V.createElement(Yt.Button,{id:`create-variable-button`,size:`small`,variant:`contained`,disabled:S,onClick:handleCreateAndTrack},(0,Xt.__)(`Create`,`elementor`))))},H=__toESM(globalThis.React),rn=globalThis.React,an=globalThis.elementorV2.editorControls,on=globalThis.elementorV2.editorCurrentUser,sn=globalThis.elementorV2.editorUi,cn=globalThis.elementorV2.icons,ln=globalThis.elementorV2.ui,un=globalThis.wp.i18n,U=__toESM(globalThis.React),dn=globalThis.React,fn=globalThis.elementorV2.icons,W=globalThis.elementorV2.ui,pn=globalThis.wp.i18n,mn=`edit-confirmation-dialog`,EditConfirmationDialog=({closeDialog:e,onConfirm:t,onSuppressMessage:n})=>{let[r,i]=(0,dn.useState)(!1),handleSave=()=>{r&&n?.(),t?.()};return U.createElement(W.Dialog,{open:!0,onClose:e,maxWidth:`xs`},U.createElement(W.DialogTitle,{display:`flex`,alignItems:`center`,gap:1},U.createElement(fn.AlertTriangleFilledIcon,{color:`secondary`}),(0,pn.__)(`Changes to variables go live right away.`,`elementor`)),U.createElement(W.DialogContent,null,U.createElement(W.DialogContentText,{variant:`body2`,color:`textPrimary`},(0,pn.__)(`Don't worry - all other changes you make will wait until you publish your site.`,`elementor`))),U.createElement(W.DialogActions,{sx:{justifyContent:`space-between`,alignItems:`center`}},U.createElement(W.FormControlLabel,{control:U.createElement(W.Checkbox,{checked:r,onChange:e=>i(e.target.checked),size:`small`}),label:U.createElement(W.Typography,{variant:`body2`},(0,pn.__)(`Don't show me again`,`elementor`))}),U.createElement(`div`,null,U.createElement(W.Button,{color:`secondary`,onClick:e},(0,pn.__)(`Keep editing`,`elementor`)),U.createElement(W.Button,{variant:`contained`,color:`secondary`,onClick:handleSave,sx:{ml:1}},(0,pn.__)(`Save`,`elementor`)))))},hn=`tiny`,gn=(0,un.__)(`Delete variable`,`elementor`),VariableEdit=({onClose:e,onGoBack:t,onSubmit:n,editId:r})=>{let{icon:i,valueField:a,variableType:o,propTypeUtil:s}=useVariableType(),{setVariableValue:c,variableId:l,path:u}=useVariableBoundProp(),{propType:d}=(0,an.useBoundProp)(),[f,p]=(0,on.useSuppressedMessage)(mn),[m,h]=(0,rn.useState)(!1),[g,_]=(0,rn.useState)(!1),[v,y]=(0,rn.useState)(``),[x,S]=(0,rn.useState)(``),{labelFieldError:C,setLabelFieldError:ee}=useLabelError(),w=useVariable(r),[te,ne]=(0,rn.useState)(w?.type??s.key);if(!w)throw Error(`Global ${o} variable not found`);let re=usePermissions(),[T,ie]=(0,rn.useState)(()=>w.value),[E,ae]=(0,rn.useState)(()=>w.label);(0,rn.useEffect)(()=>(j.update({[r]:{...w,value:T}}),()=>{j.update({[r]:{...w}})}),[r,T,w]);let handleUpdate=()=>{f?handleSaveVariable():_(!0)},handleSaveVariable=()=>{updateVariable(r,te===w.type?{value:T,label:E}:{value:T,label:E,type:te},{eventData:{controlPath:u.join(`.`)}}).then(()=>{maybeTriggerBoundPropChange(),n?.()}).catch(e=>{let t=mapServerError(e);if(t&&t.field===`label`){ae(``),ee({value:E,message:t.message});return}y(b.UNEXPECTED_ERROR)})},handleDelete=()=>{deleteVariable(r).then(()=>{maybeTriggerBoundPropChange(),n?.()})},maybeTriggerBoundPropChange=()=>{r===l&&c(r)},handleDeleteConfirmation=()=>{h(!0)},closeDeleteDialog=()=>()=>{h(!1)},closeEditDialog=()=>()=>{_(!1)},D=[];re.canDelete()&&D.push(H.createElement(ln.Tooltip,{key:`delete`,placement:`top`,title:gn},H.createElement(ln.IconButton,{size:hn,onClick:handleDeleteConfirmation,"aria-label":gn},H.createElement(cn.TrashIcon,{fontSize:hn}))));let hasEmptyFields=()=>E.trim()===``?!0:typeof T==`string`?T.trim()===``:!!T==0,noValueChanged=()=>T===w.value&&E===w.label,hasErrors=()=>!!v,O=noValueChanged()||hasEmptyFields()||hasErrors(),handleKeyDown=e=>{e.key===`Enter`&&!O&&(e.preventDefault(),handleUpdate())};return H.createElement(H.Fragment,null,H.createElement(sn.SectionPopoverBody,{height:`auto`},H.createElement(sn.PopoverHeader,{title:(0,un.__)(`Edit variable`,`elementor`),onClose:e,icon:H.createElement(H.Fragment,null,t&&H.createElement(ln.IconButton,{size:hn,"aria-label":(0,un.__)(`Go Back`,`elementor`),onClick:t},H.createElement(cn.ArrowLeftIcon,{fontSize:hn})),H.createElement(i,{fontSize:hn})),actions:D}),H.createElement(ln.Divider,null),H.createElement(an.PopoverContent,{p:2},H.createElement(FormField,{id:`variable-label`,label:(0,un.__)(`Name`,`elementor`),errorMsg:C?.message,noticeMsg:labelHint(E)},H.createElement(LabelField,{id:`variable-label`,value:E,error:C,onChange:e=>{ae(e),y(``)},onErrorChange:e=>{ee({value:``,message:e})},onKeyDown:handleKeyDown,focusOnShow:!0})),a&&H.createElement(FormField,{errorMsg:x,label:(0,un.__)(`Value`,`elementor`)},H.createElement(ln.Typography,{variant:`h5`},H.createElement(a,{propTypeKey:w.type,onPropTypeKeyChange:e=>ne(e),value:T,onChange:e=>{ie(e),y(``),S(``)},onKeyDown:handleKeyDown,onValidationChange:S,propType:d}))),v&&H.createElement(ln.FormHelperText,{error:!0},v)),H.createElement(ln.CardActions,{sx:{pt:.5,pb:1}},H.createElement(ln.Button,{size:`small`,variant:`contained`,disabled:O,onClick:handleUpdate},(0,un.__)(`Save`,`elementor`)))),m&&H.createElement(DeleteConfirmationDialog,{open:!0,label:E,onConfirm:handleDelete,closeDialog:closeDeleteDialog()}),g&&!f&&H.createElement(EditConfirmationDialog,{closeDialog:closeEditDialog(),onConfirm:handleSaveVariable,onSuppressMessage:p}))},_n=globalThis.React,G=__toESM(globalThis.React),vn=globalThis.elementorV2.editorControls,yn=globalThis.elementorV2.editorUi,bn=globalThis.elementorV2.editorUi,xn=globalThis.elementorV2.icons,Sn=globalThis.elementorV2.ui,K=globalThis.wp.i18n,q=__toESM(globalThis.React),Cn=globalThis.elementorV2.editorUi,wn=globalThis.elementorV2.icons,Tn=globalThis.elementorV2.ui,En=globalThis.wp.i18n,Dn=`tiny`,On=(0,En.__)(`Edit variable`,`elementor`),MenuItemContent=({item:e,disabled:t=!1})=>{let n=e.onEdit;return q.createElement(q.Fragment,null,q.createElement(Tn.ListItemIcon,{sx:{color:t?`text.disabled`:`inherit`}},e.icon),q.createElement(Tn.Box,{sx:{flex:1,minWidth:0,display:`flex`,alignItems:`center`,gap:1}},q.createElement(Cn.EllipsisWithTooltip,{title:e.label||e.value,as:Tn.Typography,variant:`caption`,color:t?`text.disabled`:`text.primary`,sx:{marginTop:`1px`,lineHeight:`2`},maxWidth:`50%`}),e.secondaryText&&q.createElement(Cn.EllipsisWithTooltip,{title:e.secondaryText,as:Tn.Typography,variant:`caption`,color:t?`text.disabled`:`text.tertiary`,sx:{marginTop:`1px`,lineHeight:`1`},maxWidth:`50%`})),!!n&&!t&&q.createElement(Tn.Tooltip,{placement:`top`,title:On},q.createElement(Tn.IconButton,{sx:{mx:1,opacity:`0`},onClick:t=>{t.stopPropagation(),n(e.value)},"aria-label":On},q.createElement(wn.EditIcon,{color:`action`,fontSize:Dn}))))},kn=globalThis.elementorV2.ui,An=(0,kn.styled)(kn.MenuList)(({theme:e,disabled:t})=>({"& > li":{height:32,width:`100%`,display:`flex`,alignItems:`center`},'& > [role="option"]':{...e.typography.caption,lineHeight:`inherit`,padding:e.spacing(.5,1,.5,2),...!t&&{"&:hover, &:focus":{backgroundColor:e.palette.action.hover},cursor:`pointer`},'&[aria-selected="true"]':{backgroundColor:e.palette.action.selected},textOverflow:`ellipsis`,position:`absolute`,top:0,left:0,"&:hover .MuiIconButton-root, .MuiIconButton-root:focus":{opacity:1}},width:`100%`,position:`relative`})),jn=`tiny`,Mn=(0,K.__)(`Create variable`,`elementor`),Nn=(0,K.__)(`Variables Manager`,`elementor`),getProUpgradeUrl=e=>`https://go.elementor.com/renew-license-panel-${e}-variable`,VariablesSelection=({closePopover:e,onAdd:t,onEdit:n,onSettings:r,disabled:i=!1})=>{let{icon:a,startIcon:o,variableType:s,propTypeUtil:c,emptyState:l}=useVariableType(),{value:u,setValue:d,path:f}=useVariableBoundProp(),[p,m]=(0,_n.useState)(``),{list:h,hasMatches:g,isSourceNotEmpty:_,hasNoCompatibleVariables:v}=useFilteredVariables(p,c.key),handleSetVariable=t=>{d(t),trackVariableEvent({varType:s,controlPath:f.join(`.`),action:`connect`}),e()},onAddAndTrack=()=>{t?.(),trackVariableEvent({varType:s,controlPath:f.join(`.`),action:`add`})},y=[];if(t&&y.push(G.createElement(Sn.Tooltip,{key:`add`,placement:`top`,title:Mn},G.createElement(`span`,null,G.createElement(Sn.IconButton,{id:`add-variable-button`,size:jn,onClick:onAddAndTrack,"aria-label":Mn,disabled:i},G.createElement(xn.PlusIcon,{fontSize:jn}))))),r){let handleOpenManager=()=>{r(),trackVariablesManagerEvent({action:`openManager`,source:`vars-popover`,varType:s,controlPath:f.join(`.`)})};y.push(G.createElement(Sn.Tooltip,{key:`settings`,placement:`top`,title:Nn},G.createElement(Sn.IconButton,{id:`variables-manager-button`,size:jn,onClick:handleOpenManager,"aria-label":Nn},G.createElement(xn.SettingsIcon,{fontSize:jn}))))}let b=o||(()=>G.createElement(a,{fontSize:jn})),x=h.map(({value:e,label:t,key:r})=>({type:`item`,value:r,label:t,icon:G.createElement(b,{value:e}),secondaryText:e,onEdit:n?()=>n?.(r):void 0})),handleSearch=e=>{m(e)},handleClearSearch=()=>{m(``)};return(0,_n.useEffect)(()=>{i&&(0,vn.trackViewPromotion)({target_name:`variables_popover`,target_location:`widget_panel`,location_l1:`variables_list`})},[i]),G.createElement(yn.SectionPopoverBody,null,G.createElement(yn.PopoverHeader,{title:(0,K.__)(`Variables`,`elementor`),icon:G.createElement(xn.ColorFilterIcon,{fontSize:jn}),onClose:e,actions:y}),_&&G.createElement(yn.SearchField,{value:p,onSearch:handleSearch,placeholder:(0,K.__)(`Search`,`elementor`)}),G.createElement(Sn.Divider,null),_&&g&&G.createElement(G.Fragment,null,G.createElement(yn.PopoverMenuList,{items:x,onSelect:i?()=>{}:handleSetVariable,onClose:()=>{},selectedValue:u,"data-testid":`${s}-variables-list`,menuListTemplate:e=>G.createElement(An,{...e,disabled:i}),menuItemContentTemplate:e=>G.createElement(MenuItemContent,{item:e,disabled:i})}),i&&G.createElement(bn.PromotionAlert,{message:(0,K.sprintf)((0,K.__)(`Upgrade to continue creating and editing %s variables.`,`elementor`),s),upgradeUrl:getProUpgradeUrl(s),onCtaClick:()=>(0,vn.trackUpgradePromotionClick)({target_name:`variables_popover`,location_l1:`variables_list`})})),!g&&_&&G.createElement(NoSearchResults,{searchValue:p,onClear:handleClearSearch,icon:G.createElement(a,{fontSize:`large`})}),i&&!_&&G.createElement(EmptyState,{title:(0,K.sprintf)((0,K.__)(`No %s variables yet`,`elementor`),s),message:(0,K.sprintf)((0,K.__)(`Upgrade to create %s variables and maintain consistent element sizing.`,`elementor`),s),icon:G.createElement(a,{fontSize:`large`})},l),!_&&!v&&!i&&G.createElement(EmptyState,{title:(0,K.sprintf)((0,K.__)(`Create your first %s variable`,`elementor`),s),message:(0,K.__)(`Variables are saved attributes that you can apply anywhere on your site.`,`elementor`),icon:G.createElement(a,{fontSize:`large`}),onAdd:t}),v&&!i&&G.createElement(EmptyState,{title:(0,K.__)(`No compatible variables`,`elementor`),message:(0,K.__)(`Looks like none of your variables work with this control. Create a new variable to use it here.`,`elementor`),icon:G.createElement(a,{fontSize:`large`}),onAdd:t}))},Pn=`list`,Fn=`add`,In=`edit`,VariableSelectionPopover=({closePopover:e,propTypeKey:t,selectedVariable:n})=>{let[r,i]=(0,Bt.useState)(Pn),[a,o]=(0,Bt.useState)(``),onSettingsAvailable=()=>{window.dispatchEvent(new CustomEvent(`elementor/toggle-design-system`,{detail:{tab:`variables`}}))};return zt.createElement(VariableTypeProvider,{propTypeKey:t},zt.createElement(PopoverContentRefContextProvider,null,RenderView({propTypeKey:t,currentView:r,selectedVariable:n,editId:a,setEditId:o,setCurrentView:i,closePopover:e,onSettings:onSettingsAvailable})))};function RenderView(e){let t=usePermissions(),n=useQuotaPermissions(e.propTypeKey),r={onClose:()=>{e.closePopover()},onGoBack:()=>{e.setCurrentView(Pn)}};t.canAdd()&&(r.onAdd=()=>{e.setCurrentView(Fn)}),t.canEdit()&&(r.onEdit=t=>{e.setEditId(t),e.setCurrentView(In)}),t.canManageSettings()&&e.onSettings&&(r.onSettings=()=>{e.closePopover(),e.onSettings?.()});let handleSubmitOnEdit=()=>{e?.selectedVariable?.key===e.editId?r.onClose():r.onGoBack?.()};return Pn===e.currentView?zt.createElement(VariablesSelection,{closePopover:r.onClose,onAdd:r.onAdd,onEdit:r.onEdit,onSettings:r.onSettings,disabled:!n.canAdd()}):Fn===e.currentView?zt.createElement(VariableCreation,{onGoBack:r.onGoBack,onClose:r.onClose}):In===e.currentView?zt.createElement(VariableEdit,{editId:e.editId,onGoBack:r.onGoBack,onClose:r.onClose,onSubmit:handleSubmitOnEdit}):null}var Ln=__toESM(globalThis.React),Rn=globalThis.elementorV2.icons,zn=globalThis.elementorV2.ui,Bn=globalThis.wp.i18n,Vn=`tiny`,Hn=(0,Bn.__)(`Unlink variable`,`elementor`),AssignedTag=({startIcon:e,label:t,onUnlink:n,...r})=>{let i=[];return n&&i.push(Ln.createElement(zn.Tooltip,{key:`unlink`,title:Hn,placement:`bottom`},Ln.createElement(zn.IconButton,{size:Vn,onClick:n,"aria-label":Hn},Ln.createElement(Rn.DetachIcon,{fontSize:Vn})))),Ln.createElement(zn.Tooltip,{title:t,placement:`top`},Ln.createElement(zn.UnstableTag,{fullWidth:!0,showActionsOnHover:!0,startIcon:Ln.createElement(zn.Stack,{gap:.5,direction:`row`,alignItems:`center`},e),label:Ln.createElement(zn.Box,{sx:{display:`inline-grid`,minWidth:0}},Ln.createElement(zn.Typography,{sx:{lineHeight:1.34},variant:`caption`,noWrap:!0},t)),actions:i,...r}))},AssignedVariable=({variable:e,propTypeKey:t})=>{let{startIcon:n,propTypeUtil:r}=P(t),{setValue:i}=(0,It.useBoundProp)(),a=(0,Pt.useRef)(null),o=(0,Pt.useId)(),s=(0,Rt.usePopupState)({variant:`popover`,popupId:`elementor-variables-list-${o}`}),c=createUnlinkHandler(e,t,i),l=n||(()=>null);return Ft.createElement(Rt.Box,{ref:a},Ft.createElement(AssignedTag,{label:e.label,startIcon:Ft.createElement(Ft.Fragment,null,Ft.createElement(Lt.ColorFilterIcon,{fontSize:Vn}),Ft.createElement(l,{value:e.value})),onUnlink:c,...(0,Rt.bindTrigger)(s)}),Ft.createElement(Rt.Popover,{disableScrollLock:!0,anchorEl:a.current,anchorOrigin:{vertical:`bottom`,horizontal:`right`},transformOrigin:{vertical:`top`,horizontal:`right`},PaperProps:{sx:{my:1}},...(0,Rt.bindPopover)(s)},Ft.createElement(VariableSelectionPopover,{selectedVariable:e,closePopover:s.close,propTypeKey:r.key})))},J=__toESM(globalThis.React),Un=globalThis.React,Wn=globalThis.elementorV2.editorControls,Gn=globalThis.elementorV2.ui,Kn=globalThis.wp.i18n,Y=__toESM(globalThis.React),qn=globalThis.React,Jn=globalThis.elementorV2.editorControls,Yn=globalThis.elementorV2.editorUi,Xn=globalThis.elementorV2.ui,Zn=globalThis.wp.i18n,Qn=`tiny`,VariableRestore=({variableId:e,onClose:t,onSubmit:n})=>{let{icon:r,valueField:i,variableType:a,propTypeUtil:o}=useVariableType(),{setVariableValue:s}=useVariableBoundProp(),{propType:c}=(0,Jn.useBoundProp)(),l=useVariable(e);if(!l)throw Error(`Global ${a} variable not found`);let[u,d]=(0,qn.useState)(``),[f,p]=(0,qn.useState)(``),[m,h]=(0,qn.useState)(l.label),[g,_]=(0,qn.useState)(l.value),[v,y]=(0,qn.useState)(l?.type??o.key),{labelFieldError:x,setLabelFieldError:S}=useLabelError({value:l.label,message:b.DUPLICATED_LABEL}),handleRestore=()=>{(v===l.type?restoreVariable(e,m,g):restoreVariable(e,m,g,v)).then(()=>{s(e),n?.()}).catch(e=>{let t=mapServerError(e);if(t&&t.field===`label`){h(``),S({value:m,message:t.message});return}d(b.UNEXPECTED_ERROR)})},hasEmptyFields=()=>m.trim()===``?!0:typeof g==`string`?g.trim()===``:!!g==0,noValueChanged=()=>g===l.value&&m===l.label,hasErrors=()=>!!u,C=noValueChanged()||hasEmptyFields()||hasErrors(),handleKeyDown=e=>{e.key===`Enter`&&!C&&(e.preventDefault(),handleRestore())};return Y.createElement(PopoverContentRefContextProvider,null,Y.createElement(Yn.SectionPopoverBody,{height:`auto`},Y.createElement(Yn.PopoverHeader,{icon:Y.createElement(r,{fontSize:Qn}),title:(0,Zn.__)(`Restore variable`,`elementor`),onClose:t}),Y.createElement(Xn.Divider,null),Y.createElement(Jn.PopoverContent,{p:2},Y.createElement(FormField,{id:`variable-label`,label:(0,Zn.__)(`Name`,`elementor`),errorMsg:x?.message,noticeMsg:labelHint(m)},Y.createElement(LabelField,{id:`variable-label`,value:m,error:x,onChange:e=>{h(e),d(``)},onErrorChange:e=>{S({value:``,message:e})},onKeyDown:handleKeyDown,focusOnShow:!0})),i&&Y.createElement(FormField,{errorMsg:f,label:(0,Zn.__)(`Value`,`elementor`)},Y.createElement(Xn.Typography,{variant:`h5`},Y.createElement(i,{propTypeKey:v,onPropTypeKeyChange:e=>y(e),value:g,onChange:e=>{_(e),d(``),p(``)},onValidationChange:p,propType:c,onKeyDown:handleKeyDown}))),u&&Y.createElement(Xn.FormHelperText,{error:!0},u)),Y.createElement(Xn.CardActions,{sx:{pt:.5,pb:1}},Y.createElement(Xn.Button,{size:`small`,variant:`contained`,disabled:C,onClick:handleRestore},(0,Zn.__)(`Restore`,`elementor`)))))},X=__toESM(globalThis.React),$n=globalThis.elementorV2.ui,er=globalThis.wp.i18n,DeletedVariableAlert=({onClose:e,onUnlink:t,onRestore:n,label:r})=>X.createElement($n.ClickAwayListener,{onClickAway:e},X.createElement($n.Alert,{variant:`standard`,severity:`warning`,onClose:e,action:X.createElement(X.Fragment,null,t&&X.createElement($n.AlertAction,{variant:`contained`,onClick:t},(0,er.__)(`Unlink`,`elementor`)),n&&X.createElement($n.AlertAction,{variant:`outlined`,onClick:n},(0,er.__)(`Restore`,`elementor`))),sx:{maxWidth:300}},X.createElement($n.AlertTitle,null,(0,er.__)(`Deleted variable`,`elementor`)),X.createElement($n.Typography,{variant:`body2`,color:`textPrimary`},(0,er.__)(`The variable`,`elementor`),`\xA0'`,X.createElement($n.Typography,{variant:`body2`,component:`span`,sx:{lineBreak:`anywhere`}},r),`'\xA0`,(0,er.__)(`has been deleted, but it is still referenced in this location. You may restore the variable or unlink it to assign a different value.`,`elementor`)))),tr=__toESM(globalThis.React),nr=globalThis.elementorV2.icons,rr=globalThis.elementorV2.ui,ir=tr.forwardRef(({label:e,suffix:t,onClick:n,icon:r,...i},a)=>{let o=t?`${e} (${t})`:e;return tr.createElement(rr.Chip,{ref:a,size:`tiny`,color:`warning`,shape:`rounded`,variant:`standard`,onClick:n,icon:tr.createElement(nr.AlertTriangleFilledIcon,null),label:tr.createElement(rr.Tooltip,{title:o,placement:`top`},tr.createElement(rr.Box,{sx:{display:`inline-grid`,minWidth:0}},tr.createElement(rr.Typography,{variant:`caption`,noWrap:!0,sx:{lineHeight:1.34}},o))),sx:{height:e=>e.spacing(3.5),borderRadius:e=>e.spacing(1),justifyContent:`flex-start`,width:`100%`},...i})});ir.displayName=`WarningVariableTag`;var DeletedVariable=({variable:e,propTypeKey:t})=>{let{propTypeUtil:n}=P(t),r=(0,Wn.useBoundProp)(),i=usePermissions(),[a,o]=(0,Un.useState)(!1),toggleInfotip=()=>o(e=>!e),closeInfotip=()=>o(!1),s=(0,Un.useRef)(null),c=(0,Un.useId)(),l=(0,Gn.usePopupState)({variant:`popover`,popupId:`elementor-variables-restore-${c}`}),u={};i.canUnlink()&&(u.onUnlink=createUnlinkHandler(e,t,r.setValue)),i.canRestore()&&(u.onRestore=()=>{e.key&&restoreVariable(e.key).then(e=>{resolveBoundPropAndSetValue(n.create(e),r),closeInfotip()}).catch(()=>{closeInfotip(),l.setAnchorEl(s.current),l.open()})});let handleRestoreWithOverrides=()=>{l.close()};return J.createElement(J.Fragment,null,J.createElement(Gn.Box,{ref:s},a&&J.createElement(Gn.Backdrop,{open:!0,onClick:closeInfotip,invisible:!0}),J.createElement(Gn.Infotip,{color:`warning`,placement:`right-start`,open:a,disableHoverListener:!0,onClose:closeInfotip,content:J.createElement(DeletedVariableAlert,{onClose:closeInfotip,onUnlink:u.onUnlink,onRestore:u.onRestore,label:e.label}),slotProps:{popper:{modifiers:[{name:`offset`,options:{offset:[0,24]}}]}}},J.createElement(ir,{label:e.label,onClick:toggleInfotip,suffix:(0,Kn.__)(`deleted`,`elementor`)})),J.createElement(Gn.Popover,{disableScrollLock:!0,anchorOrigin:{vertical:`bottom`,horizontal:`right`},transformOrigin:{vertical:`top`,horizontal:`right`},PaperProps:{sx:{my:1}},...(0,Gn.bindPopover)(l)},J.createElement(VariableTypeProvider,{propTypeKey:t},J.createElement(VariableRestore,{variableId:e.key??``,onClose:l.close,onSubmit:handleRestoreWithOverrides})))))},ar=__toESM(globalThis.React),or=globalThis.React,sr=globalThis.elementorV2.editorControls,cr=globalThis.elementorV2.ui,lr=globalThis.wp.i18n,ur=__toESM(globalThis.React),dr=globalThis.elementorV2.ui,fr=globalThis.wp.i18n,pr={title:(0,fr.__)(`Variable has changed`,`elementor`),message:(0,fr.__)(`This variable is no longer compatible with this property. You can clear it or select a different one.`,`elementor`),buttons:{clear:(0,fr.__)(`Clear`,`elementor`),select:(0,fr.__)(`Select variable`,`elementor`)}},MismatchVariableAlert=({onClose:e,onClear:t,triggerSelect:n})=>ur.createElement(dr.ClickAwayListener,{onClickAway:e},ur.createElement(dr.Alert,{variant:`standard`,severity:`warning`,onClose:e,action:ur.createElement(ur.Fragment,null,t&&ur.createElement(dr.AlertAction,{variant:`contained`,onClick:t},pr.buttons.clear),n&&ur.createElement(dr.AlertAction,{variant:`outlined`,onClick:n},pr.buttons.select)),sx:{maxWidth:300}},ur.createElement(dr.AlertTitle,null,pr.title),ur.createElement(dr.Typography,{variant:`body2`,color:`textPrimary`},pr.message))),MismatchVariable=({variable:e})=>{let{setValue:t,value:n}=(0,sr.useBoundProp)(),r=(0,or.useRef)(null),i=(0,or.useId)(),a=(0,cr.usePopupState)({variant:`popover`,popupId:`elementor-variables-list-${i}`}),[o,s]=(0,or.useState)(!1),toggleInfotip=()=>s(e=>!e),closeInfotip=()=>s(!1),triggerSelect=()=>{closeInfotip(),a.setAnchorEl(r.current),a.open()},clearValue=()=>{closeInfotip(),t(null)},c=!!n;return ar.createElement(cr.Box,{ref:r},o&&ar.createElement(cr.Backdrop,{open:!0,onClick:closeInfotip,invisible:!0}),ar.createElement(cr.Infotip,{color:`warning`,placement:`right-start`,open:o,disableHoverListener:!0,onClose:closeInfotip,content:ar.createElement(MismatchVariableAlert,{onClose:closeInfotip,onClear:c?clearValue:void 0,triggerSelect}),slotProps:{popper:{modifiers:[{name:`offset`,options:{offset:[0,24]}}]}}},ar.createElement(ir,{label:e.label,onClick:toggleInfotip,suffix:(0,lr.__)(`changed`,`elementor`)})),ar.createElement(cr.Popover,{disableScrollLock:!0,anchorEl:r.current,anchorOrigin:{vertical:`bottom`,horizontal:`right`},transformOrigin:{vertical:`top`,horizontal:`right`},PaperProps:{sx:{my:1}},...(0,cr.bindPopover)(a)},ar.createElement(VariableSelectionPopover,{selectedVariable:e,closePopover:a.close,propTypeKey:e.type})))},mr=__toESM(globalThis.React),hr=globalThis.React,gr=globalThis.elementorV2.editorControls,_r=globalThis.elementorV2.ui,vr=globalThis.wp.i18n,yr=__toESM(globalThis.React),br=globalThis.elementorV2.ui,xr=globalThis.wp.i18n,MissingVariableAlert=({onClose:e,onClear:t})=>yr.createElement(br.ClickAwayListener,{onClickAway:e},yr.createElement(br.Alert,{variant:`standard`,severity:`warning`,onClose:e,action:yr.createElement(yr.Fragment,null,t&&yr.createElement(br.AlertAction,{variant:`contained`,onClick:t},(0,xr.__)(`Clear`,`elementor`))),sx:{maxWidth:300}},yr.createElement(br.AlertTitle,null,(0,xr.__)(`This variable is missing`,`elementor`)),yr.createElement(br.Typography,{variant:`body2`,color:`textPrimary`},(0,xr.__)(`It may have been deleted. Try clearing this field and select a different value or variable.`,`elementor`)))),MissingVariable=()=>{let{setValue:e}=(0,gr.useBoundProp)(),[t,n]=(0,hr.useState)(!1),toggleInfotip=()=>n(e=>!e),closeInfotip=()=>n(!1),clearValue=()=>e(null);return mr.createElement(mr.Fragment,null,t&&mr.createElement(_r.Backdrop,{open:!0,onClick:closeInfotip,invisible:!0}),mr.createElement(_r.Infotip,{color:`warning`,placement:`right-start`,open:t,disableHoverListener:!0,onClose:closeInfotip,content:mr.createElement(MissingVariableAlert,{onClose:closeInfotip,onClear:clearValue}),slotProps:{popper:{modifiers:[{name:`offset`,options:{offset:[0,24]}}]}}},mr.createElement(ir,{label:(0,vr.__)(`Missing variable`,`elementor`),onClick:toggleInfotip})))},VariableControl=()=>{let e=(0,Nt.useBoundProp)(),t=e.value??e.placeholder,n=useVariable(t?.value);if(!n)return Mt.createElement(MissingVariable,null);let{$$type:r}=t;if(n?.deleted)return Mt.createElement(DeletedVariable,{variable:n,propTypeKey:r});let{isCompatible:i}=P(n.type);return i&&!i(e?.propType,n)?Mt.createElement(MismatchVariable,{variable:n}):Mt.createElement(AssignedVariable,{variable:n,propTypeKey:r})},Sr=__toESM(globalThis.React),Cr=globalThis.elementorV2.editorControls,wr=globalThis.elementorV2.icons,Tr=globalThis.wp.i18n,usePropVariableAction=()=>{let{propType:e,path:t}=(0,Cr.useBoundProp)(),n=resolveVariableFromPropType(e);return{visible:!!n,icon:wr.ColorFilterIcon,title:(0,Tr.__)(`Variables`,`elementor`),content:({close:e})=>n?(trackOpenVariablePopover(t,n.variableType),Sr.createElement(VariableSelectionPopover,{closePopover:e,propTypeKey:n.propTypeUtil.key})):null}},resolveVariableFromPropType=e=>{if(e.kind===`union`)for(let t of Object.keys(e.prop_types)){let e=P(t);if(e)return e}},trackOpenVariablePopover=(e,t)=>{trackVariableEvent({varType:t,controlPath:e.join(`.`),action:`open`})},Er=globalThis.elementorV2.httpClient,Dr=globalThis.elementorV2.schema,Or=globalThis.elementorV2.utils,kr=`elementor://variables/tools/manage-global-variable-guide`,Ar=globalThis.elementorV2.editorV1Adapters,jr=globalThis.elementorV2.httpClient,Mr=`elementor/v1/mcp-proxy`,Nr=`elementor://global-variables`,initVariablesResource=(e,t)=>{[t,e].forEach(e=>{let{resource:t,sendResourceUpdated:n}=e,notifyGlobalVariablesUpdated=()=>{n({uri:Nr})};t(`global-variables`,Nr,{description:`Global variables available (v4)`},async e=>{let{data:t}=await(0,jr.httpService)().get(Mr,{params:{uri:e.href}});return{contents:[{uri:e.href,mimeType:`application/json`,text:JSON.stringify(t.data??{})}]}}),window.addEventListener(ce,notifyGlobalVariablesUpdated),(0,Ar.__privateListenTo)((0,Ar.commandEndEvent)(`document/save/update`),notifyGlobalVariablesUpdated)})},Pr=`elementor/v1/mcp-proxy`,Fr=`manage-global-variable`,Ir={COLOR:`global-color-variable`,FONT:`global-font-variable`,SIZE:`global-size-variable`,CUSTOM_SIZE:`global-custom-size-variable`},initManageVariableTool=e=>{let{addTool:t,resource:n}=e,r=(0,Or.isProActive)()?[Ir.COLOR,Ir.FONT,Ir.SIZE,Ir.CUSTOM_SIZE]:[Ir.COLOR,Ir.FONT];n(`manage-global-variable-guide`,kr,{title:`Manage Global Variable Guide`,description:`Detailed guide for using the manage-global-variable tool`,mimeType:`text/plain`},async e=>{let{data:t}=await(0,Er.httpService)().get(Pr,{params:{uri:e.href}});return{contents:[{uri:e.href,mimeType:`text/plain`,text:t.data}]}}),t({name:Fr,description:`Manage V4 global variables (color, font, size, custom-size). Read the guide resource before use. font = single Google Font family name, no fallback stacks, size = measured unit, custom-size = calculated values`,schema:{action:Dr.z.enum([`create`,`update`,`delete`]),id:Dr.z.string().optional().describe(`Variable id — required for update/delete. Get from the global-variables resource.`),type:Dr.z.enum(r),label:Dr.z.string().describe(`Variable label (lowercase, dash-separated) — required for create/update.`),value:Dr.z.string().optional().describe(`Plain CSS value — required for create/update. Color: hex/rgba/hsl. Font: single Google Font family name only — no fallback stacks, no generic families. Size: value with unit e.g. "16px", or "auto" (Pro). Do NOT pass JSON.`)},outputSchema:{status:Dr.z.enum([`ok`]).describe(`Operation status`),message:Dr.z.string().optional().describe(`Error details if status is error`)},requiredResources:[{uri:kr,description:`Full guide for variable types, naming rules, and usage`},{uri:Nr,description:`Current global variables — check before creating to avoid duplicates`}],isDestructive:!0,handler:async e=>{let{data:t}=await(0,Er.httpService)().post(Pr,{tool:Fr,input:e}),n=t.data;return n.variable&&typeof n.watermark==`number`&&applyLocalMutation(e.action,n.variable,n.watermark),{status:`ok`}}})};function initMcp(e,t){window.addEventListener(`elementor/init`,()=>{initManageVariableTool(e),initVariablesResource(e,t)},{once:!0})}var Lr=__toESM(globalThis.React),Rr=globalThis.elementorV2.editorControls,zr=globalThis.elementorV2.editorProps,Br=globalThis.elementorV2.editorUi,Vr=globalThis.elementorV2.icons,Hr=globalThis.wp.i18n,Ur=__toESM(globalThis.React),Wr=globalThis.React,Gr=globalThis.elementorV2.ui,ColorField=({value:e,onChange:t,onValidationChange:n})=>{let[r,i]=(0,Wr.useState)(e),[a,o]=(0,Wr.useState)(``),s=(0,Wr.useRef)(null),c=usePopoverContentRef()??s.current,handleChange=e=>{i(e);let r=validateValue(e);o(r),n?.(r),t(r?``:e)};return Ur.createElement(Gr.UnstableColorField,{id:`color-variable-field`,size:`tiny`,fullWidth:!0,value:r,onChange:handleChange,error:a||void 0,slotProps:{colorPicker:{anchorEl:c,anchorOrigin:{vertical:`top`,horizontal:`right`},transformOrigin:{vertical:`top`,horizontal:-10},slotProps:{colorIndicator:{size:`inherit`,sx:{borderRadius:.5}}}}}})},Kr=__toESM(globalThis.React),qr=globalThis.React,Jr=globalThis.elementorV2.editorControls,Yr=globalThis.elementorV2.editorUi,Xr=globalThis.elementorV2.icons,Zr=globalThis.elementorV2.ui,Qr=globalThis.wp.i18n,FontField=({value:e,onChange:t,onValidationChange:n})=>{let[r,i]=(0,qr.useState)(e),a=(0,qr.useRef)(null),o=usePopoverContentRef()??a.current,s=(0,Zr.usePopupState)({variant:`popover`}),c=(0,Jr.useFontFamilies)(),l=(0,Yr.useSectionWidth)(),u=(0,qr.useMemo)(()=>c.map(({label:e,fonts:t})=>({label:e,items:t})),[c]),handleChange=e=>{i(e);let r=validateValue(e);n?.(r),t(r?``:e)},handleFontFamilyChange=e=>{handleChange(e),s.close()},d=(0,qr.useId)();return Kr.createElement(Kr.Fragment,null,Kr.createElement(Zr.UnstableTag,{id:d,variant:`outlined`,label:r,endIcon:Kr.createElement(Xr.ChevronDownIcon,{fontSize:`tiny`}),...(0,Zr.bindTrigger)(s),fullWidth:!0}),Kr.createElement(Zr.Popover,{disablePortal:!0,disableScrollLock:!0,anchorEl:o,anchorOrigin:{vertical:`top`,horizontal:`right`},transformOrigin:{vertical:`top`,horizontal:-28},...(0,Zr.bindPopover)(s)},Kr.createElement(Jr.ItemSelector,{id:`font-family-variables-selector`,itemsList:u,selectedItem:r,onItemChange:handleFontFamilyChange,onClose:s.close,sectionWidth:l,title:(0,Qr.__)(`Font family`,`elementor`),itemStyle:e=>({fontFamily:e.value}),onDebounce:Jr.enqueueFont,icon:Xr.TextIcon})))},$r=globalThis.elementorV2.editorProps,ei=globalThis.elementorV2.schema,ti=(0,$r.createPropUtils)(`global-size-variable`,ei.z.string()),ni=(0,globalThis.elementorV2.editorCanvas.createTransformer)(e=>null);function registerVariableTypes(){_e({key:E.key,valueField:ColorField,icon:Vr.BrushIcon,propTypeUtil:E,fallbackPropTypeUtil:zr.colorPropTypeUtil,variableType:`color`,startIcon:({value:e})=>Lr.createElement(re,{size:`inherit`,component:`span`,value:e}),defaultValue:`#ffffff`,menuActionsFactory:({variable:e,variableId:t,handlers:n})=>{let r=[];return e.sync_to_v3?r.push({name:(0,Hr.__)(`Stop syncing to Global Colors`,`elementor`),icon:Vr.RefreshOffIcon,color:`text.primary`,onClick:()=>n.onStopSync(t)}):r.push({name:(0,Hr.__)(`Sync to Global Colors`,`elementor`),icon:Vr.RefreshIcon,color:`text.primary`,onClick:()=>n.onStartSync(t)}),r}}),_e({key:pe.key,valueField:FontField,icon:Vr.TextIcon,propTypeUtil:pe,fallbackPropTypeUtil:zr.stringPropTypeUtil,variableType:`font`,defaultValue:`Roboto`});let e={isActive:!1,icon:Vr.ExpandDiagonalIcon,propTypeUtil:ti,fallbackPropTypeUtil:zr.sizePropTypeUtil,styleTransformer:ni,variableType:`size`,selectionFilter:()=>[],emptyState:Lr.createElement(Br.CtaButton,{size:`small`,href:`https://go.elementor.com/go-pro-panel-size-variable/`,onClick:()=>(0,Rr.trackUpgradePromotionClick)({target_name:`variables_popover`,location_l1:`variables_list`})})};_e({...e,key:ti.key,defaultValue:`0px`}),_e({...e,key:`global-custom-size-variable`})}var ri=__toESM(globalThis.React),ii=globalThis.React,ai=globalThis.elementorV2.editorV1Adapters,oi=globalThis.elementorV2.ui,si=`:root`;function StyleVariablesRenderer(){let e=usePortalContainer(),t=useStyleVariables(),n=Object.keys(t).length>0;if(!e||!n)return null;let r=`${si}{${convertToCssVariables(t)}}`;return ri.createElement(oi.Portal,{container:e},ri.createElement(`style`,{"data-e-style-id":`e-variables`,key:r},r))}function usePortalContainer(){return(0,ai.__privateUseListenTo)((0,ai.commandEndEvent)(`editor/documents/attach-preview`),()=>(0,ai.getCanvasIframeDocument)()?.head)}function useStyleVariables(){let[e,t]=(0,ii.useState)({});return(0,ii.useEffect)(()=>{let e=j.subscribe(t);return()=>{e()}},[]),e}function cssVariableDeclaration(e,t){return`--${t?.deleted?e:t.label}:${t.value};`}function convertToCssVariables(e){return Object.entries(e).map(([e,t])=>cssVariableDeclaration(e,t)).join(``)}var ci=globalThis.elementorV2.editorControls,Z=globalThis.elementorV2.editorProps,Q=__toESM(globalThis.React),$=globalThis.elementorV2.editorProps,li=globalThis.elementorV2.ui,ui=globalThis.wp.i18n,di=globalThis.elementorV2.editorProps,fi=globalThis.elementorV2.editorProps,pi=globalThis.elementorV2.schema,mi=(0,fi.createPropUtils)(`global-custom-size-variable`,pi.z.string()),hi=`px`,gi=`fx`;function sizeValue(e){if(ti.isValid(e)||mi.isValid(e))return getVariable(e?.value)?.value;if(di.sizePropTypeUtil.isValid(e)){let{size:t,unit:n}=e.value;return n===`custom`?t||gi:`${t??0}${n??hi}`}return``}var useColorVariable=e=>{let t=e?.value?.color?.value;return getVariable(t||``)},BackgroundRepeaterColorIndicator=({value:e})=>{let t=useColorVariable(e);return Q.createElement(re,{component:`span`,size:`inherit`,value:t?.value})},BackgroundRepeaterLabel=({value:e})=>{let t=useColorVariable(e);return Q.createElement(li.Box,{component:`span`},t?.label)},BoxShadowRepeaterColorIndicator=({value:e})=>{let t=useColorVariable(e);return Q.createElement(re,{component:`span`,size:`inherit`,value:t?.value})},FilterDropShadowIconIndicator=({value:e})=>{let{args:t}=$.cssFilterFunctionPropUtil.extract(e)||{},{color:n}=$.dropShadowFilterPropTypeUtil.extract(t)||{},r=getVariable(n?.value||``);return Q.createElement(re,{component:`span`,size:`inherit`,value:r?.value})},FilterSingleSizeRepeaterLabel=({value:e})=>{let t=$.cssFilterFunctionPropUtil.extract(e);if($.dropShadowFilterPropTypeUtil.isValid(t?.args))return null;let n=t?.args,r=t?.func?.value??``,i=sizeValue(n?.value?.size);return Q.createElement(Q.Fragment,null,Q.createElement(li.Box,{component:`span`,style:{textTransform:`capitalize`}},`${r}: `),Q.createElement(li.Box,{component:`span`},i))},FilterDropShadowRepeaterLabel=({value:e})=>{let{args:t}=$.cssFilterFunctionPropUtil.extract(e)||{},{xAxis:n,yAxis:r,blur:i}=$.dropShadowFilterPropTypeUtil.extract(t)||{},a=[];for(let e of[n,r,i]){let t=sizeValue(e);t&&a.push(t)}return Q.createElement(li.Box,{component:`span`},(0,ui.__)(`Drop shadow:`,`elementor`),` `,a.join(` `))},BoxShadowRepeaterLabel=({value:e})=>{let{position:t,hOffset:n,vOffset:r,blur:i,spread:a}=$.shadowPropTypeUtil.extract(e)||{},o=[];for(let e of[n,r,i,a]){let t=sizeValue(e);t&&o.push(t)}let s=t?.value||`outset`;return Q.createElement(li.Box,{component:`span`,style:{textTransform:`capitalize`}},s,`: `,o.join(` `))},TransformRepeaterLabel=({value:e})=>{let t=[];if($.moveTransformPropTypeUtil.isValid(e)){t.push((0,ui.__)(`Move:`,`elementor`));let{x:n,y:r,z:i}=$.moveTransformPropTypeUtil.extract(e)||{};for(let e of[n,r,i]){let n=sizeValue(e);n&&t.push(n)}}return Q.createElement(li.Box,{component:`span`},t.join(` `))},TransitionsSizeVariableLabel=({value:e})=>{let t=``,n=getVariable(e?.value?.size?.value||``);if(n&&$.selectionSizePropTypeUtil.isValid(e)){let r=e.value?.selection?.value?.key?.value;r&&(t+=`${r}: `),t+=n?.value}return Q.createElement(li.Box,{component:`span`},t)};function registerRepeaterInjections(){backgroundOverlayRepeaterInjections(),boxShadowRepeaterInjections(),transitionsRepeaterInjections(),transformRepeaterInjections(),filterRepeaterInjections()}function backgroundOverlayRepeaterInjections(){(0,ci.injectIntoRepeaterItemIcon)({id:`background-color-variables-icon`,component:BackgroundRepeaterColorIndicator,condition:({value:e})=>hasAssignedColorVariable(Z.backgroundColorOverlayPropTypeUtil.extract(e)?.color)}),(0,ci.injectIntoRepeaterItemLabel)({id:`background-color-variables-label`,component:BackgroundRepeaterLabel,condition:({value:e})=>hasAssignedColorVariable(Z.backgroundColorOverlayPropTypeUtil.extract(e)?.color)})}function boxShadowRepeaterInjections(){(0,ci.injectIntoRepeaterItemIcon)({id:`box-shadow-color-variables-icon`,component:BoxShadowRepeaterColorIndicator,condition:({value:e})=>{let{color:t}=Z.shadowPropTypeUtil.extract(e)||{};return hasAssignedColorVariable(t)}}),(0,ci.injectIntoRepeaterItemLabel)({id:`color-variables-box-shadow-label`,component:BoxShadowRepeaterLabel,condition:({value:e})=>{let{hOffset:t,vOffset:n,blur:r,spread:i}=Z.shadowPropTypeUtil.extract(e)||{};return hasAssignedSizeVariable(t)||hasAssignedSizeVariable(n)||hasAssignedSizeVariable(r)||hasAssignedSizeVariable(i)}})}function transformRepeaterInjections(){(0,ci.injectIntoRepeaterItemLabel)({id:`transform-size-variables-label`,component:TransformRepeaterLabel,condition:({value:e})=>{if(Z.moveTransformPropTypeUtil.isValid(e)){let{x:t,y:n,z:r}=Z.moveTransformPropTypeUtil.extract(e)||{};return hasAssignedSizeVariable(t)||hasAssignedSizeVariable(n)||hasAssignedSizeVariable(r)}return!1}})}function transitionsRepeaterInjections(){(0,ci.injectIntoRepeaterItemLabel)({id:`transition-size-variables-label`,component:TransitionsSizeVariableLabel,condition:({value:e})=>hasAssignedSizeVariable(Z.selectionSizePropTypeUtil.extract(e)?.size)})}function filterRepeaterInjections(){(0,ci.injectIntoRepeaterItemIcon)({id:`filters-color-variables-icon`,component:FilterDropShadowIconIndicator,condition:({value:e})=>{if(!Z.cssFilterFunctionPropUtil.isValid(e))return!1;let t=Z.cssFilterFunctionPropUtil.extract(e)?.args;return Z.dropShadowFilterPropTypeUtil.isValid(t)?hasAssignedColorVariable(Z.dropShadowFilterPropTypeUtil.extract(t)?.color):!1}}),(0,ci.injectIntoRepeaterItemLabel)({id:`filters-drop-shadow-size-variables-label`,component:FilterDropShadowRepeaterLabel,condition:({value:e})=>{if(!Z.cssFilterFunctionPropUtil.isValid(e))return!1;let t=Z.cssFilterFunctionPropUtil.extract(e)?.args;if(Z.dropShadowFilterPropTypeUtil.isValid(t)){let{xAxis:e,yAxis:n,blur:r}=Z.dropShadowFilterPropTypeUtil.extract(t)||{};return hasAssignedSizeVariable(e)||hasAssignedSizeVariable(n)||hasAssignedSizeVariable(r)}return!1}}),(0,ci.injectIntoRepeaterItemLabel)({id:`filters-size-variables-label`,component:FilterSingleSizeRepeaterLabel,condition:({value:e})=>{if(!Z.cssFilterFunctionPropUtil.isValid(e))return!1;let t=Z.cssFilterFunctionPropUtil.extract(e)?.args;return hasAssignedSizeVariable(t?.value?.size)}})}function hasAssignedSizeVariable(e){return!!(ti.isValid(e)||mi.isValid(e))}function hasAssignedColorVariable(e){return!!E.isValid(e)}var{registerPopoverAction:_i}=Tt.controlActionsMenu;function init(){registerVariableTypes(),registerRepeaterInjections(),(0,St.registerControlReplacement)({component:VariableControl,condition:({value:e,placeholder:t})=>hasVariableAssigned(e)?!0:!e&&hasVariableAssigned(t)}),_i({id:`variables`,priority:40,useProps:usePropVariableAction}),N.init(),initMcp((0,Ct.getMCPByDomain)(`variables`,{instructions:`Everything related to V4 ( Atomic ) variables.
2 -# Global variables
3 -- Create/update/delete global variables
4 -- Get list of global variables
5 -- Get details of a global variable
6 -`}),(0,Ct.getMCPByDomain)(`canvas`)),(0,xt.injectIntoTop)({id:`canvas-style-variables-render`,component:StyleVariablesRenderer}),(0,xt.injectIntoLogic)({id:`variables-import-listener`,component:GlobalStylesImportListener}),(0,xt.injectIntoLogic)({id:`mcp-variable-connect-listener`,component:McpVariableConnectListener})}function hasVariableAssigned(e){return(0,wt.isTransformable)(e)?ye(e.$$type):!1}var defaultResolver=e=>t=>{let n=String(t);return{$$type:e,value:N.variables()[n]?n:N.findIdByLabel(n)}},vi={globalVariablesLLMResolvers:{"global-color-variable":defaultResolver(`global-color-variable`),"global-font-variable":defaultResolver(`global-font-variable`),"global-size-variable":defaultResolver(`global-size-variable`)}};0&&(t.exports={GLOBAL_VARIABLES_URI:Nr,Utils:vi,VariablesManagerPanelEmbedded,getMenuActionsForVariable,hasVariable,init,registerVariableType:_e,registerVariableTypes,service:N,sizeVariablePropTypeUtil:ti,trackVariablesManagerEvent})}))());(window.elementorV2=window.elementorV2||{}).editorVariables=o})(),window.elementorV2.editorVariables?.init?.();
1 +!function(){"use strict";var e={d:function(t,a){for(var n in a)e.o(a,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:a[n]})},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 zt},registerVariableType:function(){return z},registerVariableTypes:function(){return xt}});var a=window.elementorV2.editor,n=window.elementorV2.editorEditingPanel,r=window.elementorV2.editorPanels,o=window.elementorV2.editorProps,l=window.React,i=window.elementorV2.editorUi,s=window.elementorV2.editorV1Adapters,c=window.elementorV2.icons,u=window.elementorV2.ui,d=window.wp.i18n,m=window.elementorV2.mixpanel;const p=({varType:e,controlPath:t,action:a})=>{const{dispatchEvent:n,config:r}=(0,m.getMixpanel)();if(!r?.names?.variables?.[a])return;const o=r.names.variables[a];n?.(o,{location:r?.locations?.variables||"",secondaryLocation:r?.secondaryLocations?.variablesPopover||"",trigger:r?.triggers?.click||"",var_type:e,control_path:t,action_type:o})},b=({action:e,varType:t,controlPath:a})=>{const{dispatchEvent:n,config:r}=(0,m.getMixpanel)();if(!r?.names?.variables?.[e])return;const o=r.names.variables[e],l={location:r?.locations?.variablesManager||"",trigger:r?.triggers?.click||"",action_type:o};t&&(l.var_type=t),a&&(l.style_control_path=a),n?.(o,l)},h={MISSING_VARIABLE_NAME:(0,d.__)("Give your variable a name.","elementor"),MISSING_VARIABLE_VALUE:(0,d.__)("Add a value to complete your variable.","elementor"),INVALID_CHARACTERS:(0,d.__)("Use letters, numbers, dashes (-), or underscores (_) for the name.","elementor"),NO_NON_SPECIAL_CHARACTER:(0,d.__)("Names have to include at least one non-special character.","elementor"),VARIABLE_LABEL_MAX_LENGTH:(0,d.__)("Keep names up to 50 characters.","elementor"),DUPLICATED_LABEL:(0,d.__)("This variable name already exists. Please choose a unique name.","elementor"),UNEXPECTED_ERROR:(0,d.__)("There was a glitch. Try saving your variable again.","elementor"),BATCH:{DUPLICATED_LABELS:(e,t)=>(0,d.sprintf)((0,d.__)("We found %1$d duplicated %2$s.","elementor"),e,t),UNEXPECTED_ERROR:(0,d.__)("There was a glitch.","elementor"),DUPLICATED_LABEL_ACTION:(0,d.__)("Take me there","elementor"),DUPLICATED_LABEL_ACTION_MESSAGE:(0,d.__)("Please rename the variables.","elementor"),UNEXPECTED_ERROR_ACTION_MESSAGE:(0,d.__)("Try saving your variables again.","elementor")}},v=e=>{if("duplicated_label"===e?.response?.data?.code)return{field:"label",message:h.DUPLICATED_LABEL};if("batch_duplicated_label"===e?.response?.data?.code){const t=e?.response?.data?.data??{},a=Object.keys(t).length,n=1===a?"name":"names",r=Object.keys(t);return{field:"label",message:h.BATCH.DUPLICATED_LABELS(a,n),severity:"error",IconComponent:c.AlertTriangleFilledIcon,action:{label:h.BATCH.DUPLICATED_LABEL_ACTION,message:h.BATCH.DUPLICATED_LABEL_ACTION_MESSAGE,data:{duplicatedIds:r}}}}return"batch_operation_failed"===e?.response?.data?.code?{field:"label",message:h.BATCH.UNEXPECTED_ERROR,severity:"secondary",IconComponent:c.InfoCircleFilledIcon,action:{message:h.BATCH.UNEXPECTED_ERROR_ACTION_MESSAGE}}:void 0},g=e=>39<e.length?h.VARIABLE_LABEL_MAX_LENGTH:"",y=e=>e.trim()?"":h.MISSING_VARIABLE_VALUE;var E=window.elementorV2.editorCanvas;const f=(0,u.styled)(u.UnstableColorIndicator)(({theme:e})=>({borderRadius:e.shape.borderRadius/2+"px",marginRight:e.spacing(.25)}));var C=window.elementorV2.schema;const w=(0,o.createPropUtils)("global-color-variable",C.z.string());var _=window.elementorV2.httpClient;const T="elementor/v1/variables",S=e=>e.startsWith("tmp-"),k="elementor-global-variables",I="elementor-global-variables-watermark",x="RW",P=(0,o.createPropUtils)("global-font-variable",C.z.string()),A=(()=>{const e={};let t;const a=(t,a)=>!(t in e)||e[t].label!==a.label||e[t].value!==a.value||!(e[t]?.deleted||!a?.deleted)||!(!e[t]?.deleted||a?.deleted),n=e=>{if(e)try{((e,t="preview")=>{const a=window;a.elementor?.helpers?.enqueueFont?.(e,t)})(e)}catch{}};return{subscribe:e=>(t=e,()=>{t=()=>{}}),update:r=>{(t=>{let r=!1;for(const[o,l]of Object.entries(t))a(o,l)&&(e[o]=l,l.type===P.key&&n(l.value),r=!0);return r})(r)&&"function"==typeof t&&t({...e})}}})(),V=new class{notifyChange(){window.dispatchEvent(new Event("variables:updated"))}constructor(){this.state={watermark:-1,variables:{}}}load(){return this.state.watermark=parseInt(localStorage.getItem(I)||"-1"),this.state.variables=JSON.parse(localStorage.getItem(k)||"{}"),this.state.variables}fill(e,t){this.state.variables={},e&&Object.keys(e).length&&(this.state.variables=e),this.state.watermark=t,localStorage.setItem(I,this.state.watermark.toString()),localStorage.setItem(k,JSON.stringify(this.state.variables)),this.notifyChange()}add(e,t){this.load(),this.state.variables[e]=t,localStorage.setItem(k,JSON.stringify(this.state.variables)),this.notifyChange()}update(e,t){this.load(),this.state.variables[e]=t,localStorage.setItem(k,JSON.stringify(this.state.variables)),this.notifyChange()}watermark(e){this.state.watermark=e,localStorage.setItem(I,this.state.watermark.toString())}watermarkDiff(e,t){const a=t-this.state.watermark;return x===e?1!==a:"RO"===e&&0!==a}},O={variables:()=>V.load(),getWatermark:()=>V.state.watermark,init:()=>O.load(),load:()=>(0,_.httpService)().get(T+"/list").then(e=>{const{success:t,data:a}=e.data;if(!t)throw new Error("Unexpected response from server");return a}).then(e=>{const{variables:t,watermark:a}=e;return V.fill(t,a),A.update(t),t}),create:({type:e,label:t,value:a})=>((e,t,a)=>(0,_.httpService)().post(T+"/create",{type:e,label:t,value:a}))(e,t,a).then(e=>{const{success:t,data:a}=e.data;if(!t){const e=a?.message||(0,d.__)("Unexpected response from server","elementor");throw new Error(e)}return a}).then(e=>{const{variable:t,watermark:a}=e;B(x,a);const{id:n,...r}=t;return V.add(n,r),A.update({[n]:r}),{id:n,variable:r}}),update:(e,{label:t,value:a})=>((e,t,a)=>(0,_.httpService)().put(T+"/update",{id:e,label:t,value:a}))(e,t,a).then(e=>{const{success:t,data:a}=e.data;if(!t){const e=a?.message||(0,d.__)("Unexpected response from server","elementor");throw new Error(e)}return a}).then(e=>{const{variable:t,watermark:a}=e;B(x,a);const{id:n,...r}=t;return V.update(n,r),A.update({[n]:r}),{id:n,variable:r}}),delete:e=>(e=>(0,_.httpService)().post(T+"/delete",{id:e}))(e).then(e=>{const{success:t,data:a}=e.data;if(!t)throw new Error("Unexpected response from server");return a}).then(e=>{const{variable:t,watermark:a}=e;B(x,a);const{id:n,...r}=t;return V.update(n,r),A.update({[n]:r}),{id:n,variable:r}}),restore:(e,t,a)=>((e,t,a)=>{const n={id:e};return t&&(n.label=t),a&&(n.value=a),(0,_.httpService)().post(T+"/restore",n)})(e,t,a).then(e=>{const{success:t,data:a}=e.data;if(!t)throw new Error("Unexpected response from server");return a}).then(e=>{const{variable:t,watermark:a}=e;B(x,a);const{id:n,...r}=t;return V.update(n,r),A.update({[n]:r}),{id:n,variable:r}}),batchSave:(e,t)=>{const a=((e,t)=>{const a=[];return Object.entries(t).forEach(([t,n])=>{if(S(t))a.push({type:"create",variable:{...n,id:t}});else if(e[t]){const r=e[t];r.deleted&&!n.deleted?a.push({type:"restore",id:t,...r.label!==n.label&&{label:n.label},...r.value!==n.value&&{value:n.value}}):n.deleted||r.label===n.label&&r.value===n.value&&r.order===n.order||a.push({type:"update",id:t,variable:{...r.label!==n.label&&{label:n.label},...r.value!==n.value&&{value:n.value},...r.order!==n.order&&{order:n.order}}})}}),Object.entries(e).forEach(([e,n])=>{if(S(e)||n.deleted)return;const r=t[e];r&&!r.deleted||a.push({type:"delete",id:e})}),a.filter(e=>{const a=e.id||e.variable?.id;return a&&!(S(a)&&t[a]?.deleted)})})(e,t),n={operations:a,watermark:V.state.watermark};return 0===a.length?Promise.resolve({success:!0,watermark:V.state.watermark,operations:0}):(r=n,(0,_.httpService)().post(T+"/batch",r)).then(e=>{const{success:t,data:a}=e.data;if(!t)throw new Error("Unexpected response from server");return a}).then(e=>{const{results:t,watermark:n}=e;return B(x,n),t&&t.forEach(e=>{if(e.variable){const{id:t,...a}=e.variable;"create"===e.type?V.add(t,a):V.update(t,a),A.update({[t]:a})}}),{success:!0,watermark:n,operations:a.length}});var r}},B=(e,t)=>{V.watermarkDiff(e,t)&&setTimeout(()=>O.load(),500),V.watermark(t)},D=(e,t)=>{let a=e,n="";return t&&(n=t.value),t&&!t.deleted&&(a=t.label),a.trim()?n.trim()?`var(--${a}, ${n})`:`var(--${a})`:null},L=(0,E.createTransformer)(e=>{const t=O.variables()[e];if(!t)return l.createElement("span",null,(0,d.__)("Missing variable","elementor"));const a=t.type===w.key,n=D(e,t);return l.createElement(u.Stack,{direction:"row",spacing:.5,sx:{paddingInline:"1px"},alignItems:"center"},a&&l.createElement(f,{size:"inherit",value:t.value}),l.createElement(u.Typography,{variant:"caption",overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"},n))}),R=(0,E.createTransformer)(e=>{const t=O.variables();return t[e]?D(e,t[e]):null}),{registerVariableType:z,getVariableType:F,getVariableTypes:M,hasVariableType:U}=function(){const e={};return{registerVariableType:({icon:t,startIcon:a,valueField:r,propTypeUtil:o,variableType:l,defaultValue:i,selectionFilter:s,valueTransformer:c,fallbackPropTypeUtil:u,isCompatible:d})=>{if(e[o.key])throw new Error(`Variable with key "${o.key}" is already registered.`);var m;d||(d=(e,t)=>"union"===e.kind&&t.type in e.prop_types),e[o.key]={icon:t,startIcon:a,valueField:r,propTypeUtil:o,variableType:l,defaultValue:i,selectionFilter:s,valueTransformer:c,fallbackPropTypeUtil:u,isCompatible:d},m=o.key,E.styleTransformersRegistry.register(m,R),(e=>{n.stylesInheritanceTransformersRegistry.register(e,L)})(o.key)},getVariableType:t=>e[t],getVariableTypes:()=>e,hasVariableType:t=>t in e}}(),j="delete-variable-dialog",N=({open:e,label:t,closeDialog:a,onConfirm:n})=>l.createElement(u.Dialog,{open:e,onClose:a,"aria-labelledby":j,maxWidth:"xs"},l.createElement(u.DialogTitle,{id:j,display:"flex",alignItems:"center",gap:1,sx:{lineHeight:1}},l.createElement(c.AlertOctagonFilledIcon,{color:"error"}),(0,d.__)("Delete this variable?","elementor")),l.createElement(u.DialogContent,null,l.createElement(u.DialogContentText,{variant:"body2",color:"textPrimary"},(0,d.__)("All elements using","elementor")," ",l.createElement(u.Typography,{variant:"subtitle2",component:"span",sx:{lineBreak:"anywhere"}},t)," ",(0,d.__)("will keep their current values, but the variable itself will be removed.","elementor"))),l.createElement(u.DialogActions,null,l.createElement(u.Button,{color:"secondary",onClick:a},(0,d.__)("Not now","elementor")),l.createElement(u.Button,{variant:"contained",color:"error",onClick:n},(0,d.__)("Delete","elementor"))));var W=window.elementorV2.editorCurrentUser;const H=()=>{const{canUser:e}=(0,W.useCurrentUserCapabilities)();return{canAssign:()=>e("edit_posts"),canUnlink:()=>e("edit_posts"),canAdd:()=>e("manage_options"),canDelete:()=>e("manage_options"),canEdit:()=>e("manage_options"),canRestore:()=>e("manage_options"),canManageSettings:()=>e("manage_options")}},$=({icon:e,title:t,message:a,onAdd:n})=>{const r=H().canAdd();return l.createElement(u.Stack,{gap:1,alignItems:"center",justifyContent:"flex-start",height:"100%",color:"text.secondary",sx:{p:2.5,pt:8,pb:5.5}},e,r?l.createElement(l.Fragment,null,l.createElement(G,{title:t,message:a}),n&&l.createElement(u.Button,{variant:"outlined",color:"secondary",size:"small",onClick:n},(0,d.__)("Create a variable","elementor"))):l.createElement(G,{title:(0,d.__)("There are no variables","elementor"),message:(0,d.__)("With your current role, you can only connect and detach variables.","elementor")}))};function G({title:e,message:t}){return l.createElement(l.Fragment,null,l.createElement(u.Typography,{align:"center",variant:"subtitle2"},e),l.createElement(u.Typography,{align:"center",variant:"caption",maxWidth:"180px"},t))}const q=({searchValue:e,onClear:t,icon:a})=>l.createElement(u.Stack,{gap:1,alignItems:"center",justifyContent:"center",p:2.5,color:"text.secondary",sx:{pb:3.5,pt:8}},a,l.createElement(u.Typography,{align:"center",variant:"subtitle2"},(0,d.__)("Sorry, nothing matched","elementor"),l.createElement("br",null),"“",e,"”."),l.createElement(u.Typography,{align:"center",variant:"caption",sx:{display:"flex",flexDirection:"column"}},(0,d.__)("Try something else.","elementor"),l.createElement(u.Link,{color:"text.secondary",variant:"caption",component:"button",onClick:t},(0,d.__)("Clear & try again","elementor"))));var K=window.elementorV2.editorControls;const X=(0,l.createContext)(null);function J({children:e,propTypeKey:t}){return l.createElement(X.Provider,{value:t},e)}function Y(){const e=(0,l.useContext)(X);if(null===e)throw new Error("useVariableType must be used within a VariableTypeProvider");return F(e)}function Z(e,t){const a=t.toLowerCase();return e.filter(e=>e.label.toLowerCase().includes(a))}const Q=(e=!0)=>{const t=O.variables();return e?t:Object.fromEntries(Object.entries(t).filter(([,e])=>!e.deleted))},ee=e=>{const t=Q();return t?.[e]?{...t[e],key:e}:null},te=e=>{const t=Q(!1);return Object.entries(t).filter(([,t])=>t.type===e).map(([e,{label:t,value:a,order:n}])=>({key:e,label:t,value:a,order:n}))},ae=({id:e})=>e,ne=(e,t,a)=>O.restore(e,t,a).then(ae);function re(){return re=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},re.apply(null,arguments)}const oe="tiny",le=({variables:e,onCreate:t,disabled:a,menuState:n})=>{const r=(0,l.useRef)(null),o=M(),i=Object.entries(o).map(([a,n])=>{const r=n.variableType.charAt(0).toUpperCase()+n.variableType.slice(1);return{key:a,name:r,icon:n.icon,onClick:()=>{const r=ie(e,a,n.variableType);t(a,r,n.defaultValue||""),b({action:"add",varType:n.variableType})}}});return l.createElement(l.Fragment,null,l.createElement(u.IconButton,re({},(0,u.bindTrigger)(n),{ref:r,disabled:a,size:oe,"aria-label":(0,d.__)("Add variable","elementor")}),l.createElement(c.PlusIcon,{fontSize:oe})),l.createElement(u.Menu,re({disablePortal:!0,MenuListProps:{dense:!0},PaperProps:{elevation:6}},(0,u.bindMenu)(n),{anchorEl:r.current,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},"data-testid":"variable-manager-create-menu"}),i.map(e=>l.createElement(u.MenuItem,{key:e.key,onClick:()=>{e.onClick?.(),n.close()},sx:{gap:1.5}},(0,l.createElement)(e.icon,{fontSize:oe,color:"action"}),l.createElement(u.Typography,{variant:"caption",color:"text.primary"},e.name)))))},ie=(e,t,a)=>{const n=Object.values(e).filter(e=>e.type===t).map(e=>e.label);let r=1,o=`${a}-${r}`;for(;n.includes(o);)r++,o=`${a}-${r}`;return o};function se(){return se=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},se.apply(null,arguments)}function ce(e,t){return e.trim().toLowerCase()===t.trim().toLowerCase()}const ue=e=>{const[t,a]=(0,l.useState)(e??{value:"",message:""});return{labelFieldError:t,setLabelFieldError:a}},de=({value:e,error:t,onChange:a,id:n,onErrorChange:r,size:o="tiny",focusOnShow:s=!1,selectOnShow:c=!1,showWarningInfotip:d=!1,variables:m})=>{const[p,b]=(0,l.useState)(e),[v,y]=(0,l.useState)(""),E=(0,l.useRef)(null);let f=v;ce(p,t?.value??"")&&t?.message&&(f=t.message);const C=f?"":g(p),w=l.createElement(u.TextField,{ref:E,id:n,size:o,fullWidth:!0,value:p,error:!!f,onChange:e=>(e=>{b(e);const n=((e,t)=>e.trim()?/^[a-zA-Z0-9_-]+$/.test(e)?/[a-zA-Z0-9]/.test(e)?50<e.length?h.VARIABLE_LABEL_MAX_LENGTH:Object.values(t??{}).some(t=>t.label===e)?h.DUPLICATED_LABEL:"":h.NO_NON_SPECIAL_CHARACTER:h.INVALID_CHARACTERS:h.MISSING_VARIABLE_NAME)(e,m);y(n),r?.(n),a(ce(e,t?.value??"")||n?"":e)})(e.target.value),inputProps:{maxLength:50,...c&&{onFocus:e=>e.target.select()},"aria-label":"Name"},autoFocus:s});if(d){const e=Math.max(240,E.current?.getBoundingClientRect().width??240);return l.createElement(i.WarningInfotip,se({open:Boolean(f||C),text:f||C,placement:"bottom-start",width:e,offset:[0,-15]},C&&{hasError:!1}),w)}return w};function me(){return me=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},me.apply(null,arguments)}const pe=({menuActions:e,disabled:t,itemId:a})=>{const n=(0,u.usePopupState)({variant:"popover"});return l.createElement(l.Fragment,null,l.createElement(u.IconButton,me({},(0,u.bindTrigger)(n),{disabled:t,size:"tiny"}),l.createElement(c.DotsVerticalIcon,{fontSize:"tiny"})),l.createElement(u.Menu,me({disablePortal:!0,MenuListProps:{dense:!0},PaperProps:{elevation:6}},(0,u.bindMenu)(n),{anchorEl:n.anchorEl,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},open:n.isOpen,onClose:n.close}),e.map(e=>l.createElement(u.MenuItem,{key:e.name,onClick:()=>{e.onClick?.(a),n.close()},sx:{color:e.color,gap:1}},e.icon&&(0,l.createElement)(e.icon,{fontSize:"inherit"})," ",e.name))))},be=({children:e,isHeader:t,width:a,maxWidth:n,align:r,noPadding:o,sx:i})=>{const s={maxWidth:n??150,cursor:"initial",typography:"caption",...t&&{color:"text.primary",fontWeight:"bold"},...t&&!o&&{padding:"10px 16px"},...a&&{width:a},...i};return l.createElement(u.TableCell,{size:"small",padding:o?"none":void 0,align:r,sx:s},e)},he=l.memo(({initialValue:e,children:t,editableElement:a,onChange:n,prefixElement:r,autoEdit:o=!1,onRowRef:i,onAutoEditComplete:s,gap:c=1,fieldType:d})=>{const[m,p]=(0,l.useState)(e),[b,h]=(0,l.useState)(!1),{labelFieldError:v,setLabelFieldError:g}=ue(),[y,E]=(0,l.useState)(""),f=(0,l.useRef)(null),C=(0,l.useCallback)(()=>{"label"===d&&v?.message||"value"===d&&y||n(m),h(!1)},[m,n,d,v,y]);(0,l.useEffect)(()=>{i?.(f?.current)},[i]),(0,l.useEffect)(()=>{o&&!b&&(h(!0),s?.())},[o,b,s]);const w=()=>{h(!0)},_=e=>{"Enter"===e.key?C():"Escape"===e.key&&h(!1)," "!==e.key||b||(e.preventDefault(),h(!0))},T=(0,l.useCallback)(e=>{p(e)},[]),S=(0,l.useCallback)(e=>{"label"===d?g({value:m,message:e}):E(e)},[d,m,g,E]);let k;"label"===d?k=v:"value"===d&&(k={value:m,message:y});const I=a({value:m,onChange:T,onValidationChange:S,error:k});return b?l.createElement(u.ClickAwayListener,{onClickAway:C},l.createElement(u.Stack,{ref:f,direction:"row",alignItems:"center",gap:c,onDoubleClick:w,onKeyDown:_,tabIndex:0,role:"button","aria-label":"Double click or press Space to edit"},r,I)):l.createElement(u.Stack,{ref:f,direction:"row",alignItems:"center",gap:c,onDoubleClick:w,onKeyDown:_,tabIndex:0,role:"button","aria-label":"Double click or press Space to edit"},r,t)});function ve(){return ve=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},ve.apply(null,arguments)}const ge=({menuActions:e,variables:t,onChange:a,autoEditVariableId:n,onAutoEditComplete:r,onFieldError:o})=>{const s=(0,l.useRef)(null),m=(0,l.useRef)(new Map);(0,l.useEffect)(()=>{if(n&&s.current){const e=m.current.get(n);e&&setTimeout(()=>{e.scrollIntoView({behavior:"smooth",block:"center",inline:"nearest"})},100)}},[n]);const p=e=>t=>{t?m.current.set(e,t):m.current.delete(e)},b=Object.keys(t).sort(function(e){return(t,a)=>(e[t]?.order??Number.MAX_SAFE_INTEGER)-(e[a]?.order??Number.MAX_SAFE_INTEGER)}(t)),h=b.filter(e=>!t[e].deleted).map(e=>{const a=t[e],n=F(a.type);return{id:e,type:a.type,name:a.label,value:a.value,...n}}),v={minWidth:250,tableLayout:"fixed"};return l.createElement(u.TableContainer,{ref:s,sx:{overflow:"initial"}},l.createElement(u.Table,{sx:v,"aria-label":"Variables manager list with drag and drop reordering",stickyHeader:!0},l.createElement(u.TableHead,null,l.createElement(u.TableRow,null,l.createElement(be,{isHeader:!0,noPadding:!0,width:10,maxWidth:10}),l.createElement(be,{isHeader:!0},(0,d.__)("Name","elementor")),l.createElement(be,{isHeader:!0},(0,d.__)("Value","elementor")),l.createElement(be,{isHeader:!0,noPadding:!0,width:16,maxWidth:16}))),l.createElement(u.TableBody,null,l.createElement(u.UnstableSortableProvider,{value:b,onChange:e=>{const n={...t};e.forEach((e,t)=>{const a=n[e];a&&(n[e]=Object.assign({},a,{order:t+1}))}),a(n)},variant:"static",restrictAxis:!0,dragOverlay:({children:e,...t})=>l.createElement(u.Table,ve({sx:v},t),l.createElement(u.TableBody,null,e))},h.map(s=>l.createElement(u.UnstableSortableItem,{key:s.id,id:s.id,render:({itemProps:d,showDropIndication:m,triggerProps:b,itemStyle:h,triggerStyle:v,isDragged:g,dropPosition:y,setTriggerRef:E,isSorting:f})=>{const C=m&&"before"===y,w=m&&"after"===y;return l.createElement(u.TableRow,ve({},d,{selected:g,sx:{...C&&{"& td, & th":{borderTop:"2px solid",borderTopColor:"primary.main"}},...w&&{"& td, & th":{borderBottom:"2px solid",borderBottomColor:"primary.main"}},'& [role="toolbar"], & [draggable]':{opacity:0},"&:hover, &:focus-within":{backgroundColor:"action.hover",'& [role="toolbar"], & [draggable]':{opacity:1}}},style:{...h,...v}}),l.createElement(be,{noPadding:!0,width:10,maxWidth:10},l.createElement(u.IconButton,ve({size:"small",ref:E},b,{disabled:f,draggable:!0}),l.createElement(c.GripVerticalIcon,{fontSize:"inherit"}))),l.createElement(be,null,l.createElement(he,{initialValue:s.name,onChange:e=>{e!==s.name&&a({...t,[s.id]:{...t[s.id],label:e}})},prefixElement:(0,l.createElement)(s.icon,{fontSize:"inherit"}),editableElement:({value:e,onChange:a,onValidationChange:r,error:i})=>l.createElement(de,{id:"variable-label-"+s.id,size:"tiny",value:e,onChange:a,onErrorChange:e=>{r?.(e),o?.(!!e)},error:i,focusOnShow:!0,selectOnShow:n===s.id,showWarningInfotip:!0,variables:t}),autoEdit:n===s.id,onRowRef:p(s.id),onAutoEditComplete:n===s.id?r:void 0,fieldType:"label"},l.createElement(i.EllipsisWithTooltip,{title:s.name,sx:{border:"4px solid transparent"}},s.name))),l.createElement(be,null,l.createElement(he,{initialValue:s.value,onChange:e=>{e!==s.value&&a({...t,[s.id]:{...t[s.id],value:e}})},editableElement:({value:e,onChange:t,onValidationChange:a,error:n})=>s.valueField({value:e,onChange:t,onValidationChange:e=>{a?.(e),o?.(!!e)},error:n}),onRowRef:p(s.id),gap:.25,fieldType:"value"},s.startIcon&&s.startIcon({value:s.value}),l.createElement(i.EllipsisWithTooltip,{title:s.value,sx:{border:"4px solid transparent",lineHeight:"1",pt:.25}},s.value))),l.createElement(be,{align:"right",noPadding:!0,width:16,maxWidth:16,sx:{paddingInlineEnd:1}},l.createElement(u.Stack,{role:"toolbar",direction:"row",justifyContent:"flex-end"},l.createElement(pe,{menuActions:e,disabled:f,itemId:s.id}))))}}))))))},ye="variables-manager",{panel:Ee,usePanelActions:fe}=(0,r.__createPanel)({id:ye,component:function(){const{close:e}=fe(),{open:t,close:a,isOpen:n}=(0,i.useDialog)(),o=(0,u.usePopupState)({variant:"popover"}),{variables:s,isDirty:m,searchValue:p,isSaveDisabled:h,handleOnChange:g,createVariable:y,handleDeleteVariable:E,handleSave:f,isSaving:C,handleSearch:w,setIsSaving:_,setIsSaveDisabled:T}=(()=>{const[e,t]=(0,l.useState)(()=>Q(!1)),[a,n]=(0,l.useState)([]),[r,o]=(0,l.useState)(!1),[i,s]=(0,l.useState)(!1),[c,u]=(0,l.useState)(!1),[d,m]=(0,l.useState)(""),p=(0,l.useCallback)(a=>{t({...e,...a}),s(!0)},[e]),b=(0,l.useCallback)((e,a,n)=>{const r=`tmp-${Date.now().toString(36)}-${Math.random().toString(36).substring(2,8)}`,o={id:r,label:a.trim(),value:n.trim(),type:e};return t(e=>({...e,[r]:o})),s(!0),r},[]),h=(0,l.useCallback)(e=>{n(t=>[...t,e]),t(t=>({...t,[e]:{...t[e],deleted:!0}})),s(!0)},[]),v=(0,l.useCallback)(async()=>{const a=Q(!1);u(!0);const r=await O.batchSave(a,e);if(r.success){await O.load();const e=O.variables();t(e),n([]),s(!1)}return{success:r.success}},[e]);return{variables:(()=>{const t=Object.entries(e).map(([e,t])=>({...t,id:e})),a=Z(t,d);return Object.fromEntries(a.map(({id:e,...t})=>[e,t]))})(),deletedVariables:a,isDirty:i,isSaveDisabled:r,handleOnChange:p,createVariable:b,handleDeleteVariable:h,handleSave:v,isSaving:c,handleSearch:e=>{m(e)},searchValue:d,setIsSaving:u,setIsSaveDisabled:o}})(),{autoEditVariableId:S,startAutoEdit:k,handleAutoEditComplete:I}=(()=>{const[e,t]=(0,l.useState)(void 0);return{autoEditVariableId:e,startAutoEdit:(0,l.useCallback)(e=>{t(e)},[]),handleAutoEditComplete:(0,l.useCallback)(()=>{setTimeout(()=>{t(void 0)},100)},[])}})(),{createNavigationCallback:x,resetNavigation:P}=(()=>{const e=(0,l.useRef)(0);return{createNavigationCallback:(0,l.useCallback)((t,a,n)=>()=>{if(!t?.length)return;const r=e.current,o=t[r];if(o){a(o);const l=r+1;l>=t.length?(n(),e.current=0):e.current=l}},[]),resetNavigation:(0,l.useCallback)(()=>{e.current=0},[])}})(),[A,V]=(0,l.useState)(null),[B,D]=(0,l.useState)(null);Ce(m);const L=(0,l.useCallback)((e,t,a)=>{const n=y(e,t,a);n&&k(n)},[y,k]),R=async()=>{try{D(null),P();const e=await f();return b({action:"saveChanges"}),e}catch(e){const t=v(e),a=t?.action?.data?.duplicatedIds;return t&&"label"===t.field&&(a&&t.action&&(t.action.callback=x(a,k,()=>{T(!1)})),D(t),T(!0),P()),{success:!1,error:t}}finally{_(!1)}},z=(0,l.useCallback)(e=>{E(e),V(null)},[E]),M=[{name:(0,d.__)("Delete","elementor"),icon:c.TrashIcon,color:"error.main",onClick:e=>{const t=s[e];if(t){V({id:e,label:t.label});const a=F(t.type);b({action:"delete",varType:a?.variableType})}}}],U=Object.values(s).some(e=>!e.deleted);return l.createElement(i.ThemeProvider,null,l.createElement(r.Panel,null,l.createElement(r.PanelHeader,{sx:{height:"unset"}},l.createElement(u.Stack,{width:"100%",direction:"column",alignItems:"center"},l.createElement(u.Stack,{p:1,pl:2,width:"100%",direction:"row",alignItems:"center"},l.createElement(u.Stack,{width:"100%",direction:"row",gap:1},l.createElement(r.PanelHeaderTitle,{sx:{display:"flex",alignItems:"center",gap:.5}},l.createElement(c.ColorFilterIcon,{fontSize:"inherit"}),(0,d.__)("Variables Manager","elementor"))),l.createElement(u.Stack,{direction:"row",gap:.5,alignItems:"center"},l.createElement(le,{onCreate:L,variables:s,menuState:o}),l.createElement(u.CloseButton,{"aria-label":"Close",slotProps:{icon:{fontSize:oe}},onClick:()=>{m?t():e()}}))),l.createElement(u.Stack,{width:"100%",direction:"row",gap:1},l.createElement(i.SearchField,{sx:{display:"flex",flex:1},placeholder:(0,d.__)("Search","elementor"),value:p,onSearch:w})),l.createElement(u.Divider,{sx:{width:"100%"}}))),l.createElement(r.PanelBody,{sx:{display:"flex",flexDirection:"column",height:"100%"}},U&&l.createElement(ge,{menuActions:M,variables:s,onChange:g,autoEditVariableId:S,onAutoEditComplete:I,onFieldError:T}),!U&&p&&l.createElement(q,{searchValue:p,onClear:()=>w(""),icon:l.createElement(c.ColorFilterIcon,{fontSize:"large"})}),!U&&!p&&l.createElement($,{title:(0,d.__)("Create your first variable","elementor"),message:(0,d.__)("Variables are saved attributes that you can apply anywhere on your site.","elementor"),icon:l.createElement(c.ColorFilterIcon,{fontSize:"large"}),onAdd:o.open})),l.createElement(r.PanelFooter,null,l.createElement(u.Infotip,{placement:"right",open:!!B,content:B?l.createElement(u.Alert,{severity:B.severity??"error",action:B.action?.label?l.createElement(u.AlertAction,{onClick:B.action.callback},B.action.label):void 0,onClose:B.action?.label?void 0:()=>{D(null),T(!1)},icon:B.IconComponent?l.createElement(B.IconComponent,null):l.createElement(c.AlertTriangleFilledIcon,null)},l.createElement(u.AlertTitle,null,B.message),B.action?.message):null,arrow:!1,slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[-10,10]}}]}}},l.createElement(u.Button,{fullWidth:!0,size:"small",color:"global",variant:"contained",disabled:h||!m||C,onClick:R,loading:C},(0,d.__)("Save changes","elementor"))))),A&&l.createElement(N,{open:!0,label:A.label,onConfirm:()=>z(A.id),closeDialog:()=>V(null)}),n&&l.createElement(i.SaveChangesDialog,null,l.createElement(i.SaveChangesDialog.Title,{onClose:a},(0,d.__)("You have unsaved changes","elementor")),l.createElement(i.SaveChangesDialog.Content,null,l.createElement(i.SaveChangesDialog.ContentText,null,(0,d.__)("To avoid losing your updates, save your changes before leaving.","elementor"))),l.createElement(i.SaveChangesDialog.Actions,{actions:{discard:{label:(0,d.__)("Discard","elementor"),action:()=>{a(),e()}},confirm:{label:(0,d.__)("Save","elementor"),action:async()=>{const t=await R();a(),t?.success&&e()}}}})))},allowedEditModes:["edit",ye],onOpen:()=>{(0,s.changeEditMode)(ye)},onClose:()=>{(0,s.changeEditMode)("edit")},isOpenPreviousElement:!0}),Ce=e=>{(0,l.useEffect)(()=>{const t=t=>{e&&t.preventDefault()};return window.addEventListener("beforeunload",t),()=>{window.removeEventListener("beforeunload",t)}},[e])};function we(e,t,a){return()=>{const{fallbackPropTypeUtil:n}=F(t),r=function(e,t){const{valueTransformer:a}=F(t);return a?a(e.value):e.value}(e,t);a(n.create(r))}}const _e=(0,l.createContext)(null),Te=({children:e})=>{const[t,a]=(0,l.useState)(null);return l.createElement(_e.Provider,{value:t},l.createElement(u.Box,{ref:a},e))},Se=()=>(0,l.useContext)(_e),ke=()=>{const{propTypeUtil:e}=Y(),t=(0,K.useBoundProp)(e);return{...t,setVariableValue:e=>Ie(e,t),variableId:t.value??t.placeholder}},Ie=(e,t)=>{const a=xe(t.value),n=xe(t.placeholder),r=xe(e);return a||n!==r?t.setValue(e):t.setValue(null)},xe=e=>(0,o.isTransformable)(e)?e.value:e,Pe=({id:e,label:t,errorMsg:a,noticeMsg:n,children:r})=>l.createElement(u.Grid,{container:!0,gap:.75,alignItems:"center"},l.createElement(u.Grid,{item:!0,xs:12},l.createElement(u.FormLabel,{htmlFor:e,size:"tiny"},t)),l.createElement(u.Grid,{item:!0,xs:12},r,a&&l.createElement(u.FormHelperText,{error:!0},a),n&&l.createElement(u.FormHelperText,null,n))),Ae="tiny",Ve=({onGoBack:e,onClose:t})=>{const{icon:a,valueField:r,variableType:o,propTypeUtil:s}=Y(),{setVariableValue:m,path:b}=ke(),{propType:y}=(0,K.useBoundProp)(),E=(()=>{const{value:e}=(0,K.useBoundProp)(),t=U(e?.$$type)&&Boolean(e?.value),a=ee(t?e.value:"");return t?a?a.value:"":e?.value??""})(),[f,C]=(0,l.useState)(E),[w,_]=(0,l.useState)(""),[T,S]=(0,l.useState)(""),[k,I]=(0,l.useState)(""),{labelFieldError:x,setLabelFieldError:P}=ue(),A=()=>{C(""),_(""),S(""),I(""),t()},V=""===w.trim()||("string"==typeof f?""===f.trim():!1===Boolean(f))||!!T;return l.createElement(n.PopoverBody,{height:"auto"},l.createElement(i.PopoverHeader,{icon:l.createElement(l.Fragment,null,e&&l.createElement(u.IconButton,{size:Ae,"aria-label":(0,d.__)("Go Back","elementor"),onClick:e},l.createElement(c.ArrowLeftIcon,{fontSize:Ae})),l.createElement(a,{fontSize:Ae})),title:(0,d.__)("Create variable","elementor"),onClose:A}),l.createElement(u.Divider,null),l.createElement(K.PopoverContent,{p:2},l.createElement(Pe,{id:"variable-label",label:(0,d.__)("Name","elementor"),errorMsg:x?.message,noticeMsg:g(w)},l.createElement(de,{id:"variable-label",value:w,error:x,onChange:e=>{_(e),S("")},onErrorChange:e=>{P({value:w,message:e})}})),l.createElement(Pe,{errorMsg:k,label:(0,d.__)("Value","elementor")},l.createElement(u.Typography,{variant:"h5",id:"variable-value-wrapper"},l.createElement(r,{value:f,onChange:e=>{C(e),S(""),I("")},onValidationChange:I,propType:y}))),T&&l.createElement(u.FormHelperText,{error:!0},T)),l.createElement(u.CardActions,{sx:{pt:.5,pb:1}},l.createElement(u.Button,{id:"create-variable-button",size:"small",variant:"contained",disabled:V,onClick:()=>{var e;(e={value:f,label:w,type:s.key},O.create(e).then(ae)).then(e=>{m(e),A()}).catch(e=>{const t=v(e);if(t&&"label"===t.field)return _(""),void P({value:w,message:t.message});S(h.UNEXPECTED_ERROR)}),p({varType:o,controlPath:b.join("."),action:"save"})}},(0,d.__)("Create","elementor"))))},Oe=({closeDialog:e,onConfirm:t,onSuppressMessage:a})=>{const[n,r]=(0,l.useState)(!1);return l.createElement(u.Dialog,{open:!0,onClose:e,maxWidth:"xs"},l.createElement(u.DialogTitle,{display:"flex",alignItems:"center",gap:1},l.createElement(c.AlertTriangleFilledIcon,{color:"secondary"}),(0,d.__)("Changes to variables go live right away.","elementor")),l.createElement(u.DialogContent,null,l.createElement(u.DialogContentText,{variant:"body2",color:"textPrimary"},(0,d.__)("Don't worry - all other changes you make will wait until you publish your site.","elementor"))),l.createElement(u.DialogActions,{sx:{justifyContent:"space-between",alignItems:"center"}},l.createElement(u.FormControlLabel,{control:l.createElement(u.Checkbox,{checked:n,onChange:e=>r(e.target.checked),size:"small"}),label:l.createElement(u.Typography,{variant:"body2"},(0,d.__)("Don't show me again","elementor"))}),l.createElement("div",null,l.createElement(u.Button,{color:"secondary",onClick:e},(0,d.__)("Keep editing","elementor")),l.createElement(u.Button,{variant:"contained",color:"secondary",onClick:()=>{n&&a?.(),t?.()},sx:{ml:1}},(0,d.__)("Save","elementor")))))},Be="tiny",De=(0,d.__)("Delete variable","elementor"),Le=({onClose:e,onGoBack:t,onSubmit:a,editId:r})=>{const{icon:o,valueField:s,variableType:m}=Y(),{setVariableValue:p,variableId:b}=ke(),{propType:y}=(0,K.useBoundProp)(),[E,f]=(0,W.useSuppressedMessage)("edit-confirmation-dialog"),[C,w]=(0,l.useState)(!1),[_,T]=(0,l.useState)(!1),[S,k]=(0,l.useState)(""),[I,x]=(0,l.useState)(""),{labelFieldError:P,setLabelFieldError:V}=ue(),B=ee(r);if(!B)throw new Error(`Global ${m} variable not found`);const D=H(),[L,R]=(0,l.useState)(()=>B.value),[z,F]=(0,l.useState)(()=>B.label);(0,l.useEffect)(()=>(A.update({[r]:{...B,value:L}}),()=>{A.update({[r]:{...B}})}),[r,L,B]);const M=()=>{((e,{value:t,label:a})=>O.update(e,{value:t,label:a}).then(ae))(r,{value:L,label:z}).then(()=>{U(),a?.()}).catch(e=>{const t=v(e);if(t&&"label"===t.field)return F(""),void V({value:z,message:t.message});k(h.UNEXPECTED_ERROR)})},U=()=>{r===b&&p(r)},j=[];D.canDelete()&&j.push(l.createElement(u.Tooltip,{key:"delete",placement:"top",title:De},l.createElement(u.IconButton,{size:Be,onClick:()=>{w(!0)},"aria-label":De},l.createElement(c.TrashIcon,{fontSize:Be}))));const $=L===B.value&&z===B.label||""===z.trim()||("string"==typeof L?""===L.trim():!1===Boolean(L))||!!S;return l.createElement(l.Fragment,null,l.createElement(n.PopoverBody,{height:"auto"},l.createElement(i.PopoverHeader,{title:(0,d.__)("Edit variable","elementor"),onClose:e,icon:l.createElement(l.Fragment,null,t&&l.createElement(u.IconButton,{size:Be,"aria-label":(0,d.__)("Go Back","elementor"),onClick:t},l.createElement(c.ArrowLeftIcon,{fontSize:Be})),l.createElement(o,{fontSize:Be})),actions:j}),l.createElement(u.Divider,null),l.createElement(K.PopoverContent,{p:2},l.createElement(Pe,{id:"variable-label",label:(0,d.__)("Name","elementor"),errorMsg:P?.message,noticeMsg:g(z)},l.createElement(de,{id:"variable-label",value:z,error:P,onChange:e=>{F(e),k("")},onErrorChange:e=>{V({value:z,message:e})}})),l.createElement(Pe,{errorMsg:I,label:(0,d.__)("Value","elementor")},l.createElement(u.Typography,{variant:"h5"},l.createElement(s,{value:L,onChange:e=>{R(e),k(""),x("")},onValidationChange:x,propType:y}))),S&&l.createElement(u.FormHelperText,{error:!0},S)),l.createElement(u.CardActions,{sx:{pt:.5,pb:1}},l.createElement(u.Button,{size:"small",variant:"contained",disabled:$,onClick:()=>{E?M():T(!0)}},(0,d.__)("Save","elementor")))),C&&l.createElement(N,{open:!0,label:z,onConfirm:()=>{var e;(e=r,O.delete(e).then(ae)).then(()=>{U(),a?.()})},closeDialog:()=>{w(!1)}}),_&&!E&&l.createElement(Oe,{closeDialog:()=>{T(!1)},onConfirm:M,onSuppressMessage:f}))},Re=(0,d.__)("Edit variable","elementor"),ze=({item:e})=>{const t=e.onEdit;return l.createElement(l.Fragment,null,l.createElement(u.ListItemIcon,null,e.icon),l.createElement(u.Box,{sx:{flex:1,minWidth:0,display:"flex",alignItems:"center",gap:1}},l.createElement(i.EllipsisWithTooltip,{title:e.label||e.value,as:u.Typography,variant:"caption",color:"text.primary",sx:{marginTop:"1px",lineHeight:"2"},maxWidth:"50%"}),e.secondaryText&&l.createElement(i.EllipsisWithTooltip,{title:e.secondaryText,as:u.Typography,variant:"caption",color:"text.tertiary",sx:{marginTop:"1px",lineHeight:"1"},maxWidth:"50%"})),!!t&&l.createElement(u.Tooltip,{placement:"top",title:Re},l.createElement(u.IconButton,{sx:{mx:1,opacity:"0"},onClick:a=>{a.stopPropagation(),t(e.value)},"aria-label":Re},l.createElement(c.EditIcon,{color:"action",fontSize:"tiny"}))))},Fe=(0,u.styled)(u.MenuList)(({theme:e})=>({"& > li":{height:32,width:"100%",display:"flex",alignItems:"center"},'& > [role="option"]':{...e.typography.caption,lineHeight:"inherit",padding:e.spacing(.5,1,.5,2),"&:hover, &:focus":{backgroundColor:e.palette.action.hover},'&[aria-selected="true"]':{backgroundColor:e.palette.action.selected},cursor:"pointer",textOverflow:"ellipsis",position:"absolute",top:0,left:0,"&:hover .MuiIconButton-root, .MuiIconButton-root:focus":{opacity:1}},width:"100%",position:"relative"})),Me="tiny",Ue=(0,d.__)("Create variable","elementor"),je=(0,d.__)("Variables Manager","elementor"),Ne=({closePopover:e,onAdd:t,onEdit:a,onSettings:r})=>{const{icon:o,startIcon:s,variableType:m,propTypeUtil:h}=Y(),{value:v,setValue:g,path:y}=ke(),[E,f]=(0,l.useState)(""),{list:C,hasMatches:w,isSourceNotEmpty:_,hasNoCompatibleVariables:T}=((e,t)=>{const a=(o=t,(0,l.useMemo)(()=>te(o),[o])),n=(e=>{const{selectionFilter:t}=Y(),{propType:a}=(0,K.useBoundProp)();return t?t(e,a):e})(a),r=Z(n,e);var o;return{list:r.sort((e,t)=>(e.order??Number.MAX_SAFE_INTEGER)-(t.order??Number.MAX_SAFE_INTEGER)),hasMatches:r.length>0,isSourceNotEmpty:n.length>0,hasNoCompatibleVariables:a.length>0&&0===n.length}})(E,h.key),S=[];if(t&&S.push(l.createElement(u.Tooltip,{key:"add",placement:"top",title:Ue},l.createElement(u.IconButton,{id:"add-variable-button",size:Me,onClick:()=>{t?.(),p({varType:m,controlPath:y.join("."),action:"add"})},"aria-label":Ue},l.createElement(c.PlusIcon,{fontSize:Me})))),r){const e=()=>{r(),b({action:"openManager",varType:m,controlPath:y.join(".")})};S.push(l.createElement(u.Tooltip,{key:"settings",placement:"top",title:je},l.createElement(u.IconButton,{id:"variables-manager-button",size:Me,onClick:e,"aria-label":je},l.createElement(c.SettingsIcon,{fontSize:Me}))))}const k=s||(()=>l.createElement(o,{fontSize:Me})),I=C.map(({value:e,label:t,key:n})=>({type:"item",value:n,label:t,icon:l.createElement(k,{value:e}),secondaryText:e,onEdit:a?()=>a?.(n):void 0})),x=(0,d.sprintf)((0,d.__)("Create your first %s variable","elementor"),m);return l.createElement(n.PopoverBody,null,l.createElement(i.PopoverHeader,{title:(0,d.__)("Variables","elementor"),icon:l.createElement(c.ColorFilterIcon,{fontSize:Me}),onClose:e,actions:S}),_&&l.createElement(i.SearchField,{value:E,onSearch:e=>{f(e)},placeholder:(0,d.__)("Search","elementor")}),l.createElement(u.Divider,null),_&&w&&l.createElement(i.PopoverMenuList,{items:I,onSelect:t=>{g(t),p({varType:m,controlPath:y.join("."),action:"connect"}),e()},onClose:()=>{},selectedValue:v,"data-testid":`${m}-variables-list`,menuListTemplate:Fe,menuItemContentTemplate:e=>l.createElement(ze,{item:e})}),!w&&_&&l.createElement(q,{searchValue:E,onClear:()=>{f("")},icon:l.createElement(o,{fontSize:"large"})}),!_&&!T&&l.createElement($,{title:x,message:(0,d.__)("Variables are saved attributes that you can apply anywhere on your site.","elementor"),icon:l.createElement(o,{fontSize:"large"}),onAdd:t}),T&&l.createElement($,{title:(0,d.__)("No compatible variables","elementor"),message:(0,d.__)("Looks like none of your variables work with this control. Create a new variable to use it here.","elementor"),icon:l.createElement(o,{fontSize:"large"}),onAdd:t}))},We="list",He="edit",$e=({closePopover:e,propTypeKey:t,selectedVariable:a})=>{const[n,r]=(0,l.useState)(We),[o,i]=(0,l.useState)(""),{open:c}=fe(),u=(0,s.isExperimentActive)("e_variables_manager")?()=>{c()}:void 0;return l.createElement(J,{propTypeKey:t},l.createElement(Te,null,function(e){const t=H(),a={onClose:()=>{e.closePopover()},onGoBack:()=>{e.setCurrentView(We)}};t.canAdd()&&(a.onAdd=()=>{e.setCurrentView("add")}),t.canEdit()&&(a.onEdit=t=>{e.setEditId(t),e.setCurrentView(He)}),t.canManageSettings()&&e.onSettings&&(a.onSettings=()=>{e.closePopover(),e.onSettings?.()});return We===e.currentView?l.createElement(Ne,{closePopover:a.onClose,onAdd:a.onAdd,onEdit:a.onEdit,onSettings:a.onSettings}):"add"===e.currentView?l.createElement(Ve,{onGoBack:a.onGoBack,onClose:a.onClose}):He===e.currentView?l.createElement(Le,{editId:e.editId,onGoBack:a.onGoBack,onClose:a.onClose,onSubmit:()=>{e?.selectedVariable?.key===e.editId?a.onClose():a.onGoBack?.()}}):null}({propTypeKey:t,currentView:n,selectedVariable:a,editId:o,setEditId:i,setCurrentView:r,closePopover:e,onSettings:u})))};function Ge(){return Ge=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Ge.apply(null,arguments)}const qe="tiny",Ke=(0,d.__)("Unlink variable","elementor"),Xe=({startIcon:e,label:t,onUnlink:a,...n})=>{const r=[];return a&&r.push(l.createElement(u.Tooltip,{key:"unlink",title:Ke,placement:"bottom"},l.createElement(u.IconButton,{size:qe,onClick:a,"aria-label":Ke},l.createElement(c.DetachIcon,{fontSize:qe})))),l.createElement(u.Tooltip,{title:t,placement:"top"},l.createElement(u.UnstableTag,Ge({fullWidth:!0,showActionsOnHover:!0,startIcon:l.createElement(u.Stack,{gap:.5,direction:"row",alignItems:"center"},e),label:l.createElement(u.Box,{sx:{display:"inline-grid",minWidth:0}},l.createElement(u.Typography,{sx:{lineHeight:1.34},variant:"caption",noWrap:!0},t)),actions:r},n)))};function Je(){return Je=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},Je.apply(null,arguments)}const Ye=({variable:e,propTypeKey:t})=>{const{startIcon:a,propTypeUtil:n}=F(t),{setValue:r}=(0,K.useBoundProp)(),o=(0,l.useRef)(null),i=(0,l.useId)(),s=(0,u.usePopupState)({variant:"popover",popupId:`elementor-variables-list-${i}`}),d=we(e,t,r),m=a||(()=>null);return l.createElement(u.Box,{ref:o},l.createElement(Xe,Je({label:e.label,startIcon:l.createElement(l.Fragment,null,l.createElement(c.ColorFilterIcon,{fontSize:qe}),l.createElement(m,{value:e.value})),onUnlink:d},(0,u.bindTrigger)(s))),l.createElement(u.Popover,Je({disableScrollLock:!0,anchorEl:o.current,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},PaperProps:{sx:{my:1}}},(0,u.bindPopover)(s)),l.createElement($e,{selectedVariable:e,closePopover:s.close,propTypeKey:n.key})))},Ze=({variableId:e,onClose:t,onSubmit:a})=>{const{icon:r,valueField:o,variableType:s}=Y(),{setVariableValue:c}=ke(),{propType:m}=(0,K.useBoundProp)(),p=ee(e);if(!p)throw new Error(`Global ${s} variable not found`);const[b,y]=(0,l.useState)(""),[E,f]=(0,l.useState)(""),[C,w]=(0,l.useState)(p.label),[_,T]=(0,l.useState)(p.value),{labelFieldError:S,setLabelFieldError:k}=ue({value:p.label,message:h.DUPLICATED_LABEL}),I=_===p.value&&C===p.label||""===C.trim()||("string"==typeof _?""===_.trim():!1===Boolean(_))||!!b;return l.createElement(Te,null,l.createElement(n.PopoverBody,{height:"auto"},l.createElement(i.PopoverHeader,{icon:l.createElement(r,{fontSize:"tiny"}),title:(0,d.__)("Restore variable","elementor"),onClose:t}),l.createElement(u.Divider,null),l.createElement(K.PopoverContent,{p:2},l.createElement(Pe,{id:"variable-label",label:(0,d.__)("Name","elementor"),errorMsg:S?.message,noticeMsg:g(C)},l.createElement(de,{id:"variable-label",value:C,error:S,onChange:e=>{w(e),y("")},onErrorChange:e=>{k({value:C,message:e})}})),l.createElement(Pe,{errorMsg:E,label:(0,d.__)("Value","elementor")},l.createElement(u.Typography,{variant:"h5"},l.createElement(o,{value:_,onChange:e=>{T(e),y(""),f("")},onValidationChange:f,propType:m}))),b&&l.createElement(u.FormHelperText,{error:!0},b)),l.createElement(u.CardActions,{sx:{pt:.5,pb:1}},l.createElement(u.Button,{size:"small",variant:"contained",disabled:I,onClick:()=>{ne(e,C,_).then(()=>{c(e),a?.()}).catch(e=>{const t=v(e);if(t&&"label"===t.field)return w(""),void k({value:C,message:t.message});y(h.UNEXPECTED_ERROR)})}},(0,d.__)("Restore","elementor")))))},Qe=({onClose:e,onUnlink:t,onRestore:a,label:n})=>l.createElement(u.ClickAwayListener,{onClickAway:e},l.createElement(u.Alert,{variant:"standard",severity:"warning",onClose:e,action:l.createElement(l.Fragment,null,t&&l.createElement(u.AlertAction,{variant:"contained",onClick:t},(0,d.__)("Unlink","elementor")),a&&l.createElement(u.AlertAction,{variant:"outlined",onClick:a},(0,d.__)("Restore","elementor"))),sx:{maxWidth:300}},l.createElement(u.AlertTitle,null,(0,d.__)("Deleted variable","elementor")),l.createElement(u.Typography,{variant:"body2",color:"textPrimary"},(0,d.__)("The variable","elementor")," '",l.createElement(u.Typography,{variant:"body2",component:"span",sx:{lineBreak:"anywhere"}},n),"' ",(0,d.__)("has been deleted, but it is still referenced in this location. You may restore the variable or unlink it to assign a different value.","elementor"))));function et(){return et=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},et.apply(null,arguments)}const tt=l.forwardRef(({label:e,suffix:t,onClick:a,icon:n,...r},o)=>{const i=t?`${e} (${t})`:e;return l.createElement(u.Chip,et({ref:o,size:"tiny",color:"warning",shape:"rounded",variant:"standard",onClick:a,icon:l.createElement(c.AlertTriangleFilledIcon,null),label:l.createElement(u.Tooltip,{title:i,placement:"top"},l.createElement(u.Box,{sx:{display:"inline-grid",minWidth:0}},l.createElement(u.Typography,{variant:"caption",noWrap:!0,sx:{lineHeight:1.34}},i))),sx:{height:e=>e.spacing(3.5),borderRadius:e=>e.spacing(1),justifyContent:"flex-start",width:"100%"}},r))});function at(){return at=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},at.apply(null,arguments)}tt.displayName="WarningVariableTag";const nt=({variable:e,propTypeKey:t})=>{const{propTypeUtil:a}=F(t),n=(0,K.useBoundProp)(),r=H(),[o,i]=(0,l.useState)(!1),s=()=>i(!1),c=(0,l.useRef)(null),m=(0,l.useId)(),p=(0,u.usePopupState)({variant:"popover",popupId:`elementor-variables-restore-${m}`}),b={};return r.canUnlink()&&(b.onUnlink=we(e,t,n.setValue)),r.canRestore()&&(b.onRestore=()=>{e.key&&ne(e.key).then(e=>{Ie(a.create(e),n),s()}).catch(()=>{s(),p.setAnchorEl(c.current),p.open()})}),l.createElement(l.Fragment,null,l.createElement(u.Box,{ref:c},o&&l.createElement(u.Backdrop,{open:!0,onClick:s,invisible:!0}),l.createElement(u.Infotip,{color:"warning",placement:"right-start",open:o,disableHoverListener:!0,onClose:s,content:l.createElement(Qe,{onClose:s,onUnlink:b.onUnlink,onRestore:b.onRestore,label:e.label}),slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[0,24]}}]}}},l.createElement(tt,{label:e.label,onClick:()=>i(e=>!e),suffix:(0,d.__)("deleted","elementor")})),l.createElement(u.Popover,at({disableScrollLock:!0,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},PaperProps:{sx:{my:1}}},(0,u.bindPopover)(p)),l.createElement(J,{propTypeKey:t},l.createElement(Ze,{variableId:e.key??"",onClose:p.close,onSubmit:()=>{p.close()}})))))},rt={title:(0,d.__)("Variable has changed","elementor"),message:(0,d.__)("This variable is no longer compatible with this property. You can clear it or select a different one.","elementor"),buttons:{clear:(0,d.__)("Clear","elementor"),select:(0,d.__)("Select variable","elementor")}},ot=({onClose:e,onClear:t,triggerSelect:a})=>l.createElement(u.ClickAwayListener,{onClickAway:e},l.createElement(u.Alert,{variant:"standard",severity:"warning",onClose:e,action:l.createElement(l.Fragment,null,t&&l.createElement(u.AlertAction,{variant:"contained",onClick:t},rt.buttons.clear),a&&l.createElement(u.AlertAction,{variant:"outlined",onClick:a},rt.buttons.select)),sx:{maxWidth:300}},l.createElement(u.AlertTitle,null,rt.title),l.createElement(u.Typography,{variant:"body2",color:"textPrimary"},rt.message)));function lt(){return lt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},lt.apply(null,arguments)}const it=({variable:e})=>{const{setValue:t,value:a}=(0,K.useBoundProp)(),n=(0,l.useRef)(null),r=(0,l.useId)(),o=(0,u.usePopupState)({variant:"popover",popupId:`elementor-variables-list-${r}`}),[i,s]=(0,l.useState)(!1),c=()=>s(!1),m=!!a;return l.createElement(u.Box,{ref:n},i&&l.createElement(u.Backdrop,{open:!0,onClick:c,invisible:!0}),l.createElement(u.Infotip,{color:"warning",placement:"right-start",open:i,disableHoverListener:!0,onClose:c,content:l.createElement(ot,{onClose:c,onClear:m?()=>{c(),t(null)}:void 0,triggerSelect:()=>{c(),o.setAnchorEl(n.current),o.open()}}),slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[0,24]}}]}}},l.createElement(tt,{label:e.label,onClick:()=>s(e=>!e),suffix:(0,d.__)("changed","elementor")})),l.createElement(u.Popover,lt({disableScrollLock:!0,anchorEl:n.current,anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"},PaperProps:{sx:{my:1}}},(0,u.bindPopover)(o)),l.createElement($e,{selectedVariable:e,closePopover:o.close,propTypeKey:e.type})))},st=({onClose:e,onClear:t})=>l.createElement(u.ClickAwayListener,{onClickAway:e},l.createElement(u.Alert,{variant:"standard",severity:"warning",onClose:e,action:l.createElement(l.Fragment,null,t&&l.createElement(u.AlertAction,{variant:"contained",onClick:t},(0,d.__)("Clear","elementor"))),sx:{maxWidth:300}},l.createElement(u.AlertTitle,null,(0,d.__)("This variable is missing","elementor")),l.createElement(u.Typography,{variant:"body2",color:"textPrimary"},(0,d.__)("It may have been deleted. Try clearing this field and select a different value or variable.","elementor")))),ct=()=>{const{setValue:e}=(0,K.useBoundProp)(),[t,a]=(0,l.useState)(!1),n=()=>a(!1);return l.createElement(l.Fragment,null,t&&l.createElement(u.Backdrop,{open:!0,onClick:n,invisible:!0}),l.createElement(u.Infotip,{color:"warning",placement:"right-start",open:t,disableHoverListener:!0,onClose:n,content:l.createElement(st,{onClose:n,onClear:()=>e(null)}),slotProps:{popper:{modifiers:[{name:"offset",options:{offset:[0,24]}}]}}},l.createElement(tt,{label:(0,d.__)("Missing variable","elementor"),onClick:()=>a(e=>!e)})))},ut=()=>{const e=(0,K.useBoundProp)(),t=e.value??e.placeholder,a=ee(t?.value);if(!a)return l.createElement(ct,null);const{$$type:n}=t;if(a?.deleted)return l.createElement(nt,{variable:a,propTypeKey:n});const{isCompatible:r}=F(a.type);return r&&!r(e?.propType,a)?l.createElement(it,{variable:a}):l.createElement(Ye,{variable:a,propTypeKey:n})},dt=()=>{const{propType:e,path:t}=(0,n.useBoundProp)(),a=mt(e);return{visible:Boolean(a),icon:c.ColorFilterIcon,title:(0,d.__)("Variables","elementor"),content:({close:e})=>a?(pt(t,a.variableType),l.createElement($e,{closePopover:e,propTypeKey:a.propTypeUtil.key})):null}},mt=e=>{if("union"===e.kind)for(const t of Object.keys(e.prop_types)){const e=F(t);if(e)return e}},pt=(e,t)=>{p({varType:t,controlPath:e.join("."),action:"open"})};var bt=window.elementorV2.editorMcp;const ht={type:C.z.string().describe('The type of the variable. Example values: "global-color-variable" or "global-font-variable".'),label:C.z.string().describe("The label of the variable, displayed to the user"),value:C.z.string().describe("The value of the variable, should correspond to the type")},vt={status:C.z.enum(["ok","error"]).describe("The status of the operation"),message:C.z.string().optional().describe("Optional message providing additional information about the operation")},gt=()=>{(0,bt.getMCPByDomain)("variables").addTool({name:"create-global-variable",schema:ht,outputSchema:vt,description:'Create a new global variable\n## When to use this tool:\n- When a user requests to create a new global variable in the Elementor editor.\n- When you need to add a new variable to be used in the editor.\n\n## Prequisites:\n- Ensure you have the most up-to-date list of existing global variables to avoid label duplication. You can use the "list-global-variables" tool to fetch the current variables.\n- Make sure when creating a new variable, the label is unique and not already in use.\n- If the user does not provide a label, ask them to provide one before proceeding.\n- If the user does not provide a type, ask them to provide one before proceeding.\n- If the user does not provide a value, ask them to provide one before proceeding.\n\n## Required parameters:\n- type: The type of the variable. Possible values are \'global-color-variable\' or \'global-font-variable\'.\n- label: The label of the variable, displayed to the user. Must be unique and not already in use.\n- value: The value of the variable. For color variables, this should be a valid CSS color (e.g., \'rgb(255,0,0)\', \'#ff0000\', \'red\'). For font variables, this should be a valid font family (e.g., \'Arial\', \'serif\').\n\n## Example tool call (JSON format):\n```json\n{ "type": "global-color-variable", "label": "My Cool Color", "value": "rgb(1,2,3)" }\n```\n\n## Example tool response (JSON format):\n```json\n{ "status": "ok" }\n```\n\n## Example to a failed tool response, which must be displayed to the end user. If the error message is not plain, attempt to find the most useful part of the message and display it.\n{ "status": "error", "message": "Unsupported type \'global-kuku-variable\'" }\n\nIn that case, inform the user the type is unsupported and they should try another type, perhaps consult to online documentation.\n',handler:async e=>{const{type:t,label:a,value:n}=e;try{await O.create({type:t,label:a,value:n})}catch(e){return{status:"error",message:`There was an error creating the variable: ${e.message||"Unknown server error"}`}}return{status:"ok"}}})},yt=()=>{(0,bt.getMCPByDomain)("variables").addTool({name:"delete-global-variable",schema:{id:C.z.string().describe("The unique identifier of the variable to be deleted.")},outputSchema:{status:C.z.enum(["ok","error"]).describe("The status of the operation")},description:'Delete an existing global variable\n \n## When to use this tool:\n- When a user requests to delete an existing global variable in the Elementor editor.\n- When you need to remove a variable that is no longer needed or relevant, with the user\'s confirmation.\n\n## Prerequisites:\n- Ensure you have the most up-to-date list of existing global variables. You can use the "list-global-variables" tool to fetch the current variables.\n- Reference the variable by the "id" property, given from the "list-global-variables" tool.\n- Make sure you have the unique identifier of the variable to be deleted before using this tool.\n- Confirm with the user that they want to proceed with the deletion, as this action is irreversible.\n\n<notice>\nA use might reference a variable by it\'s label, but you must always use the unique identifier (id) to delete it.\nIf you only have the label, use the "list-global-variables" tool to find the corresponding id.\n</notice>\n\n<important>\nThis operation is destructive and cannot be undone. Ensure that the user is fully aware of the consequences before proceeding.\nWhen a variable is deleted, all references to it in all pages accross the website will lose their effect.\n</important>',handler:async e=>{const{id:t}=e;try{return await O.delete(t),{status:"ok"}}catch(e){return{status:"error"}}},isDestrcutive:!0})},Et={type:C.z.string().describe("The type of the variable."),label:C.z.string().describe("The label of the variable, displayed to the user"),value:C.z.string().describe("The value of the variable."),id:C.z.string().describe("The unique identifier of the variable. Used for internal reference, not to be exposed to end users")},ft={variables:C.z.array(C.z.object(Et)).describe("List of variables")},Ct=()=>{(0,bt.getMCPByDomain)("variables").addTool({name:"list-global-variables",description:"List editor global variables\n \n ## When to use this tool:\n - When a user requests to see all available global variables in the Elementor editor.\n - When you need to be exact on a variable label, to avoid any mistakes.\n - When you want to see the most up-to-date list of global variables.\n - Before using any other variables related tools that makes changes, such as deletion, creation, or updates. This ensures you have the latest information and there is no naming collision or mismatching.\n \n ## Example tool response (JSON format):\n ```json\n { variables: [\n { type: 'global-color-variable', label: 'Cool', value: 'rgb(1,2,3)', id: 'some-unique-id' },\n { type: 'global-font-variable', label: 'Headline', value: 'serif', id: 'some-other-unique-id' },\n ] }\n ```\n \n Once you get the response, please display the variables in a user-friendly way, unless explicitly requested otherwise.\n Unless explicitly requested otherwise, response in HTML Format, prefer to use tables or unordered lists.\n \n Note: **The label is most improtant to be seen as-is without any changes.**\n \n <important>\n **Do not omit the label**. This is important for the user to identify the variable.\n **Do not change the label**, it must be displayed exactly as it is, in it's original characters as received from this tool.\n </important>\n ",outputSchema:ft,handler:async()=>{const e=O.variables();return{variables:Object.entries(e).map(([e,t])=>({id:e,...t}))}}})},wt=()=>{(0,bt.getMCPByDomain)("variables").addTool({schema:{id:C.z.string().describe("The unique identifier of the variable to be updated or renamed."),label:C.z.string().describe("The label of the variable to be stored after the change. If the user only wishes to update the value, this must be strictly equal to the current label."),value:C.z.string().describe("The new value for the variable. For color variables, this should be a valid CSS color (e.g., 'rgb(255,0,0)', '#ff0000', 'red'). For font variables, this should be a valid font family (e.g., 'Arial', 'serif'). If the user wishes to rename only, make sure you provide the existing value.")},outputSchema:{status:C.z.enum(["ok","error"]).describe("The status of the operation"),message:C.z.string().optional().describe("Optional message providing additional information about the operation")},name:"update-global-variable",description:'Update an existing global variable\n\n## When to use this tool:\n- When a user requests to update an existing global variable in the Elementor editor.\n- When you need to modify the value of an existing variable.\n- When you want to rename an existing variable (change its label).\n- When you want to both rename and modify the value of an existing variable.\n\n## Prerequisites:\n- Ensure you have the most up-to-date list of existing global variables to avoid label duplication. You can use the "list-global-variables" tool to fetch the current variables.\n- Make sure when updating a variable, the new label is unique and not already in use by another variable.\n- Make sure you understand whether you are updating a value, renaming, or both.\n- Reference the variable by the "id" property, given from the "list-global-variables" tool.\n- If the user wishes to rename, make sure you have the existing value.\n- If the user wishes to update the value, make sure you have to **correct label**.\n- You must have the unique identifier, the current label, the current value, and the new value or label or both, before using this tool.\n\n## Required parameters:\n- id: The unique identifier of the variable to be updated or renamed.\n- label: The label of the variable to be stored after the change. If the user only wishes to update the value, this must be strictly equal to the current label.\n- value: The new value for the variable. For color variables, this should be a valid CSS color (e.g., \'rgb(255,0,0)\', \'#ff0000\', \'red\'). For font variables, this should be a valid font family (e.g., \'Arial\', \'serif\'). If the user wishes to rename only, make sure you provide the existing value.\n\n## Example tool call (JSON format):\n```json\n{ "id": "some-unique-id", "label": "Cool", "value": "rgb(0,140,250)" }\n```\n\n## Example responses (JSON format):\nSuccessful update:\n```json\n{ "status": "ok" }\n```\n\nFailed update, which must be displayed to the end user. If the error message is not plain, attempt to find the most useful part of the message and display it.\n```json\n{ "status": "error", "message": "Label \'Cool\' is already in use by another variable." }\n```\n',handler:async e=>{const{id:t,label:a,value:n}=e;try{return await O.update(t,{label:a,value:n}),{status:"ok"}}catch(e){return{status:"error",message:`There was an error creating the variable: ${e.message||"Unknown server error"}`}}}})},_t="elementor://variables",Tt=()=>{const{mcpServer:e}=(0,bt.getMCPByDomain)("variables");e.resource("global-variables",_t,{description:"Global variables list. Variables are being used in this way: If it is directly in the schema, you need to put the ID which is the key inside the object."},async()=>({contents:[{uri:_t,text:localStorage["elementor-global-variables"]}]})),window.addEventListener("variables:updated",()=>{e.server.sendResourceUpdated({uri:_t,contents:[{uri:_t,text:localStorage["elementor-global-variables"]}]})})},St=({value:e,onChange:t,onValidationChange:a})=>{const[n,r]=(0,l.useState)(e),[o,i]=(0,l.useState)(""),s=(0,l.useRef)(null),c=Se()??s.current;return l.createElement(u.UnstableColorField,{id:"color-variable-field",size:"tiny",fullWidth:!0,value:n,onChange:e=>{r(e);const n=y(e);i(n),a?.(n),t(n?"":e)},error:o||void 0,slotProps:{colorPicker:{anchorEl:c,anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:-10},slotProps:{colorIndicator:{size:"inherit",sx:{borderRadius:.5}}}}}})};function kt(){return kt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)({}).hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},kt.apply(null,arguments)}const It=({value:e,onChange:t,onValidationChange:a})=>{const[r,o]=(0,l.useState)(e),i=(0,l.useRef)(null),s=Se()??i.current,m=(0,u.usePopupState)({variant:"popover"}),p=(0,n.useFontFamilies)(),b=(0,n.useSectionWidth)(),h=l.useMemo(()=>p.map(({label:e,fonts:t})=>({label:e,items:t})),[p]),v=(0,l.useId)();return l.createElement(l.Fragment,null,l.createElement(u.UnstableTag,kt({id:v,variant:"outlined",label:r,endIcon:l.createElement(c.ChevronDownIcon,{fontSize:"tiny"})},(0,u.bindTrigger)(m),{fullWidth:!0})),l.createElement(u.Popover,kt({disablePortal:!0,disableScrollLock:!0,anchorEl:s,anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:-28}},(0,u.bindPopover)(m)),l.createElement(K.ItemSelector,{id:"font-family-variables-selector",itemsList:h,selectedItem:r,onItemChange:e=>{(e=>{o(e);const n=y(e);a?.(n),t(n?"":e)})(e),m.close()},onClose:m.close,sectionWidth:b,title:(0,d.__)("Font family","elementor"),itemStyle:e=>({fontFamily:e.value}),onDebounce:K.enqueueFont,icon:c.TextIcon})))};function xt(){z({valueField:St,icon:c.BrushIcon,propTypeUtil:w,fallbackPropTypeUtil:o.colorPropTypeUtil,variableType:"color",startIcon:({value:e})=>l.createElement(f,{size:"inherit",component:"span",value:e}),defaultValue:"#ffffff"}),z({valueField:It,icon:c.TextIcon,propTypeUtil:P,fallbackPropTypeUtil:o.stringPropTypeUtil,variableType:"font",defaultValue:"Roboto"})}const Pt="body";function At(){const e=(0,s.__privateUseListenTo)((0,s.commandEndEvent)("editor/documents/attach-preview"),()=>function(){const e=window;return e.elementor?.$preview?.[0]?.contentDocument}()?.head),t=function(){const[e,t]=(0,l.useState)({});return(0,l.useEffect)(()=>{const e=A.subscribe(t);return()=>{e()}},[]),e}(),a=Object.keys(t).length>0;if(!e||!a)return null;const n=(r=t,Object.entries(r).map(([e,t])=>function(e,t){return`--${t?.deleted?e:t.label}:${t.value};`}(e,t)).join(""));var r;const o=`${Pt}{${n}}`;return l.createElement(u.Portal,{container:e},l.createElement("style",{"data-e-style-id":"e-variables",key:o},o))}const Vt=e=>{const t=e?.value?.color?.value;return ee(t||"")},Ot=({value:e})=>{const t=Vt(e);return l.createElement(f,{component:"span",size:"inherit",value:t?.value})},Bt=({value:e})=>{const t=Vt(e);return l.createElement("span",null,t?.label)},Dt=({value:e})=>{const t=Vt(e);return l.createElement(f,{component:"span",size:"inherit",value:t?.value})},Lt=e=>!!w.isValid(e),{registerPopoverAction:Rt}=n.controlActionsMenu;function zt(){xt(),(0,K.injectIntoRepeaterItemIcon)({id:"color-variables-background-icon",component:Ot,condition:({value:e})=>Lt(o.backgroundColorOverlayPropTypeUtil.extract(e)?.color)}),(0,K.injectIntoRepeaterItemIcon)({id:"color-variables-icon",component:Dt,condition:({value:e})=>Lt(o.shadowPropTypeUtil.extract(e)?.color)}),(0,K.injectIntoRepeaterItemLabel)({id:"color-variables-label",component:Bt,condition:({value:e})=>Lt(o.backgroundColorOverlayPropTypeUtil.extract(e)?.color)}),(0,n.registerControlReplacement)({component:ut,condition:({value:e,placeholder:t})=>Ft(e)||Ft(t)}),Rt({id:"variables",useProps:dt}),O.init().then(()=>{!function(){const{setMCPDescription:e}=(0,bt.getMCPByDomain)("variables");e("Elementor Editor Variables MCP"),Ct(),gt(),wt(),yt(),Tt()}()}),(0,a.injectIntoTop)({id:"canvas-style-variables-render",component:At}),(0,r.__registerPanel)(Ee)}function Ft(e){return!!(0,o.isTransformable)(e)&&U(e.$$type)}(window.elementorV2=window.elementorV2||{}).editorVariables=t}(),window.elementorV2.editorVariables?.init?.();