/
var
/
www
/
html
/
wordpress
/
wp-content
/
plugins
/
elementor
/
assets
/
js
/
packages
/
editor-global-classes
/
Upload File
HOME
!function(){"use strict";var e={d:function(t,n){for(var a in n)e.o(n,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:n[a]})},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,{GLOBAL_CLASSES_URI:function(){return J},init:function(){return sn}});var n=window.elementorV2.editorStyles,a=window.elementorV2.editorStylesRepository,s=window.elementorV2.store,r=window.wp.i18n,l=window.elementorV2.editorV1Adapters;const o="elementor_global_classes_update_class";var i=window.elementorV2.utils;const c=(0,i.createError)({code:"global_class_not_found",message:"Global class not found."}),d=(0,i.createError)({code:"global_class_label_already_exists",message:"Class with this name already exists."}),u=(0,i.createError)({code:"global_class_tracking_error",message:"Error tracking global classes event."});function m({value:e,next:t,prev:n}){return{value:e,prev:n||null,next:t||null}}class p{static registry={};static get(e){return p.registry[e]||(p.registry[e]=new p(e)),p.registry[e]}first=null;current=null;constructor(e){this.namespace=e}transform(e){return JSON.parse(JSON.stringify(e))}reset(){this.first=this.current=null}prev(){return this.current&&this.current!==this.first?(this.current=this.current.prev,this.current?.value||null):null}isLast(){return!this.current||!this.current.next}next(e){if(e){if(!this.current)return this.first=m({value:this.transform(e)}),this.current=this.first,this.current.value;const t=m({value:this.transform(e),prev:this.current});return this.current.next=t,this.current=t,this.current.value}return this.current&&this.current.next?(this.current=this.current.next,this.current.value):null}}const g=p.get("global-classes"),h="globalClasses",y=(0,s.__createSlice)({name:h,initialState:{data:{items:{},order:[]},initialData:{frontend:{items:{},order:[]},preview:{items:{},order:[]}},isDirty:!1},reducers:{load(e,{payload:{frontend:t,preview:n}}){e.initialData.frontend=t,e.initialData.preview=n,e.data=n,e.isDirty=!1},add(e,{payload:t}){g.next(e.data),e.data.items[t.id]=t,e.data.order.unshift(t.id),e.isDirty=!0},delete(e,{payload:t}){g.next(e.data),e.data.items=Object.fromEntries(Object.entries(e.data.items).filter(([e])=>e!==t)),e.data.order=e.data.order.filter(e=>e!==t),e.isDirty=!0},setOrder(e,{payload:t}){g.next(e.data),e.data.order=t,e.isDirty=!0},update(e,{payload:t}){g.next(e.data);const n={...e.data.items[t.style.id],...t.style};e.data.items[t.style.id]=n,e.isDirty=!0},updateMultiple(e,{payload:t}){g.next(e.data),Object.entries(t).forEach(([t,{modified:n}])=>{e.data.items[t].label=n}),e.isDirty=!1},updateProps(e,{payload:t}){const a=e.data.items[t.id];if(!a)throw new c({context:{styleId:t.id}});g.next(e.data);const s=(0,n.getVariantByMeta)(a,t.meta);let r=("custom_css"in t?t.custom_css:s?.custom_css)??null;if(r=r?.raw?r:null,s){const e=JSON.parse(JSON.stringify(s.props)),n=JSON.parse(JSON.stringify(t.props));s.props=f(e,n),s.custom_css=r,a.variants=b(a)}else a.variants.push({meta:t.meta,props:t.props,custom_css:r});e.isDirty=!0},reset(e,{payload:{context:t}}){"frontend"===t&&(g.reset(),e.initialData.frontend=e.data,e.isDirty=!1),e.initialData.preview=e.data},undo(e){g.isLast()&&g.next(e.data);const t=g.prev();t?(e.data=t,e.isDirty=!0):e.data=e.initialData.preview},resetToInitialState(e,{payload:{context:t}}){g.reset(),e.data=e.initialData[t],e.isDirty=!1},redo(e){const t=g.next();g.isLast()&&g.prev(),t&&(e.data=t,e.isDirty=!0)}}}),f=(e,t)=>{const n=Array.isArray(e)?{}:e;return Object.entries(t).forEach(([e,t])=>{null==t?delete n[e]:n[e]=t}),n},b=e=>e.variants.filter(({props:e,custom_css:t})=>Object.keys(e).length||t?.raw),v=e=>e[h].data,E=e=>e[h].initialData.frontend,_=e=>e[h].initialData.preview,w=(0,s.__createSelector)(v,({order:e})=>e),x=(0,s.__createSelector)(v,({items:e})=>e),C=e=>e[h].isDirty,S=(0,s.__createSelector)(x,w,(e,t)=>t.map(t=>e[t])),I=(e,t)=>e[h].data.items[t]??null,T=(0,s.__createSelector)(v,({items:e})=>Object.values(e).filter(e=>0===e.variants.length));var D=window.elementorV2.events,k=window.elementorV2.httpClient;const P="/global-classes",O="elementor/v1",z=`${P}/usage`,A={usage:()=>(0,k.httpService)().get(`${O}${z}`),all:(e="preview")=>(0,k.httpService)().get(`${O}${P}`,{params:{context:e}}),publish:e=>(0,k.httpService)().put("elementor/v1"+P,e,{params:{context:"frontend"}}),saveDraft:e=>(0,k.httpService)().put("elementor/v1"+P,e,{params:{context:"preview"}})},M={DUPLICATED_LABEL:"DUPLICATED_LABEL"},L=async()=>{const e=await A.usage();return t=e?.data?.data||{},Object.entries(t).reduce((e,[t,n])=>(e[t]={content:n||[],total:n.reduce((e,t)=>e+(t?.total||0),0)},e),{});var t},V=async e=>{const{runAction:t}=e,n=await B(e);n&&(F(n),"classCreated"===n.event&&"classId"in n&&j(n.classId)),t?.()},j=async e=>{const t=await G(e);F({event:"classApplied",classId:e,...t,totalInstancesAfterApply:1})},B=async e=>{switch(e.event){case"classApplied":if("classId"in e&&e.classId){const t=await G(e.classId);return{...e,...t}}break;case"classRemoved":if("classId"in e&&e.classId){const t=q(e.classId);return{...e,...t}}break;case"classDeleted":if("classId"in e&&e.classId){const t=await U(e.classId);return{...e,...t}}break;case"classCreated":return"source"in e&&"created"!==e.source&&"classId"in e&&e.classId?{...e,classTitle:W(e.classId).label}:e;case"classStateClicked":if("classId"in e&&e.classId)return{...e,classTitle:W(e.classId).label};break;case"classSyncToV3PopupShown":return{...e,interaction_type:"popup_shown",target_type:"popup",target_name:"sync_to_v3_popup",interaction_result:"popup_viewed",target_location:"widget_panel",location_l1:"class_manager"};case"classSyncToV3":{const t=W(e.classId).label,n="sync"===e.action;return{...e,interaction_type:"click",target_type:t,target_name:n?"sync_to_v3":"unsync_to_v3",interaction_result:n?"class_is_synced_to_V3":"class_is_unsynced_from_V3",target_location:"widget_panel",location_l1:"class_manager",interaction_description:n?`user_synced_${t}_to_v3`:`user_unsync_${t}_from_v3`}}case"classSyncToV3PopupClick":{const t="sync"===e.action;return{...e,interaction_type:"click",target_type:"button",target_name:t?"sync_to_v3":"cancel",interaction_result:t?"class_is_synced":"cancel",target_location:"sync_to_v3_popup"}}default:return e}},F=e=>{const{dispatchEvent:t,config:n}=(0,D.getMixpanel)();if(!n?.names?.global_classes?.[e.event])return void console.error("Global class tracking event not found",{event:e.event});const a=n.names.global_classes[e.event],{event:s,...r}=e;try{t?.(a,{event:s,...r})}catch(e){throw new u({cause:e})}},R=e=>({classTitle:W(e).label}),W=e=>{const t=I((0,s.__getState)(),e);if(!t)throw new Error(`CSS class with ID ${e} not found`);return t},U=async e=>({totalInstances:await $(e),classTitle:W(e).label}),$=async e=>{const t=await L();return t[e]?.total??1},G=async e=>{const{classTitle:t}=R(e);return{classTitle:t,totalInstancesAfterApply:await $(e)+1}},q=e=>{const{classTitle:t}=R(e);return{classTitle:t}},N="global-classes",H=(0,a.createStylesProvider)({key:N,priority:30,limit:100,labels:{singular:(0,r.__)("class","elementor"),plural:(0,r.__)("classes","elementor")},subscribe:e=>Y(e),capabilities:(()=>{if((0,l.isExperimentActive)("global_classes_should_enforce_capabilities"))return{update:o,create:o,delete:o,updateProps:o}})(),actions:{all:()=>S((0,s.__getState)()),get:e=>I((0,s.__getState)(),e),resolveCssName:e=>I((0,s.__getState)(),e)?.label??e,create:(e,t=[])=>{const a=x((0,s.__getState)());if(Object.values(a).map(e=>e.label).includes(e))throw new d({context:{label:e}});const r=Object.keys(a),l=(0,n.generateId)("g-",r);return(0,s.__dispatch)(y.actions.add({id:l,type:"class",label:e,variants:t})),l},update:e=>{(0,s.__dispatch)(y.actions.update({style:e}))},delete:e=>{(0,s.__dispatch)(y.actions.delete(e))},updateProps:e=>{(0,s.__dispatch)(y.actions.updateProps({id:e.id,meta:e.meta,props:e.props}))},updateCustomCss:e=>{(0,s.__dispatch)(y.actions.updateProps({id:e.id,meta:e.meta,custom_css:e.custom_css,props:{}}))},tracking:e=>{V(e).catch(e=>{throw new u({cause:e})})}}}),Y=e=>{let t=v((0,s.__getState)());return(0,s.__subscribeWithSelector)(e=>e.globalClasses,n=>{e(t.items,n.data.items),t=n.data})},J="elementor://global-classes",K="elementor-global-classes",Q=()=>{const e=H.actions.all();localStorage.setItem(K,JSON.stringify(e))};var X=window.elementorV2.editor,Z=window.elementorV2.editorEditingPanel,ee=window.elementorV2.editorMcp,te=window.elementorV2.editorPanels,ne=window.React,ae=window.elementorV2.editorDocuments,se=window.elementorV2.editorUi,re=window.elementorV2.ui,le=window.elementorV2.query;const oe="css-classes-usage";function ie(){const e=(0,le.useQueryClient)();return{prefetchClassesUsage:()=>e.prefetchQuery({queryKey:[oe],queryFn:L})}}const ce=()=>{const{prefetchClassesUsage:e}=ie();return e(),null};var de=window.elementorV2.editorCurrentUser,ue=window.elementorV2.icons;const me=()=>(0,s.__useSelector)(w),pe=()=>(0,s.__useSelector)(C),ge=(0,ne.createContext)(void 0),he={empty:!1,onThisPage:!1,unused:!1},ye=({children:e})=>{const[t,n]=ne.useState(he),{debouncedValue:a,inputValue:s,handleChange:r}=(0,i.useDebounceState)({delay:300,initialValue:(()=>{const e=localStorage.getItem("elementor-global-classes-search");return e?(localStorage.removeItem("elementor-global-classes-search"),e):""})()});return ne.createElement(ge.Provider,{value:{search:{debouncedValue:a,inputValue:s,handleChange:r,onClearSearch:()=>{r("")}},filters:{filters:t,setFilters:n,onClearFilter:()=>{n(he)}}}},e)},fe=()=>{const e=(0,ne.useContext)(ge);if(!e)throw new Error("useSearchContext must be used within a SearchContextProvider");return e},be=()=>(0,le.useQuery)({queryKey:[oe],queryFn:L,refetchOnMount:!1,refetchOnWindowFocus:!0}),ve={empty:[],onThisPage:[],unused:[]},Ee=()=>{const e=(0,ae.__useActiveDocument)(),t=(0,s.__useSelector)(T),{data:n,isLoading:a}=be(),r=(()=>{const e=(0,s.__useSelector)(x);return Object.keys(e)})(),l=(0,ne.useMemo)(()=>t.map(({id:e})=>e),[t]),o=(0,ne.useMemo)(()=>n&&e?((e,t)=>{const n=[];for(const a in e)e[a].content.forEach(e=>{+e.pageId===t&&n.push(a)});return n})(n,e.id):[],[n,e]),i=(0,ne.useMemo)(()=>n?((e,t)=>{const n=new Set(e);return t.filter(e=>!n.has(e))})(Object.keys(n),r):[],[n,r]);return!a&&n&&e?{onThisPage:o,unused:i,empty:l}:ve},_e=()=>{const{filters:{filters:e}}=fe(),t=Ee();return(0,ne.useMemo)(()=>{const n=Object.entries(e).filter(([,e])=>e);return 0===n.length?null:n.reduce((e,[n],a)=>{const s=t[n]||[];return 0===a?s:e.filter(e=>s.includes(e))},[])},[e,t])},we="DUP_",xe=({modifiedLabels:e,onApprove:t})=>ne.createElement(ne.Fragment,null,ne.createElement(re.DialogHeader,{logo:!1},ne.createElement(re.Box,{display:"flex",alignItems:"center",gap:1},ne.createElement(re.Icon,{color:"secondary"},ne.createElement(ue.InfoCircleFilledIcon,{fontSize:"medium"})),ne.createElement(re.Typography,{variant:"subtitle1"},(0,r.__)("We've published your page and updated class names.","elementor")))),ne.createElement(re.DialogContent,null,ne.createElement(re.Stack,{spacing:2,direction:"column"},ne.createElement(re.Typography,{variant:"body2"},(0,r.__)("Some new classes used the same names as existing ones. To prevent conflicts, we added the prefix","elementor"),ne.createElement("strong",null," ",we)),ne.createElement(re.Box,null,ne.createElement(re.Box,{sx:{width:"100%",display:"flex",gap:2,alignItems:"flex-start"}},ne.createElement(re.Typography,{variant:"subtitle2",sx:{fontWeight:"bold",flex:1,flexShrink:1,flexGrow:1,minWidth:0}},(0,r.__)("Before","elementor")),ne.createElement(re.Typography,{variant:"subtitle2",sx:{minWidth:"200px",fontWeight:"bold",flexShrink:0,flexGrow:0,width:"200px",maxWidth:"200px"}},(0,r.__)("After","elementor"))),ne.createElement(re.Divider,{sx:{mt:.5,mb:.5}}),ne.createElement(re.Stack,{direction:"column",gap:.5,sx:{pb:2}},Object.values(e).map(({original:e,modified:t},n)=>ne.createElement(re.Box,{key:n,sx:{width:"100%",display:"flex",gap:2,alignItems:"flex-start"}},ne.createElement(re.Box,{sx:{flex:1,flexShrink:1,flexGrow:1,minWidth:0}},ne.createElement(se.EllipsisWithTooltip,{title:e},ne.createElement(re.Typography,{variant:"body2",sx:{color:"text.secondary"}},e))),ne.createElement(re.Box,{sx:{minWidth:"200px",flexShrink:0,flexGrow:0,width:"200px",maxWidth:"200px"}},ne.createElement(se.EllipsisWithTooltip,{title:t},ne.createElement(re.Typography,{variant:"body2",sx:{color:"text.primary"}},t)))))),ne.createElement(re.Box,null,ne.createElement(re.Alert,{severity:"info",size:"small",color:"secondary"},ne.createElement("strong",null,(0,r.__)("Your designs and classes are safe.","elementor")),(0,r.__)("Only the prefixes were added. Find them in Class Manager by searching","elementor"),ne.createElement("strong",null,we)))))),ne.createElement(re.DialogActions,null,ne.createElement(re.Button,{color:"secondary",variant:"text",onClick:()=>{localStorage.setItem("elementor-global-classes-search",we),t?.(),(0,se.closeDialog)()}},(0,r.__)("Go to Class Manager","elementor")),ne.createElement(re.Button,{color:"secondary",variant:"contained",onClick:se.closeDialog},(0,r.__)("Done","elementor"))));async function Ce({context:e,onApprove:t}){const n=v((0,s.__getState)()),a="preview"===e?A.saveDraft:A.publish,r="preview"===e?_:E,l=await a({items:n.items,order:n.order,changes:Se(n,r((0,s.__getState)()))});(0,s.__dispatch)(y.actions.reset({context:e})),window.dispatchEvent(new CustomEvent("classes:updated",{detail:{context:e}})),l?.data?.data?.code===M.DUPLICATED_LABEL&&((0,s.__dispatch)(y.actions.updateMultiple(l.data.data.modifiedLabels)),V({event:"classPublishConflict",numOfConflicts:Object.keys(l.data.data.modifiedLabels).length}),(0,se.openDialog)({component:ne.createElement(xe,{modifiedLabels:l.data.data.modifiedLabels||[],onApprove:t})}))}function Se(e,t){const n=Object.keys(e.items),a=Object.keys(t.items);return{added:n.filter(e=>!a.includes(e)),deleted:a.filter(e=>!n.includes(e)),modified:n.filter(n=>n in t.items&&(0,i.hash)(e.items[n])!==(0,i.hash)(t.items[n]))}}const Ie=({tooltipText:e,sx:t,trigger:n})=>{const{filters:{onClearFilter:a}}=fe();return ne.createElement(re.Tooltip,{title:e,placement:"top",disableInteractive:!0},ne.createElement(re.Box,null,ne.createElement(Te,{"aria-label":e,size:"tiny",onClick:()=>{a(n),V({event:"classManagerFilterCleared",trigger:n})},sx:t},ne.createElement(ue.BrushBigIcon,{fontSize:"tiny"}))))},Te=(0,re.styled)(re.IconButton)(({theme:e})=>({"&.Mui-disabled":{pointerEvents:"auto","&:hover":{color:e.palette.action.disabled}}})),De={unused:(0,r.__)("Unused","elementor"),empty:(0,r.__)("Empty","elementor"),onThisPage:(0,r.__)("On this page","elementor")},ke=()=>{const{filters:{filters:e,setFilters:t}}=fe(),n=Ee(),a=n=>{t(e=>({...e,[n]:!e[n]})),V({event:"classManagerFilterUsed",action:e[n]?"remove":"apply",type:n,trigger:"menu"})};return ne.createElement(re.MenuList,null,ne.createElement(re.MenuItem,{onClick:()=>a("unused")},ne.createElement(Pe,{label:De.unused,checked:e.unused,suffix:ne.createElement(re.Chip,{size:"tiny",sx:{ml:"auto"},label:n.unused.length})})),ne.createElement(re.MenuItem,{onClick:()=>a("empty")},ne.createElement(Pe,{label:De.empty,checked:e.empty,suffix:ne.createElement(re.Chip,{size:"tiny",sx:{ml:"auto"},label:n.empty.length})})),ne.createElement(re.MenuItem,{onClick:()=>a("onThisPage")},ne.createElement(Pe,{label:De.onThisPage,checked:e.onThisPage,suffix:ne.createElement(re.Chip,{size:"tiny",sx:{ml:"auto"},label:n.onThisPage.length})})))},Pe=({label:e,suffix:t,checked:n})=>ne.createElement(re.Stack,{direction:"row",alignItems:"center",gap:.5,flex:1},ne.createElement(re.Checkbox,{size:"small",checked:n,sx:{padding:0,color:"text.tertiary","&.Mui-checked":{color:"text.tertiary"}}}),ne.createElement(re.Typography,{variant:"caption",sx:{color:"text.secondary"}},e),t),Oe=()=>{const{filters:{filters:e,setFilters:t}}=fe(),n=Object.keys(e).filter(t=>e[t]),a=n.length>0;return ne.createElement(re.Stack,{direction:"row",alignItems:"center",justifyContent:"space-between"},ne.createElement(re.Stack,{direction:"row",gap:.5,alignItems:"center",flexWrap:"wrap"},n.map(e=>ne.createElement(re.Chip,{key:e,label:De[e],onDelete:()=>(e=>{t(t=>({...t,[e]:!1})),V({event:"classManagerFilterUsed",action:"remove",type:e,trigger:"header"})})(e),sx:ze,size:"tiny"}))),a&&ne.createElement(Ie,{trigger:"header",tooltipText:(0,r.__)("Clear Filters","elementor"),sx:{margin:"0 0 auto auto"}}))},ze={"& .MuiChip-deleteIcon":{display:"none",transition:"opacity 0.2s"},"&:hover .MuiChip-deleteIcon":{display:"block"}};function Ae(){return Ae=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Ae.apply(null,arguments)}const Me=()=>{const{filters:{filters:e}}=fe(),t=(0,re.usePopupState)({variant:"popover",disableAutoFocus:!0});ne.useEffect(()=>{t.isOpen&&V({event:"classManagerFiltersOpened"})},[t.isOpen]);const n=Object.values(e).some(e=>e);return ne.createElement(ne.Fragment,null,ne.createElement(re.Tooltip,{title:(0,r.__)("Filters","elementor"),placement:"top"},ne.createElement(re.ToggleButton,Ae({value:"filter",size:"tiny",selected:t.isOpen},(0,re.bindToggle)(t)),ne.createElement(ue.FilterIcon,{fontSize:"tiny"}))),ne.createElement(re.Popover,Ae({sx:{maxWidth:"344px"},anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:-21}},(0,re.bindPopover)(t)),ne.createElement(se.PopoverHeader,{actions:n?[ne.createElement(Ie,{trigger:"menu",key:"clear-all-button",tooltipText:(0,r.__)("Clear all","elementor")})]:[],onClose:t.close,title:(0,r.__)("Filters","elementor"),icon:ne.createElement(ue.FilterIcon,{fontSize:"tiny"})}),ne.createElement(re.Divider,{sx:{borderWidth:"1px 0 0 0"}}),ne.createElement(se.PopoverBody,{width:344,height:125},ne.createElement(ke,null))))},Le=()=>{const{search:{inputValue:e,handleChange:t}}=fe();return ne.createElement(re.Stack,{direction:"row",gap:.5,sx:{width:"100%"}},ne.createElement(re.Box,{sx:{flexGrow:1}},ne.createElement(re.TextField,{role:"search",fullWidth:!0,size:"tiny",value:e,onFocus:()=>{V({event:"classManagerSearched"})},placeholder:(0,r.__)("Search","elementor"),onChange:e=>t(e.target.value),InputProps:{startAdornment:ne.createElement(re.InputAdornment,{position:"start"},ne.createElement(ue.SearchIcon,{fontSize:"tiny"}))}})))},Ve=()=>{const[e,t]=(0,de.useSuppressedMessage)("global-class-manager"),[n,a]=(0,ne.useState)(!e);return ne.createElement(se.IntroductionModal,{open:n,title:(0,r.__)("Class Manager","elementor"),handleClose:e=>{e||t(),a(!1)}},ne.createElement(re.Image,{sx:{width:"100%",aspectRatio:"16 / 9"},src:"https://assets.elementor.com/packages/v1/images/class-manager-intro.svg",alt:""}),ne.createElement(je,null))},je=()=>ne.createElement(re.Box,{p:3},ne.createElement(re.Typography,{variant:"body2"},(0,r.__)("The Class Manager lets you see all the classes you've created, plus adjust their priority, rename them, and delete unused classes to keep your CSS structured.","elementor")),ne.createElement("br",null),ne.createElement(re.Typography,{variant:"body2"},(0,r.__)("Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.","elementor")));let Be=!1;function Fe(){return Fe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Fe.apply(null,arguments)}const Re=({sx:e,...t})=>ne.createElement(ue.ColorSwatchIcon,Fe({sx:{transform:"rotate(90deg)",...e}},t)),We=()=>(0,s.__useSelector)(S),Ue={total:0,content:[]},$e=e=>{const{data:t,...n}=be();return{...n,data:t?.[e]??Ue}},Ge={"wp-post":{label:(0,r.__)("Post","elementor"),icon:ne.createElement(ue.PostTypeIcon,{fontSize:"inherit"})},"wp-page":{label:(0,r.__)("Page","elementor"),icon:ne.createElement(ue.PagesIcon,{fontSize:"inherit"})},popup:{label:(0,r.__)("Popup","elementor"),icon:ne.createElement(ue.PopupTemplateIcon,{fontSize:"inherit"})},header:{label:(0,r.__)("Header","elementor"),icon:ne.createElement(ue.HeaderTemplateIcon,{fontSize:"inherit"})},footer:{label:(0,r.__)("Footer","elementor"),icon:ne.createElement(ue.FooterTemplateIcon,{fontSize:"inherit"})}},qe=({cssClassID:e,onClose:t})=>{const{data:n}=$e(e),a=(0,ae.__useOpenDocumentInNewTab)(),s=n?.content.map(({title:e,elements:t,pageId:n,type:a})=>({type:"item",value:n,label:e,secondaryText:t.length.toString(),docType:a}))??[];return ne.createElement(ne.Fragment,null,ne.createElement(se.PopoverHeader,{icon:ne.createElement(ue.CurrentLocationIcon,{fontSize:"tiny"}),title:ne.createElement(re.Stack,{flexDirection:"row",gap:1,alignItems:"center"},ne.createElement(re.Box,{"aria-label":"header-title"},(0,r.__)("Locator","elementor")),ne.createElement(re.Box,null,ne.createElement(re.Chip,{sx:{lineHeight:1},size:"tiny",label:n.total}))),onClose:t}),ne.createElement(re.Divider,null),ne.createElement(se.PopoverBody,{width:300},ne.createElement(se.PopoverMenuList,{onSelect:t=>{a(+t),V({event:"classUsageLocate",classId:e})},items:s,onClose:()=>{},menuListTemplate:Ne,menuItemContentTemplate:e=>ne.createElement(re.Stack,{flexDirection:"row",flex:1,alignItems:"center"},ne.createElement(re.Box,{display:"flex",sx:{pr:1}},ne.createElement(re.Tooltip,{disableInteractive:!0,title:Ge?.[e.docType]?.label??e.docType,placement:"top"},ne.createElement(re.Icon,{fontSize:"small"},Ge?.[e.docType]?.icon||ne.createElement(ue.PagesIcon,{fontSize:"inherit"})))),ne.createElement(re.Box,{sx:{pr:.5,maxWidth:"173px"},display:"flex"},ne.createElement(se.EllipsisWithTooltip,{title:e.label,as:re.Typography,variant:"caption",maxWidth:"173px",sx:{lineHeight:1}})),ne.createElement(ue.ExternalLinkIcon,{className:"hover-only-icon",fontSize:"tiny"}),ne.createElement(re.Chip,{sx:{ml:"auto"},size:"tiny",label:e.secondaryText}))})))},Ne=(0,re.styled)(re.MenuList)(({theme:e})=>({"& > li":{display:"flex",cursor:"pointer",height:32,width:"100%"},'& > [role="option"]':{...e.typography.caption,lineHeight:"inherit",padding:e.spacing(.5,1,.5,2),textOverflow:"ellipsis",position:"absolute",top:0,left:0,opacity:1,".hover-only-icon":{color:e.palette.text.disabled,opacity:0},"&:hover":{borderRadius:e.spacing(.5),backgroundColor:e.palette.action.hover,".hover-only-icon":{color:e.palette.text.disabled,opacity:1}}},width:"100%",position:"relative"}));function He(){return He=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},He.apply(null,arguments)}const Ye=({id:e,onClick:t})=>{const{data:{total:n},isLoading:a}=$e(e),s=(0,re.usePopupState)({variant:"popover",popupId:"css-class-usage-popover"});if(a)return null;const r=0!==n?Ke:Qe;return ne.createElement(ne.Fragment,null,ne.createElement(re.Box,{position:"relative",onMouseEnter:()=>{V({event:"classUsageHovered",classId:e,usage:n})}},ne.createElement(r,{total:n},ne.createElement(Je,He({disabled:0===n,size:"tiny"},(0,re.bindTrigger)(s),{onClick:a=>{0!==n&&((0,re.bindTrigger)(s).onClick(a),t(e),V({event:"classUsageClicked",classId:e}))}}),ne.createElement(ue.CurrentLocationIcon,{fontSize:"tiny"})))),ne.createElement(re.Box,null,ne.createElement(re.Popover,He({anchorOrigin:{vertical:"center",horizontal:"right"},transformOrigin:{vertical:15,horizontal:-50}},(0,re.bindPopover)(s),{onClose:()=>{(0,re.bindPopover)(s).onClose(),t("")}}),ne.createElement(qe,{onClose:s.close,"aria-label":"css-class-usage-popover",cssClassID:e}))))},Je=(0,re.styled)(re.IconButton)(({theme:e})=>({"&.Mui-disabled":{pointerEvents:"auto","&:hover":{color:e.palette.action.disabled}},height:"22px",width:"22px"})),Ke=({children:e,total:t})=>ne.createElement(re.Tooltip,{disableInteractive:!0,placement:"top",title:`${(0,r.__)("Show {{number}} {{locations}}","elementor").replace("{{number}}",t.toString()).replace("{{locations}}",1===t?(0,r.__)("location","elementor"):(0,r.__)("locations","elementor"))}`},ne.createElement("span",null,e)),Qe=({children:e})=>ne.createElement(re.Infotip,{disableInteractive:!0,placement:"top",color:"secondary",content:ne.createElement(se.InfoAlert,{sx:{mt:1}},(0,r.__)("This class isn’t being used yet.","elementor"))},ne.createElement("span",null,e)),Xe=(0,ne.createContext)(null),Ze=({children:e})=>{const[t,n]=(0,ne.useState)(null);return ne.createElement(Xe.Provider,{value:{openDialog:e=>{n(e)},closeDialog:()=>{n(null)},dialogProps:t}},e,!!t&&ne.createElement(et,t))},et=({label:e,id:t})=>{const{closeDialog:n}=tt(),{data:{total:a,content:l}}=$e(t),o=a&&l.length?(0,r.__)("Will permanently remove it from your project and may affect the design across all elements using it. Used %1 times across %2 pages. This action cannot be undone.","elementor").replace("%1",a.toString()).replace("%2",l.length.toString()):(0,r.__)("Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.","elementor");return ne.createElement(se.ConfirmationDialog,{open:!0,onClose:n},ne.createElement(se.ConfirmationDialog.Title,null,(0,r.__)("Delete this class?","elementor")),ne.createElement(se.ConfirmationDialog.Content,null,ne.createElement(se.ConfirmationDialog.ContentText,null,(0,r.__)("Deleting","elementor"),ne.createElement(re.Typography,{variant:"subtitle2",component:"span"}," ",e," "),o)),ne.createElement(se.ConfirmationDialog.Actions,{onClose:n,onConfirm:()=>{n(),(e=>{V({event:"classDeleted",classId:e,runAction:()=>{(0,s.__dispatch)(y.actions.delete(e)),Be=!0}})})(t)}}))},tt=()=>{const e=(0,ne.useContext)(Xe);if(!e)throw new Error("useDeleteConfirmation must be used within a DeleteConfirmationProvider");return e};function nt(){return nt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},nt.apply(null,arguments)}const at=e=>ne.createElement(re.UnstableSortableProvider,nt({restrictAxis:!0,variant:"static",dragPlaceholderStyle:{opacity:"1"}},e)),st=e=>ne.createElement(lt,nt({},e,{role:"button",className:"class-item-sortable-trigger","aria-label":"sort"}),ne.createElement(ue.GripVerticalIcon,{fontSize:"tiny"})),rt=({children:e,id:t,...n})=>ne.createElement(re.UnstableSortableItem,nt({},n,{id:t,render:({itemProps:t,isDragged:n,triggerProps:a,itemStyle:s,triggerStyle:r,dropIndicationStyle:l,showDropIndication:o,isDragOverlay:i,isDragPlaceholder:c})=>ne.createElement(re.Box,nt({},t,{style:s,component:"li",role:"listitem",sx:{backgroundColor:i?"background.paper":void 0}}),e({itemProps:t,isDragged:n,triggerProps:a,itemStyle:s,triggerStyle:r,isDragPlaceholder:c}),o&&ne.createElement(ot,{style:l}))})),lt=(0,re.styled)("div")(({theme:e})=>({position:"absolute",left:0,top:"50%",transform:`translate( -${e.spacing(1.5)}, -50% )`,color:e.palette.action.active})),ot=(0,re.styled)(re.Box)` width: 100%; height: 1px; background-color: ${({theme:e})=>e.palette.text.primary}; `;function it(){return it=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},it.apply(null,arguments)}const ct=({id:e,label:t,renameClass:n,selected:a,disabled:s,sortableTriggerProps:l,showSortIndicator:o,syncToV3:i,onToggleSync:c})=>{const d=(0,ne.useRef)(null),{ref:u,openEditMode:m,isEditing:p,error:g,getProps:h}=(0,se.useEditable)({value:t,onSubmit:n,validation:pt}),[y,f]=(0,ne.useState)(""),{openDialog:b}=tt(),v=(0,re.usePopupState)({variant:"popover",disableAutoFocus:!0}),E=(y===e||a||v.isOpen)&&!s;return ne.createElement(ne.Fragment,null,ne.createElement(re.Stack,{p:0},ne.createElement(se.WarningInfotip,{open:Boolean(g),text:g??"",placement:"bottom",width:d.current?.getBoundingClientRect().width,offset:[0,-15]},ne.createElement(dt,{ref:d,dense:!0,disableGutters:!0,showSortIndicator:o,showActions:E||p,shape:"rounded",onDoubleClick:m,selected:E,disabled:s,focusVisibleClassName:"visible-class-item"},ne.createElement(st,l),ne.createElement(ut,{isActive:p,isError:!!g},p?ne.createElement(se.EditableField,it({ref:u,as:re.Typography,variant:"caption"},h())):ne.createElement(se.EllipsisWithTooltip,{title:t,as:re.Typography,variant:"caption"})),ne.createElement(re.Box,{className:"class-item-locator"},ne.createElement(Ye,{id:e,onClick:f})),ne.createElement(re.Tooltip,{placement:"top",className:"class-item-more-actions",title:(0,r.__)("More actions","elementor")},ne.createElement(re.IconButton,it({size:"tiny"},(0,re.bindTrigger)(v),{"aria-label":"More actions"}),ne.createElement(ue.DotsVerticalIcon,{fontSize:"tiny"})))))),ne.createElement(re.Menu,it({},(0,re.bindMenu)(v),{anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"}}),ne.createElement(se.MenuListItem,{sx:{minWidth:"160px"},onClick:()=>{v.close(),m()}},ne.createElement(re.Typography,{variant:"caption",sx:{color:"text.primary"}},(0,r.__)("Rename","elementor"))),c&&ne.createElement(se.MenuListItem,{onClick:()=>{v.close(),c(e,!i)}},ne.createElement(re.Stack,{direction:"row",alignItems:"center",gap:1},i?ne.createElement(ue.RefreshOffIcon,{fontSize:"tiny"}):ne.createElement(ue.RefreshIcon,{fontSize:"tiny"}),ne.createElement(re.Typography,{variant:"caption",sx:{color:"text.primary"}},i?(0,r.__)("Stop syncing to Global Fonts","elementor"):(0,r.__)("Sync to Global Fonts","elementor")))),ne.createElement(se.MenuListItem,{onClick:()=>{v.close(),b({id:e,label:t})}},ne.createElement(re.Typography,{variant:"caption",sx:{color:"error.light"}},(0,r.__)("Delete","elementor")))))},dt=(0,re.styled)(re.ListItemButton,{shouldForwardProp:e=>!["showActions","showSortIndicator"].includes(e)})(({showActions:e,showSortIndicator:t})=>`\n min-height: 36px;\n\n &.visible-class-item {\n box-shadow: none !important;\n }\n\n .class-item-locator {\n visibility: hidden;\n }\n\n .class-item-sortable-trigger {\n visibility: ${t&&e?"visible":"hidden"};\n }\n\n &:hover:not(:disabled) {\n .class-item-locator {\n visibility: visible;\n }\n\n .class-item-sortable-trigger {\n visibility: ${t?"visible":"hidden"};\n }\n }\n `),ut=(0,re.styled)(re.Box,{shouldForwardProp:e=>!["isActive","isError"].includes(e)})(({theme:e,isActive:t,isError:n})=>({display:"flex",width:"100%",flexGrow:1,borderRadius:e.spacing(.5),border:mt({isActive:t,isError:n,theme:e}),padding:`0 ${e.spacing(1)}`,marginLeft:t?e.spacing(1):0,minWidth:0})),mt=({isActive:e,isError:t,theme:n})=>t?`2px solid ${n.palette.error.main}`:e?`2px solid ${n.palette.secondary.main}`:"none",pt=e=>{const t=(0,a.validateStyleLabel)(e,"rename");return t.isValid?null:t.errorMessage};function gt(){return gt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},gt.apply(null,arguments)}const ht={filterAndSearch:{mainText:(0,r.__)("Sorry, nothing matched.","elementor"),sceneryText:(0,r.__)("Try something else.","elementor"),icon:ne.createElement(ue.PhotoIcon,{color:"inherit",fontSize:"large"})},search:{mainText:(0,r.__)("Sorry, nothing matched","elementor"),sceneryText:(0,r.__)("Clear your input and try something else.","elementor"),icon:ne.createElement(ue.PhotoIcon,{color:"inherit",fontSize:"large"})},filter:{mainText:(0,r.__)("Sorry, nothing matched that search.","elementor"),sceneryText:(0,r.__)("Clear the filters and try something else.","elementor"),icon:ne.createElement(ue.ColorSwatchIcon,{color:"inherit",fontSize:"large"})}},yt=({notFoundType:e})=>{const{search:{onClearSearch:t,inputValue:n},filters:{onClearFilter:a}}=fe();switch(e){case"filter":return ne.createElement(ft,gt({},ht.filter,{onClear:a}));case"search":return ne.createElement(ft,gt({},ht.search,{searchValue:n,onClear:t}));case"filterAndSearch":return ne.createElement(ft,gt({},ht.filterAndSearch,{onClear:()=>{a(),t()}}))}},ft=({onClear:e,searchValue:t,mainText:n,sceneryText:a,icon:s})=>ne.createElement(re.Stack,{color:"text.secondary",pt:5,alignItems:"center",gap:1,overflow:"hidden",justifySelf:"center"},s,ne.createElement(re.Box,{sx:{width:"100%"}},ne.createElement(re.Typography,{align:"center",variant:"subtitle2",color:"inherit"},n),t&&ne.createElement(re.Typography,{variant:"subtitle2",color:"inherit",sx:{display:"flex",width:"100%",justifyContent:"center"}},ne.createElement("span",null,"“"),ne.createElement("span",{style:{maxWidth:"80%",overflow:"hidden",textOverflow:"ellipsis"}},t),ne.createElement("span",null,"”."))),ne.createElement(re.Typography,{align:"center",variant:"caption",color:"inherit"},a),ne.createElement(re.Typography,{align:"center",variant:"caption",color:"inherit"},ne.createElement(re.Link,{color:"secondary",variant:"caption",component:"button",onClick:e},(0,r.__)("Clear & try again","elementor")))),bt=({disabled:e,onStopSyncRequest:t,onStartSyncRequest:n})=>{const{search:{debouncedValue:a}}=fe(),r=We(),l=(0,s.__useDispatch)(),o=_e(),[i,c]=ne.useState(null),d=r.find(e=>e.id===i)?.label??"",[u,m]=_t(i,c,d??""),p=wt();if((0,ne.useEffect)(()=>{const e=e=>{if("z"===e.key&&(e.ctrlKey||e.metaKey)){if(e.stopImmediatePropagation(),e.preventDefault(),e.shiftKey)return void l(y.actions.redo());l(y.actions.undo())}};return window.addEventListener("keydown",e,{capture:!0}),()=>window.removeEventListener("keydown",e)},[l]),!r?.length)return ne.createElement(vt,null);const g=((e,t,n)=>{const a=n.length<=0&&e.length>1,s=t&&0===t.length;return a&&s?"filterAndSearch":a?"search":s?"filter":void 0})(a,o,p);if(g)return ne.createElement(yt,{notFoundType:g});const h=o?.length||a,f=p.length>1&&!h;return ne.createElement(Ze,null,ne.createElement(re.List,{sx:{display:"flex",flexDirection:"column",gap:.5}},ne.createElement(at,{value:u,onChange:m,disableDragOverlay:!f},p?.map(a=>ne.createElement(rt,{key:a.id,id:a.id},({isDragged:s,isDragPlaceholder:r,triggerProps:o,triggerStyle:d})=>(s&&!i&&c(a.id),ne.createElement(ct,{id:a.id,label:a.label,renameClass:e=>{V({event:"classRenamed",classId:a.id,oldValue:a.label,newValue:e,source:"class-manager"}),l(y.actions.update({style:{id:a.id,label:e}}))},selected:s,disabled:e||r,sortableTriggerProps:{...o,style:d},showSortIndicator:f,syncToV3:a.sync_to_v3,onToggleSync:(e,a)=>{!a&&t?t(e):a&&n?n(e):l(y.actions.update({style:{id:e,sync_to_v3:a}}))}})))))))},vt=()=>ne.createElement(re.Stack,{alignItems:"center",gap:1.5,pt:10,px:.5,maxWidth:"260px",margin:"auto"},ne.createElement(Re,{fontSize:"large"}),ne.createElement(Et,{variant:"subtitle2",component:"h2",color:"text.secondary"},(0,r.__)("There are no global classes yet.","elementor")),ne.createElement(re.Typography,{align:"center",variant:"caption",color:"text.secondary"},(0,r.__)("CSS classes created in the editor panel will appear here. Once they are available, you can arrange their hierarchy, rename them, or delete them as needed.","elementor"))),Et=(0,re.styled)(re.Typography)(({theme:e,variant:t})=>({"&.MuiTypography-root":{...e.typography[t]}})),_t=(e,t,n)=>{const a=(0,s.__useDispatch)();return[me(),s=>{a(y.actions.setOrder(s)),e&&(V({event:"classManagerReorder",classId:e,classTitle:n}),t(null))}]},wt=()=>{const e=We(),{search:{debouncedValue:t}}=fe(),n=_e(),a=(0,ne.useMemo)(()=>e.map(e=>({...e,lowerLabel:e.label.toLowerCase()})),[e]),s=(0,ne.useMemo)(()=>t.length>1?a.filter(e=>e.lowerLabel.includes(t.toLowerCase())):e,[t,e,a]);return(0,ne.useMemo)(()=>n&&n.length>0?s.filter(e=>n.includes(e.id)):s,[s,n])},xt=({externalOpen:e,classId:t,onExternalClose:n,onConfirm:a}={})=>{const[s,l]=(0,ne.useState)(!0),o=(0,ne.useRef)(!1);(0,ne.useEffect)(()=>{e&&t&&!o.current&&(o.current=!0,V({event:"classSyncToV3PopupShown",classId:t})),e||(o.current=!1)},[e,t]);const i=()=>{t&&V({event:"classSyncToV3PopupClick",classId:t,action:"cancel"}),n?.()};return ne.createElement(re.Dialog,{open:!!e,onClose:i,maxWidth:"sm",fullWidth:!0},ne.createElement(re.DialogContent,{sx:{p:0}},ne.createElement(re.Box,{component:"img",src:"https://assets.elementor.com/packages/v1/images/class-manager-sync-modal.png",alt:"",sx:{width:"100%",display:"block"}}),ne.createElement(re.Box,{sx:{px:3,pt:4,pb:1}},ne.createElement(re.Typography,{variant:"h6"},(0,r.__)("Sync class to Global Fonts","elementor")),ne.createElement(re.Typography,{variant:"body2",color:"secondary",sx:{mb:2,pt:1}},(0,r.__)("Only typography settings supported in Global Fonts will be applied, including: font family, responsive font sizes, weight, text transform, decoration, line height, letter spacing, and word spacing. Changes made in the class will automatically apply to Global Fonts.","elementor")))),ne.createElement(re.DialogActions,{sx:{justifyContent:"space-between",px:3,pb:2}},ne.createElement(re.FormControlLabel,{control:ne.createElement(re.Checkbox,{checked:!s,onChange:e=>l(!e.target.checked)}),label:ne.createElement(re.Typography,{variant:"body2",color:"secondary"},(0,r.__)("Don't show again","elementor"))}),ne.createElement(re.Box,{sx:{display:"flex",gap:1}},ne.createElement(re.Button,{onClick:i,color:"secondary",size:"small"},(0,r.__)("Cancel","elementor")),ne.createElement(re.Button,{onClick:()=>{t&&V({event:"classSyncToV3PopupClick",classId:t,action:"sync"}),a?.(),n?.()},variant:"contained",size:"small"},(0,r.__)("Sync to Global Fonts","elementor")))))};function Ct(){return Ct=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)({}).hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},Ct.apply(null,arguments)}const St="stop-sync-class",It="global-classes-manager",{panel:Tt,usePanelActions:Dt}=(0,te.__createPanel)({id:It,component:function(){const e=pe(),{close:t}=Dt(),{open:n,close:a,isOpen:l}=(0,se.useDialog)(),[o,i]=(0,ne.useState)(null),[c,d]=(0,ne.useState)(null),[u]=(0,de.useSuppressedMessage)(St),{mutateAsync:m,isPending:p}=zt(),g=(0,ne.useCallback)(e=>{(0,s.__dispatch)(y.actions.update({style:{id:e,sync_to_v3:!1}})),V({event:"classSyncToV3",classId:e,action:"unsync"}),i(null)},[]),h=(0,ne.useCallback)(e=>{(0,s.__dispatch)(y.actions.update({style:{id:e,sync_to_v3:!0}})),V({event:"classSyncToV3",classId:e,action:"sync"}),d(null)},[]),f=(0,ne.useCallback)(e=>{u?g(e):i(e)},[u,g]);return Ot(),ne.createElement(se.ThemeProvider,null,ne.createElement(re.ErrorBoundary,{fallback:ne.createElement(Pt,null)},ne.createElement(te.Panel,null,ne.createElement(ye,null,ne.createElement(te.PanelHeader,null,ne.createElement(re.Stack,{p:1,pl:2,width:"100%",direction:"row",alignItems:"center"},ne.createElement(re.Stack,{width:"100%",direction:"row",gap:1},ne.createElement(te.PanelHeaderTitle,{sx:{display:"flex",alignItems:"center",gap:.5}},ne.createElement(Re,{fontSize:"inherit"}),(0,r.__)("Class Manager","elementor")),ne.createElement(At,null)),ne.createElement(kt,{sx:{marginLeft:"auto"},disabled:p,onClose:()=>{e?n():t()}}))),ne.createElement(te.PanelBody,{sx:{display:"flex",flexDirection:"column",height:"100%"}},ne.createElement(re.Box,{px:2,pb:1},ne.createElement(re.Stack,{direction:"row",justifyContent:"spaceBetween",gap:.5,sx:{pb:.5}},ne.createElement(re.Box,{sx:{flexGrow:1}},ne.createElement(Le,null)),ne.createElement(Me,null)),ne.createElement(Oe,null)),ne.createElement(re.Divider,null),ne.createElement(re.Box,{px:2,sx:{flexGrow:1,overflowY:"auto"}},ne.createElement(bt,{disabled:p,onStopSyncRequest:f,onStartSyncRequest:e=>d(e)}))),ne.createElement(te.PanelFooter,null,ne.createElement(re.Button,{fullWidth:!0,size:"small",color:"global",variant:"contained",onClick:m,disabled:!e,loading:p},(0,r.__)("Save changes","elementor")))))),ne.createElement(Ve,null),c&&ne.createElement(xt,{externalOpen:!0,classId:c,onExternalClose:()=>d(null),onConfirm:()=>h(c)}),o&&ne.createElement(Mt,{open:!0,onClose:()=>i(null),onConfirm:()=>g(o)}),l&&ne.createElement(se.SaveChangesDialog,null,ne.createElement(re.DialogHeader,{onClose:a,logo:!1},ne.createElement(se.SaveChangesDialog.Title,null,(0,r.__)("You have unsaved changes","elementor"))),ne.createElement(se.SaveChangesDialog.Content,null,ne.createElement(se.SaveChangesDialog.ContentText,null,(0,r.__)("You have unsaved changes in the Class Manager.","elementor")),ne.createElement(se.SaveChangesDialog.ContentText,null,(0,r.__)("To avoid losing your updates, save your changes before leaving.","elementor"))),ne.createElement(se.SaveChangesDialog.Actions,{actions:{discard:{label:(0,r.__)("Discard","elementor"),action:()=>{(0,s.__dispatch)(y.actions.resetToInitialState({context:"frontend"})),a()}},confirm:{label:(0,r.__)("Save & Continue","elementor"),action:async()=>{await m(),a(),t()}}}})))},allowedEditModes:["edit",It],onOpen:()=>{(0,l.changeEditMode)(It),function(){const e=window;e.$e?.components?.get?.("panel")?.blockUserInteractions?.()}()},onClose:async()=>{(0,l.changeEditMode)("edit"),await(()=>{const e=(0,ae.getCurrentDocument)();return(0,ae.getV1DocumentsManager)().invalidateCache(),(0,l.__privateRunCommand)("editor/documents/switch",{id:e?.id,shouldScroll:!1,shouldNavigateToDefaultRoute:!1})})(),function(){const e=window;e.$e?.components?.get?.("panel")?.unblockUserInteractions?.()}()},isOpenPreviousElement:!0}),kt=({onClose:e,...t})=>ne.createElement(re.IconButton,Ct({size:"small",color:"secondary",onClick:e,"aria-label":"Close"},t),ne.createElement(ue.XIcon,{fontSize:"small"})),Pt=()=>ne.createElement(re.Box,{role:"alert",sx:{minHeight:"100%",p:2}},ne.createElement(re.Alert,{severity:"error",sx:{mb:2,maxWidth:400,textAlign:"center"}},ne.createElement("strong",null,(0,r.__)("Something went wrong","elementor")))),Ot=()=>{const e=pe();(0,ne.useEffect)(()=>{const t=t=>{e&&t.preventDefault()};return window.addEventListener("beforeunload",t),()=>{window.removeEventListener("beforeunload",t)}},[e])},zt=()=>(0,le.useMutation)({mutationFn:()=>Ce({context:"frontend"}),onSuccess:async()=>{(0,ae.setDocumentModifiedStatus)(!1),Be&&await(async()=>{Be=!1})()}}),At=()=>{const e=_e(),t=me();return ne.createElement(re.Chip,{size:"small",label:e?`${e.length} / ${t?.length}`:t?.length})},Mt=({open:e,onClose:t,onConfirm:n})=>{const[,a]=(0,de.useSuppressedMessage)(St);return ne.createElement(se.ConfirmationDialog,{open:e,onClose:t},ne.createElement(se.ConfirmationDialog.Title,{icon:Re,iconColor:"primary"},(0,r.__)("Un-sync typography class","elementor")),ne.createElement(se.ConfirmationDialog.Content,null,ne.createElement(se.ConfirmationDialog.ContentText,null,(0,r.__)("You're about to stop syncing a typography class to Global Fonts.","elementor")),ne.createElement(se.ConfirmationDialog.ContentText,{sx:{mt:1}},(0,r.__)("Note that if it's being used anywhere, the affected elements will inherit the default typography.","elementor"))),ne.createElement(se.ConfirmationDialog.Actions,{onClose:t,onConfirm:n,cancelLabel:(0,r.__)("Cancel","elementor"),confirmLabel:(0,r.__)("Got it","elementor"),color:"primary",onSuppressMessage:a,suppressLabel:(0,r.__)("Don't show again","elementor")}))},Lt=()=>{V({event:"classManagerOpened",source:"style-panel"})},Vt=()=>{const e=(0,ae.__useActiveDocument)(),{open:t}=Dt(),{save:n}=(0,ae.__useActiveDocumentActions)(),{open:s,close:l,isOpen:o}=(0,se.useDialog)(),{prefetchClassesUsage:i}=ie(),{userCan:c}=(0,a.useUserStylesCapability)();return c(H.getKey()).update?ne.createElement(ne.Fragment,null,ne.createElement(re.Tooltip,{title:(0,r.__)("Class Manager","elementor"),placement:"top"},ne.createElement(re.IconButton,{size:"tiny",onClick:()=>{e?.isDirty?s():(t(),Lt(),V({event:"classManagerOpened",source:"style-panel"}),i())},sx:{marginInlineEnd:-.75}},ne.createElement(Re,{fontSize:"tiny"}))),o&&ne.createElement(se.SaveChangesDialog,null,ne.createElement(se.SaveChangesDialog.Title,null,(0,r.__)("You have unsaved changes","elementor")),ne.createElement(se.SaveChangesDialog.Content,null,ne.createElement(se.SaveChangesDialog.ContentText,{sx:{mb:2}},(0,r.__)("To open the Class Manager, save your page first. You can't continue without saving.","elementor"))),ne.createElement(se.SaveChangesDialog.Actions,{actions:{cancel:{label:(0,r.__)("Stay here","elementor"),action:l},confirm:{label:(0,r.__)("Save & Continue","elementor"),action:async()=>{await n(),l(),t(),Lt(),i()}}}}))):null},jt=e=>{const t=e.styleDef;return ne.createElement(ne.Fragment,null,ne.createElement(se.MenuListItem,{disabled:!e.canConvert,onClick:()=>{const n=function(e){let t=1,n=`${e}${t}`;for(;!(0,a.validateStyleLabel)(n,"create").isValid;)n=`${e}${++t}`;return n}("converted-class-");if(!t)throw new Error("Style definition is required for converting local class to global class.");const s=H.actions.create?.(n,t.variants);s&&(e.successCallback(s),V({classId:s,event:"classCreated",source:"converted",classTitle:n}))},dense:!0,sx:{"&.Mui-focusVisible":{border:"none",boxShadow:"none !important",backgroundColor:"transparent"}}},(0,r.__)("Convert to global class","elementor")),ne.createElement(re.Divider,null))};function Bt(){const e=(0,s.__useDispatch)();return(0,ne.useEffect)(()=>{const t=t=>{const n=t.detail?.global_classes;n?.items&&n?.order&&e(y.actions.load({preview:{items:n.items,order:n.order},frontend:{items:n.items,order:n.order}})),Promise.all([A.all("preview"),A.all("frontend")]).then(([t,n])=>{const{data:a}=t,{data:s}=n;e(y.actions.load({preview:{items:a.data,order:a.meta.order},frontend:{items:s.data,order:s.meta.order}}))}).catch(()=>{})};return window.addEventListener("elementor/global-styles/imported",t),()=>{window.removeEventListener("elementor/global-styles/imported",t)}},[e]),null}const Ft="active-panel",Rt="global-classes-manager",Wt="panel/elements";function Ut(){const{open:e}=Dt(),t=(0,ne.useRef)(!1);return(0,ne.useEffect)(()=>{if(new URLSearchParams(window.location.search).get(Ft)===Rt)return(0,l.__privateListenTo)((0,l.routeOpenEvent)(Wt),()=>{t.current||(t.current=!0,requestAnimationFrame(()=>{e()}))})},[e]),null}function $t(){const e=(0,s.__useDispatch)();return(0,ne.useEffect)(()=>{Promise.all([A.all("preview"),A.all("frontend")]).then(([t,n])=>{const{data:a}=t,{data:s}=n;e(y.actions.load({preview:{items:a.data,order:a.meta.order},frontend:{items:s.data,order:s.meta.order}}))})},[e]),null}var Gt=window.elementorV2.schema,qt=window.elementorV2.editorCanvas,Nt=window.elementorV2.editorProps;const Ht={action:Gt.z.enum(["create","modify","delete"]).describe("Operation to perform"),classId:Gt.z.string().optional().describe("Global class ID (required for modify). Get from elementor://global-classes resource."),globalClassName:Gt.z.string().optional().describe("Global class name (required for create)"),props:Gt.z.object({default:Gt.z.record(Gt.z.any()).describe('key-value of style-schema PropValues. Available properties at dynamic resource "elementor://styles/schema/{property-name}"'),hover:Gt.z.record(Gt.z.any()).describe("key-value of style-schema PropValues, for :hover css state. optional").optional(),focus:Gt.z.record(Gt.z.any()).describe("key-value of style-schema PropValues, for :focus css state. optional").optional(),active:Gt.z.record(Gt.z.any()).describe("key-value of style-schema PropValues, for :active css state. optional").optional()}),breakpoint:Gt.z.nullable(Gt.z.string().describe("Responsive breakpoint name for styles. Defaults to desktop (null).")).default(null).describe("Responsive breakpoint name for styles. Defaults to desktop (null).")},Yt={status:Gt.z.enum(["ok","error"]).describe("Operation status"),classId:Gt.z.string().optional().describe("Class ID (returned on create success)"),message:Gt.z.string().optional().describe("Error details if status is error")},Jt=async e=>{const{action:t,classId:a,globalClassName:s,props:r,breakpoint:l}=e,o=r;let i=a;if("create"===t&&!s)return{status:"error",message:"Create requires globalClassName"};if("modify"===t&&!i)return{status:"error",message:"Modify requires classId"};if("delete"===t&&!i)return{status:"error",message:"Delete requires classId"};const{create:c,update:d,delete:u}=H.actions;if(!c||!d||!u)return{status:"error",message:"Required actions not available"};const m=[],p=(0,n.getStylesSchema)(),g=Object.keys(p);if(Object.values(o).forEach(e=>{Object.keys(e).forEach(t=>{const n=p[t];if(!n)return void m.push(`Property "${t}" does not exist in styles schema.`);const{valid:a,jsonSchema:s}=Nt.Schema.validatePropValue(n,e[t]);a||m.push(`- Property "${t}" has invalid value\n Expected schema: ${s}\n`)})}),m.length>0)return{status:"error",message:`Validation errors:\n${m.join("\n")}\nAvailable Properties: ${g.join(", ")}\nUpdate your input and try again.`};const h=window.elementorV2.editorVariables.Utils;Object.values(o).forEach(e=>{Object.keys(e).forEach(t=>{e[t]=Nt.Schema.adjustLlmPropValueSchema(e[t],{transformers:h.globalVariablesLLMResolvers})})});const y=l??"desktop";let f={status:"error",classId:"",message:"unknown error"};try{let e=t;for await(const[n,a]of Object.entries(o))switch(e){case"create":const r=await Kt({props:a,className:s,stylesProvider:H,breakpoint:y,state:n});r&&"create"===e&&(e="modify",i=r),f=r?{status:"ok",message:`created global class with ID ${r}`}:{status:"error",message:"error creating class"};break;case"modify":f=await Qt({classId:i,props:a,stylesProvider:H,breakpoint:y,state:n})?{status:"ok",classId:i}:{status:"error",message:"error modifying class"};break;case"delete":f=await Xt({classId:i,stylesProvider:H})?{status:"ok",message:`deleted global class with ID ${i}`}:{status:"error",message:"error deleting class"};break;default:throw new Error(`Unsupported action ${t}`)}}catch(e){return{status:"error",message:`${t} failed: ${e.message||"Unknown error"}`}}return f};async function Kt(e){const{props:t,breakpoint:n,className:a,stylesProvider:s,state:r}=e,{create:l,delete:o}=s.actions;if(!a)throw new Error("Global class name is a required for creation");if(!l||!o)throw new Error("User is unable to create global classes");const i=l(a,[{meta:{breakpoint:n,state:"default"===r?null:r},custom_css:null,props:t}]);try{return await Ce({context:"frontend"}),i}catch{return o(i),null}}async function Qt(e){const{props:t,breakpoint:n,classId:a,stylesProvider:s,state:r}=e,{updateProps:l,update:o}=s.actions;if(!a)throw new Error("Class ID is required for modification");if(!l||!o)throw new Error("User is unable to update global classes");const i=structuredClone(s.actions.all());try{return l({id:a,props:t,meta:{breakpoint:n,state:r}}),await Ce({context:"frontend"}),!0}catch{return i.forEach(e=>{o({id:e.id,variants:e.variants})}),await Ce({context:"frontend"}),!1}}async function Xt(e){const{classId:t,stylesProvider:n}=e,{delete:a,create:s}=n.actions;if(!t)throw new Error("Class ID is required for deletion");if(!a||!s)throw new Error("User is unable to delete global classes");if(!structuredClone(n.actions.all()).find(e=>e.id===t))throw new Error(`Class with ID "${t}" not found`);try{return a(t),await Ce({context:"frontend"}),!0}catch{return!1}}const Zt=(e,t)=>{const{setMCPDescription:n}=e;var a;n("Everything related to V4 ( Atomic ) global classes.\n# Global classes\n- Create/update/delete global classes\n- Get list of global classes\n- Get details of a global class\n- Get details of a global class\n"),(a=e).addTool({schema:{classId:Gt.z.string().describe("The ID of the class to apply"),elementId:Gt.z.string().describe("The ID of the element to which the class will be applied")},outputSchema:{result:Gt.z.string().describe("Result message indicating the success of the apply operation"),llm_instructions:Gt.z.string().describe("Instructions what to do next, Important to follow these instructions!")},name:"apply-global-class",modelPreferences:{intelligencePriority:.7,speedPriority:.8},description:'Apply a global class to an element, enabling consistent styling through your design system.\n\n## When to use this tool:\n**ALWAYS use this IMMEDIATELY AFTER building compositions** to apply the global classes you created beforehand:\n- After using "build-compositions" tool, apply semantic classes to the created elements\n- When applying consistent typography styles (heading-primary, text-body, etc.)\n- When applying theme colors or brand styles (bg-brand, button-cta, etc.)\n- When ensuring spacing consistency (spacing-section-large, etc.)\n\n**DO NOT use this tool** for:\n- Elements that don\'t share styles with other elements (use inline styles instead)\n- Layout-specific properties (those should remain inline in stylesConfig)\n\n## Prerequisites:\n- **REQUIRED**: Get the list of available global classes from \'elementor://global-classes\' resource\n- **REQUIRED**: Get element IDs from the composition XML returned by "build-compositions" tool\n- Ensure you have the most up-to-date list of classes applied to the element to avoid duplicates\n- Make sure you have the correct class ID that you want to apply\n\n## Best Practices:\n1. Apply multiple classes to a single element if needed (typography + color + spacing)\n2. After applying, the tool will remind you to remove duplicate inline styles from elementConfig\n3. Classes should describe purpose, not implementation (e.g., "heading-primary" not "big-red-text")',handler:async e=>{const{classId:t,elementId:n}=e,a=(0,Z.doGetAppliedClasses)(n);return(0,Z.doApplyClasses)(n,[...a,t]),{llm_instructions:"Please check the element-configuration, find DUPLICATES in the style schema that are in the class, and remove them",result:`Class ${t} applied to element ${n} successfully.`}}}),a.addTool({name:"unapply-global-class",schema:{classId:Gt.z.string().describe("The ID of the class to unapply"),elementId:Gt.z.string().describe("The ID of the element from which the class will be unapplied")},outputSchema:{result:Gt.z.string().describe("Result message indicating the success of the unapply operation")},modelPreferences:{intelligencePriority:.7,speedPriority:.8},description:"Unapply a (global) class from the current element\n\n## When to use this tool:\n- When a user requests to unapply a global class or a class from an element in the Elementor editor.\n- When you need to remove a specific class from an element's applied classes.\n\n## Prerequisites:\n- Ensure you have the most up-to-date list of classes applied to the element to avoid errors.\n The list is available at always up-to-date resource 'elementor://global-classes'.\n- Make sure you have the correct class ID that you want to unapply.\n\n<note>\nIf the user want to unapply a class by it's name and not ID, retreive the id from the list, available at uri elementor://global-classes\n</note>\n",handler:async e=>{const{classId:t,elementId:n}=e;if(!(0,Z.doUnapplyClass)(n,t))throw new Error(`Class ${t} is not applied to element ${n}, cannot unapply it.`);return{result:`Class ${t} unapplied from element ${n} successfully.`}}}),function(e){const{addTool:t}=e;t({name:"get-global-class-usages",modelPreferences:{intelligencePriority:.6,speedPriority:.8},description:"Retreive the usages of global-classes ACCROSS PAGES designed by Elementor editor.\n\n## Prequisites: CRITICAL\n- The list of global classes and their applid values is available at resource uri elementor://global-classes\n\n## When to use this tool:\n- When a user requests to see where a specific global class is being used accross the site.\n- When you need to manage or clean up unused global classes.\n- Before deleting a global class, to ensure it is not in use in any other pages.\n\n## When NOT to use this tool:\n- For getting the list of global classes, refer to the resource at uri elementor://global-classes\n",outputSchema:{usages:Gt.z.array(Gt.z.object({classId:Gt.z.string().describe('The ID of the class, not visible to the user. To retreive the name of the class, use the "list-global-classes" tool'),usages:Gt.z.array(Gt.z.object({pageId:Gt.z.string().describe("The ID of the page where the class is used"),title:Gt.z.string().describe("The title of the page where the class is used"),total:Gt.z.number().describe("The number of times the class is used on this page"),elements:Gt.z.array(Gt.z.string()).describe("List of element IDs using this class on the page")}))}))},handler:async()=>{const e=await L(),t={usages:[]};return Object.entries(e).forEach(([e,n])=>{const a={classId:e,usages:[]};if("number"!=typeof n){const{content:e}=n;e.forEach(e=>{a.usages.push({pageId:String(e.pageId),title:e.title,total:e.total,elements:e.elements})}),t.usages.push(a)}}),t}})}(e),(e=>{const{addTool:t}=e;t({name:"manage-global-classes",requiredResources:[{uri:J,description:"Global classes list"},{uri:qt.STYLE_SCHEMA_URI,description:"Style schema resources"},{uri:qt.BREAKPOINTS_SCHEMA_URI,description:"Breakpoints list"}],modelPreferences:{intelligencePriority:.85,speedPriority:.6},description:"Manages global classes (create/modify) in Elementor editor. Check [elementor://global-classes] and style schemas first.\n\nCREATE: Requires globalClassName, props. Use semantic naming (heading-primary, button-cta, text-muted). Check existing classes to avoid duplicates. ALWAYS create global classes BEFORE compositions for reusable styles.\nMODIFY: Requires classId, props. Get classId from [elementor://global-classes] resource.\n\nNaming pattern: [element-type]-[purpose/variant]-[modifier]\nDO NOT create global classes for: one-off styles, layout-specific properties.\n\nUse style schema at [elementor://styles/schema/{category}] for valid props. Errors include exact schema mismatch details.",schema:Ht,outputSchema:Yt,handler:Jt})})(e),((e,t)=>{[t,e].forEach(e=>{const{mcpServer:t,resource:n,waitForReady:a}=e;n("global-classes",J,{description:"Global classes list."},async()=>({contents:[{uri:J,text:localStorage[K]??"[]"}]})),a().then(()=>{Q(),H.subscribe(()=>{Q(),t.sendResourceListChanged()})})})})(e,t)};let en=null;function tn(e,t="preview"){const n=(0,de.getCurrentUser)(),a=n?.capabilities.includes(o);if(!a)return null;if(en)return en;const s=Ce({context:t,onApprove:e?.open});return en=s,s.finally(()=>{en=null}),s}function nn(){return C((0,s.__getState)())}function an(){const e=Dt();return(0,ne.useEffect)(()=>{(0,l.__privateListenTo)((0,l.v1ReadyEvent)(),()=>{!function(e){const t=(0,s.__subscribeWithSelector)(C,()=>{nn()&&(0,ae.setDocumentModifiedStatus)(!0)});(function(e){(0,l.registerDataHook)("dependency","document/save/save",t=>(tn(e,"publish"===t.status?"frontend":"preview"),!0))})(e),window.addEventListener("elementor/global-styles/before-save",e=>{!en&&nn()&&tn(),en&&e.detail.promises.push(en)})}(e)})},[]),null}function sn(){(0,s.__registerSlice)(y),(0,te.__registerPanel)(Tt),a.stylesRepository.register(H),(0,X.injectIntoLogic)({id:"global-classes-populate-store",component:$t}),(0,X.injectIntoLogic)({id:"global-classes-sync-with-document",component:an}),(0,X.injectIntoLogic)({id:"global-classes-import-listener",component:Bt}),(0,X.injectIntoLogic)({id:"global-classes-prefetch-css-class-usage",component:ce}),(0,X.injectIntoLogic)({id:"global-classes-open-panel-from-url",component:Ut}),(0,Z.injectIntoCssClassConvert)({id:"global-classes-convert-from-local-class",component:jt}),(0,Z.injectIntoClassSelectorActions)({id:"global-classes-manager-button",component:Vt}),(0,Z.registerStyleProviderToColors)(N,{name:"global",getThemeColor:e=>e.palette.global.dark}),Zt((0,ee.getMCPByDomain)("classes",{instructions:"MCP server for management of Elementor global classes"}),(0,ee.getMCPByDomain)("canvas"))}(window.elementorV2=window.elementorV2||{}).editorGlobalClasses=t}(),window.elementorV2.editorGlobalClasses?.init?.();