← All changes
|
assets/js/packages/editor-global-classes/editor-global-classes.min.js
+2
-2
4.1.0-dev3
→
3.34.0-beta1
View file →
| @@ -1,5 +1,5 @@ | ||
| 1 | -!function(){"use strict";var e={d:function(t,n){for(var s in n)e.o(n,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:n[s]})},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,{ClassManagerPanelEmbedded:function(){return jt},GLOBAL_CLASSES_URI:function(){return ln},addDocumentClasses:function(){return Qt},createLabelsForClasses:function(){return Kt},init:function(){return Bn},loadExistingClasses:function(){return en}});var n=window.React,s=window.elementorV2.editorCurrentUser,a=window.elementorV2.editorDocuments,l=window.elementorV2.editorPanels,r=window.elementorV2.editorUi,o=window.elementorV2.editorV1Adapters,i=window.elementorV2.icons,c=window.elementorV2.query,d=window.elementorV2.store,u=window.elementorV2.ui,m=window.wp.i18n,h=window.elementorV2.editorStyles,p=window.elementorV2.utils;const g=(0,p.createError)({code:"global_class_not_found",message:"Global class not found."}),f=(0,p.createError)({code:"global_class_label_already_exists",message:"Class with this name already exists."}),y=(0,p.createError)({code:"global_class_tracking_error",message:"Error tracking global classes event."});function b({value:e,next:t,prev:n}){return{value:e,prev:n||null,next:t||null}}class v{static registry={};static get(e){return v.registry[e]||(v.registry[e]=new v(e)),v.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=b({value:this.transform(e)}),this.current=this.first,this.current.value;const t=b({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 E=v.get("global-classes"),_="globalClasses",w=(0,d.__createSlice)({name:_,initialState:{data:{items:{},order:[]},classLabels:{},initialData:{frontend:{items:{},order:[]},preview:{items:{},order:[]}},isDirty:!1},reducers:{load(e,{payload:{frontend:t,preview:n,classLabels:s}}){e.initialData.frontend=t,e.initialData.preview=n,e.data=n,e.classLabels=s,e.isDirty=!1},add(e,{payload:t}){E.next(e.data),e.data.items[t.id]=t,e.data.order.unshift(t.id),e.classLabels[t.id]=t.label,e.isDirty=!0},delete(e,{payload:t}){E.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),delete e.classLabels[t],e.isDirty=!0},setOrder(e,{payload:t}){E.next(e.data),e.data.order=t,e.isDirty=!0},update(e,{payload:t}){E.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}){E.next(e.data),Object.entries(t).forEach(([t,{modified:n}])=>{e.data.items[t].label=n,e.classLabels[t]=n}),e.isDirty=!1},updateProps(e,{payload:t}){const n=e.data.items[t.id];if(!n)throw new g({context:{styleId:t.id}});E.next(e.data);const s=(0,h.getVariantByMeta)(n,t.meta);let a=("custom_css"in t?t.custom_css:s?.custom_css)??null;if(a=a?.raw?a:null,s){const e=JSON.parse(JSON.stringify(t.props));if("replace"===(t.mode??"merge"))s.props=e;else{const t=JSON.parse(JSON.stringify(s.props));s.props=S(t,e)}s.custom_css=a,n.variants=x(n)}else n.variants.push({meta:t.meta,props:t.props,custom_css:a});e.isDirty=!0},reset(e,{payload:{context:t}}){"frontend"===t&&(E.reset(),e.initialData.frontend=e.data,e.isDirty=!1),e.initialData.preview=e.data},undo(e){E.isLast()&&E.next(e.data);const t=E.prev();t?(e.data=t,e.isDirty=!0):e.data=e.initialData.preview},resetToInitialState(e,{payload:{context:t}}){E.reset(),e.data=e.initialData[t],e.isDirty=!1},redo(e){const t=E.next();E.isLast()&&E.prev(),t&&(e.data=t,e.isDirty=!0)},mergeExistingClasses(e,{payload:{preview:t,frontend:n}}){Object.entries(t).forEach(([t,s])=>{const a=n[t];null!=s&&(t in e.data.items||(e.data.items[t]=s),t in e.initialData.frontend.items||(e.initialData.frontend.items[t]=a),t in e.initialData.preview.items||(e.initialData.preview.items[t]=s),t in e.classLabels||(e.classLabels[t]=s.label))})},setOrderWithoutHistory(e,{payload:t}){e.data.order=t},updateAfterTemplateImport(e,{payload:t}){e.initialData.frontend.items={...e.initialData.frontend.items,...t.addedItems},e.initialData.frontend.order=[...e.initialData.frontend.order,...t.addedIdsOrder],e.initialData.preview.items={...e.initialData.preview.items,...t.addedItems},e.initialData.preview.order=[...e.initialData.preview.order,...t.addedIdsOrder],e.data.items={...e.data.items,...t.addedItems},e.data.order=[...e.data.order,...t.addedIdsOrder],e.classLabels={...e.classLabels,...t.addedClassLabels}}}}),S=(e,t)=>{const n=Array.isArray(e)?{}:e;return Object.entries(t).forEach(([e,t])=>{null==t?delete n[e]:n[e]=t}),n},x=e=>e.variants.filter(({props:e,custom_css:t})=>Object.keys(e).length||t?.raw),C=(e,t)=>({id:e,type:"class",label:t,variants:[]}),I=e=>e[_].data,D=e=>e[_].classLabels,T=e=>e[_].initialData.frontend,O=e=>e[_].initialData.preview,k=(0,d.__createSelector)(I,({order:e})=>e),P=(0,d.__createSelector)(I,({items:e})=>e),M=e=>e[_].isDirty,z=(0,d.__createSelector)(I,D,({items:e,order:t},n)=>t.map(t=>{const s=e[t];if(s)return s;const a=n[t];return void 0!==a?C(t,a):null}).filter(e=>null!==e)),A=(e,t)=>e[_].data.items[t]??null,L=(0,d.__createSelector)(I,({items:e})=>Object.values(e).filter(e=>0===e.variants.length)),F=()=>(0,d.__useSelector)(k),j=()=>(0,d.__useSelector)(M),R=(0,n.createContext)(void 0),V={empty:!1,onThisPage:!1,unused:!1},B=({children:e})=>{const[t,s]=(0,n.useState)(V),{debouncedValue:a,inputValue:l,handleChange:r}=(0,p.useDebounceState)({delay:300,initialValue:(()=>{const e=localStorage.getItem("elementor-global-classes-search");return e?(localStorage.removeItem("elementor-global-classes-search"),e):""})()});return n.createElement(R.Provider,{value:{search:{debouncedValue:a,inputValue:l,handleChange:r,onClearSearch:()=>{r("")}},filters:{filters:t,setFilters:s,onClearFilter:()=>{s(V)}}}},e)},W=()=>{const e=(0,n.useContext)(R);if(!e)throw new Error("useSearchContext must be used within a SearchContextProvider");return e};var $=window.elementorV2.httpClient;const U="/global-classes",G="elementor/v1",q=`${U}/usage`,N=`${U}/post`,H=`${U}/styles`;function K(e,t){return(0,$.httpService)().put(`${G}${U}`,t,{params:{context:e}})}const Y={usage:()=>(0,$.httpService)().get(`${G}${q}`),all:(e="preview")=>(0,$.httpService)().get(`${G}${U}`,{params:{context:e}}),getStylesForPost:(e,t="preview")=>(0,$.httpService)().get(`${G}${N}`,{params:{context:t,post_id:e}}),getStylesByIds:(e,t="preview")=>(0,$.httpService)().get(`${G}${H}`,{params:{context:t,ids:e.join(",")}}),publish:e=>K("frontend",e),saveDraft:e=>K("preview",e)},J={DUPLICATED_LABEL:"DUPLICATED_LABEL"},Q=async()=>{const e=await Y.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},X="css-classes-usage",Z=()=>(0,c.useQuery)({queryKey:[X],queryFn:Q,refetchOnMount:!1,refetchOnWindowFocus:!0}),ee={empty:[],onThisPage:[],unused:[]},te=()=>{const e=(0,a.__useActiveDocument)(),t=(0,d.__useSelector)(L),{data:s,isLoading:l}=Z(),r=(()=>{const e=(0,d.__useSelector)(P);return Object.keys(e)})(),o=(0,n.useMemo)(()=>t.map(({id:e})=>e),[t]),i=(0,n.useMemo)(()=>s&&e?((e,t)=>{const n=[];for(const s in e)e[s].content.forEach(e=>{+e.pageId===t&&n.push(s)});return n})(s,e.id):[],[s,e]),c=(0,n.useMemo)(()=>s?((e,t)=>{const n=new Set(e);return t.filter(e=>!n.has(e))})(Object.keys(s),r):[],[s,r]);return!l&&s&&e?{onThisPage:i,unused:c,empty:o}:ee},ne=()=>{const{filters:{filters:e}}=W(),t=te();return(0,n.useMemo)(()=>{const n=Object.entries(e).filter(([,e])=>e);return 0===n.length?null:n.reduce((e,[n],s)=>{const a=t[n]||[];return 0===s?a:e.filter(e=>a.includes(e))},[])},[e,t])},se="DUP_",ae=({modifiedLabels:e,onApprove:t})=>n.createElement(n.Fragment,null,n.createElement(u.DialogHeader,{logo:!1},n.createElement(u.Box,{display:"flex",alignItems:"center",gap:1},n.createElement(u.Icon,{color:"secondary"},n.createElement(i.InfoCircleFilledIcon,{fontSize:"medium"})),n.createElement(u.Typography,{variant:"subtitle1"},(0,m.__)("We've published your page and updated class names.","elementor")))),n.createElement(u.DialogContent,null,n.createElement(u.Stack,{spacing:2,direction:"column"},n.createElement(u.Typography,{variant:"body2"},(0,m.__)("Some new classes used the same names as existing ones. To prevent conflicts, we added the prefix","elementor"),n.createElement("strong",null," ",se)),n.createElement(u.Box,null,n.createElement(u.Box,{sx:{width:"100%",display:"flex",gap:2,alignItems:"flex-start"}},n.createElement(u.Typography,{variant:"subtitle2",sx:{fontWeight:"bold",flex:1,flexShrink:1,flexGrow:1,minWidth:0}},(0,m.__)("Before","elementor")),n.createElement(u.Typography,{variant:"subtitle2",sx:{minWidth:"200px",fontWeight:"bold",flexShrink:0,flexGrow:0,width:"200px",maxWidth:"200px"}},(0,m.__)("After","elementor"))),n.createElement(u.Divider,{sx:{mt:.5,mb:.5}}),n.createElement(u.Stack,{direction:"column",gap:.5,sx:{pb:2}},Object.values(e).map(({original:e,modified:t},s)=>n.createElement(u.Box,{key:s,sx:{width:"100%",display:"flex",gap:2,alignItems:"flex-start"}},n.createElement(u.Box,{sx:{flex:1,flexShrink:1,flexGrow:1,minWidth:0}},n.createElement(r.EllipsisWithTooltip,{title:e},n.createElement(u.Typography,{variant:"body2",sx:{color:"text.secondary"}},e))),n.createElement(u.Box,{sx:{minWidth:"200px",flexShrink:0,flexGrow:0,width:"200px",maxWidth:"200px"}},n.createElement(r.EllipsisWithTooltip,{title:t},n.createElement(u.Typography,{variant:"body2",sx:{color:"text.primary"}},t)))))),n.createElement(u.Box,null,n.createElement(u.Alert,{severity:"info",size:"small",color:"secondary"},n.createElement("strong",null,(0,m.__)("Your designs and classes are safe.","elementor")),(0,m.__)("Only the prefixes were added. Find them in Class Manager by searching","elementor"),n.createElement("strong",null,se)))))),n.createElement(u.DialogActions,null,n.createElement(u.Button,{color:"secondary",variant:"text",onClick:()=>{localStorage.setItem("elementor-global-classes-search",se),t?.(),(0,r.closeDialog)()}},(0,m.__)("Go to Class Manager","elementor")),n.createElement(u.Button,{color:"secondary",variant:"contained",onClick:r.closeDialog},(0,m.__)("Done","elementor"))));var le=window.elementorV2.events;const re=async e=>{const{runAction:t}=e,n=await ie(e);n&&(ce(n),"classCreated"===n.event&&"classId"in n&&oe(n.classId)),t?.()},oe=async e=>{const t=await pe(e);ce({event:"classApplied",classId:e,...t,totalInstancesAfterApply:1})},ie=async e=>{switch(e.event){case"classApplied":if("classId"in e&&e.classId){const t=await pe(e.classId);return{...e,...t}}break;case"classRemoved":if("classId"in e&&e.classId){const t=ge(e.classId);return{...e,...t}}break;case"classDeleted":if("classId"in e&&e.classId){const t=await me(e.classId);return{...e,...t}}break;case"classCreated":return"source"in e&&"created"!==e.source&&"classId"in e&&e.classId?{...e,classTitle:ue(e.classId).label}:e;case"classStateClicked":if("classId"in e&&e.classId)return{...e,classTitle:ue(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=ue(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}},ce=e=>{const{dispatchEvent:t,config:n}=(0,le.getMixpanel)();if(!n?.names?.global_classes?.[e.event])return void console.error("Global class tracking event not found",{event:e.event});const s=n.names.global_classes[e.event],{event:a,...l}=e;try{t?.(s,{event:a,...l})}catch(e){throw new y({cause:e})}},de=e=>({classTitle:ue(e).label}),ue=e=>{const t=(0,d.__getState)(),n=A(t,e);if(n)return n;const s=D(t)[e];if(void 0!==s)return C(e,s);throw new Error(`CSS class with ID ${e} not found`)},me=async e=>{const t=ue(e).label;return{totalInstances:await he(e),classTitle:t}},he=async e=>{const t=await Q();return t[e]?.total??1},pe=async e=>{const{classTitle:t}=de(e);return{classTitle:t,totalInstancesAfterApply:await he(e)+1}},ge=e=>{const{classTitle:t}=de(e);return{classTitle:t}};async function fe({context:e,onApprove:t}){const s=I((0,d.__getState)()),a="preview"===e?Y.saveDraft:Y.publish,l=function(e,t){const n=Object.keys(e.items),s=Object.keys(t.items),{order:a}=e,{order:l}=t,r=new Set(a),o=l.filter(e=>!r.has(e)),i=a.join(";")!==l.join(";");return{added:n.filter(e=>!s.includes(e)),deleted:o,modified:n.filter(n=>n in t.items&&(0,p.hash)(e.items[n])!==(0,p.hash)(t.items[n])),order:i}}(s,("preview"===e?O:T)((0,d.__getState)())),o=[...l.added,...l.modified],i=Object.fromEntries(o.map(e=>[e,s.items[e]]).filter(([,e])=>e)),c=await a({items:i,order:s.order,changes:l});(0,d.__dispatch)(w.actions.reset({context:e})),window.dispatchEvent(new CustomEvent("classes:updated",{detail:{context:e}})),c?.data?.data?.code===J.DUPLICATED_LABEL&&((0,d.__dispatch)(w.actions.updateMultiple(c.data.data.modifiedLabels)),re({event:"classPublishConflict",numOfConflicts:Object.keys(c.data.data.modifiedLabels).length}),(0,r.openDialog)({component:n.createElement(ae,{modifiedLabels:c.data.data.modifiedLabels||[],onApprove:t})}))}const ye=({tooltipText:e,sx:t,trigger:s})=>{const{filters:{onClearFilter:a}}=W();return n.createElement(u.Tooltip,{title:e,placement:"top",disableInteractive:!0},n.createElement(u.Box,null,n.createElement(be,{"aria-label":e,size:"tiny",onClick:()=>{a(s),re({event:"classManagerFilterCleared",trigger:s})},sx:t},n.createElement(i.BrushBigIcon,{fontSize:"tiny"}))))},be=(0,u.styled)(u.IconButton)(({theme:e})=>({"&.Mui-disabled":{pointerEvents:"auto","&:hover":{color:e.palette.action.disabled}}})),ve={unused:(0,m.__)("Unused","elementor"),empty:(0,m.__)("Empty","elementor"),onThisPage:(0,m.__)("On this page","elementor")},Ee=()=>{const{filters:{filters:e,setFilters:t}}=W(),s=te(),a=n=>{t(e=>({...e,[n]:!e[n]})),re({event:"classManagerFilterUsed",action:e[n]?"remove":"apply",type:n,trigger:"menu"})};return n.createElement(u.MenuList,null,n.createElement(u.MenuItem,{onClick:()=>a("unused")},n.createElement(_e,{label:ve.unused,checked:e.unused,suffix:n.createElement(u.Chip,{size:"tiny",sx:{ml:"auto"},label:s.unused.length})})),n.createElement(u.MenuItem,{onClick:()=>a("empty")},n.createElement(_e,{label:ve.empty,checked:e.empty,suffix:n.createElement(u.Chip,{size:"tiny",sx:{ml:"auto"},label:s.empty.length})})),n.createElement(u.MenuItem,{onClick:()=>a("onThisPage")},n.createElement(_e,{label:ve.onThisPage,checked:e.onThisPage,suffix:n.createElement(u.Chip,{size:"tiny",sx:{ml:"auto"},label:s.onThisPage.length})})))},_e=({label:e,suffix:t,checked:s})=>n.createElement(u.Stack,{direction:"row",alignItems:"center",gap:.5,flex:1},n.createElement(u.Checkbox,{size:"small",checked:s,sx:{padding:0,color:"text.tertiary","&.Mui-checked":{color:"text.tertiary"}}}),n.createElement(u.Typography,{variant:"caption",sx:{color:"text.secondary"}},e),t),we=()=>{const{filters:{filters:e,setFilters:t}}=W(),s=Object.keys(e).filter(t=>e[t]),a=s.length>0;return n.createElement(u.Stack,{direction:"row",alignItems:"center",justifyContent:"space-between"},n.createElement(u.Stack,{direction:"row",gap:.5,alignItems:"center",flexWrap:"wrap"},s.map(e=>n.createElement(u.Chip,{key:e,label:ve[e],onDelete:()=>(e=>{t(t=>({...t,[e]:!1})),re({event:"classManagerFilterUsed",action:"remove",type:e,trigger:"header"})})(e),sx:Se,size:"tiny"}))),a&&n.createElement(ye,{trigger:"header",tooltipText:(0,m.__)("Clear Filters","elementor"),sx:{margin:"0 0 auto auto"}}))},Se={"& .MuiChip-deleteIcon":{display:"none",transition:"opacity 0.2s"},"&:hover .MuiChip-deleteIcon":{display:"block"}};function xe(){return xe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)({}).hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},xe.apply(null,arguments)}const Ce=()=>{const{filters:{filters:e}}=W(),t=(0,u.usePopupState)({variant:"popover",disableAutoFocus:!0});(0,n.useEffect)(()=>{t.isOpen&&re({event:"classManagerFiltersOpened"})},[t.isOpen]);const s=Object.values(e).some(e=>e);return n.createElement(n.Fragment,null,n.createElement(u.Tooltip,{title:(0,m.__)("Filters","elementor"),placement:"top"},n.createElement(u.ToggleButton,xe({value:"filter",size:"tiny",selected:t.isOpen},(0,u.bindToggle)(t)),n.createElement(i.FilterIcon,{fontSize:"tiny"}))),n.createElement(u.Popover,xe({sx:{maxWidth:"344px"},anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:-21}},(0,u.bindPopover)(t)),n.createElement(r.PopoverHeader,{actions:s?[n.createElement(ye,{trigger:"menu",key:"clear-all-button",tooltipText:(0,m.__)("Clear all","elementor")})]:[],onClose:t.close,title:(0,m.__)("Filters","elementor"),icon:n.createElement(i.FilterIcon,{fontSize:"tiny"})}),n.createElement(u.Divider,{sx:{borderWidth:"1px 0 0 0"}}),n.createElement(r.PopoverBody,{width:344,height:125},n.createElement(Ee,null))))},Ie=()=>{const{search:{inputValue:e,handleChange:t}}=W();return n.createElement(u.Stack,{direction:"row",gap:.5,sx:{width:"100%"}},n.createElement(u.Box,{sx:{flexGrow:1}},n.createElement(u.TextField,{role:"search",fullWidth:!0,size:"tiny",value:e,onFocus:()=>{re({event:"classManagerSearched"})},placeholder:(0,m.__)("Search","elementor"),onChange:e=>t(e.target.value),InputProps:{startAdornment:n.createElement(u.InputAdornment,{position:"start"},n.createElement(i.SearchIcon,{fontSize:"tiny"}))}})))},De=()=>{const[e,t]=(0,s.useSuppressedMessage)("global-class-manager"),[a,l]=(0,n.useState)(!e);return n.createElement(r.IntroductionModal,{open:a,title:(0,m.__)("Class Manager","elementor"),handleClose:e=>{e||t(),l(!1)}},n.createElement(u.Image,{sx:{width:"100%",aspectRatio:"16 / 9"},src:"https://assets.elementor.com/packages/v1/images/class-manager-intro.svg",alt:""}),n.createElement(Te,null))},Te=()=>n.createElement(u.Box,{p:3},n.createElement(u.Typography,{variant:"body2"},(0,m.__)("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")),n.createElement("br",null),n.createElement(u.Typography,{variant:"body2"},(0,m.__)("Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.","elementor")));let Oe=!1;function ke(){return ke=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)({}).hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},ke.apply(null,arguments)}const Pe=({sx:e,...t})=>n.createElement(i.ColorSwatchIcon,ke({sx:{transform:"rotate(90deg)",...e}},t));var Me=window.ReactDOM;function ze(e,t,n){let s,a=n.initialDeps??[],l=!0;function r(){var r,o,i;let c;n.key&&(null==(r=n.debug)?void 0:r.call(n))&&(c=Date.now());const d=e();if(d.length===a.length&&!d.some((e,t)=>a[t]!==e))return s;let u;if(a=d,n.key&&(null==(o=n.debug)?void 0:o.call(n))&&(u=Date.now()),s=t(...d),n.key&&(null==(i=n.debug)?void 0:i.call(n))){const e=Math.round(100*(Date.now()-c))/100,t=Math.round(100*(Date.now()-u))/100,s=t/16,a=(e,t)=>{for(e=String(e);e.length<t;)e=" "+e;return e};console.info(`%c⏱ ${a(t,5)} /${a(e,5)} ms`,`\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(0,Math.min(120-120*s,120))}deg 100% 31%);`,null==n?void 0:n.key)}return!(null==n?void 0:n.onChange)||l&&n.skipInitialOnChange||n.onChange(s),l=!1,s}return r.updateDeps=e=>{a=e},r}function Ae(e,t){if(void 0===e)throw new Error("Unexpected undefined"+(t?`: ${t}`:""));return e}const Le=(e,t,n)=>{let s;return function(...a){e.clearTimeout(s),s=e.setTimeout(()=>t.apply(this,a),n)}},Fe=e=>{const{offsetWidth:t,offsetHeight:n}=e;return{width:t,height:n}},je=e=>e,Re=e=>{const t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),s=[];for(let e=t;e<=n;e++)s.push(e);return s},Ve=(e,t)=>{const n=e.scrollElement;if(!n)return;const s=e.targetWindow;if(!s)return;const a=e=>{const{width:n,height:s}=e;t({width:Math.round(n),height:Math.round(s)})};if(a(Fe(n)),!s.ResizeObserver)return()=>{};const l=new s.ResizeObserver(t=>{const s=()=>{const e=t[0];if(null==e?void 0:e.borderBoxSize){const t=e.borderBoxSize[0];if(t)return void a({width:t.inlineSize,height:t.blockSize})}a(Fe(n))};e.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(s):s()});return l.observe(n,{box:"border-box"}),()=>{l.unobserve(n)}},Be={passive:!0},We="undefined"==typeof window||"onscrollend"in window,$e=(e,t)=>{const n=e.scrollElement;if(!n)return;const s=e.targetWindow;if(!s)return;let a=0;const l=e.options.useScrollendEvent&&We?()=>{}:Le(s,()=>{t(a,!1)},e.options.isScrollingResetDelay),r=s=>()=>{const{horizontal:r,isRtl:o}=e.options;a=r?n.scrollLeft*(o?-1:1):n.scrollTop,l(),t(a,s)},o=r(!0),i=r(!1);n.addEventListener("scroll",o,Be);const c=e.options.useScrollendEvent&&We;return c&&n.addEventListener("scrollend",i,Be),()=>{n.removeEventListener("scroll",o),c&&n.removeEventListener("scrollend",i)}},Ue=(e,t,n)=>{if(null==t?void 0:t.borderBoxSize){const e=t.borderBoxSize[0];if(e)return Math.round(e[n.options.horizontal?"inlineSize":"blockSize"])}return e[n.options.horizontal?"offsetWidth":"offsetHeight"]},Ge=(e,{adjustments:t=0,behavior:n},s)=>{var a,l;const r=e+t;null==(l=null==(a=s.scrollElement)?void 0:a.scrollTo)||l.call(a,{[s.options.horizontal?"left":"top"]:r,behavior:n})};class qe{constructor(e){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.now=()=>{var e,t,n;return(null==(n=null==(t=null==(e=this.targetWindow)?void 0:e.performance)?void 0:t.now)?void 0:n.call(t))??Date.now()},this.observer=(()=>{let e=null;const t=()=>e||(this.targetWindow&&this.targetWindow.ResizeObserver?e=new this.targetWindow.ResizeObserver(e=>{e.forEach(e=>{const t=()=>{const t=e.target,n=this.indexFromElement(t);t.isConnected?this.shouldMeasureDuringScroll(n)&&this.resizeItem(n,this.options.measureElement(t,e,this)):this.observer.unobserve(t)};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(t):t()})}):null);return{disconnect:()=>{var n;null==(n=t())||n.disconnect(),e=null},observe:e=>{var n;return null==(n=t())?void 0:n.observe(e,{box:"border-box"})},unobserve:e=>{var n;return null==(n=t())?void 0:n.unobserve(e)}}})(),this.range=null,this.setOptions=e=>{Object.entries(e).forEach(([t,n])=>{void 0===n&&delete e[t]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:je,rangeExtractor:Re,onChange:()=>{},measureElement:Ue,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:"estimate",...e}},this.notify=e=>{var t,n;null==(n=(t=this.options).onChange)||n.call(t,this,e)},this.maybeNotify=ze(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),e=>{this.notify(e)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(e=>e()),this.unsubs=[],this.observer.disconnect(),null!=this.rafId&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var e;const t=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==t){if(this.cleanup(),!t)return void this.maybeNotify();this.scrollElement=t,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=(null==(e=this.scrollElement)?void 0:e.window)??null,this.elementsCache.forEach(e=>{this.observer.observe(e)}),this.unsubs.push(this.options.observeElementRect(this,e=>{this.scrollRect=e,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(e,t)=>{this.scrollAdjustments=0,this.scrollDirection=t?this.getScrollOffset()<e?"forward":"backward":null,this.scrollOffset=e,this.isScrolling=t,this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??("function"==typeof this.options.initialOffset?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(e,t)=>{const n=new Map,s=new Map;for(let a=t-1;a>=0;a--){const t=e[a];if(n.has(t.lane))continue;const l=s.get(t.lane);if(null==l||t.end>l.end?s.set(t.lane,t):t.end<l.end&&n.set(t.lane,!0),n.size===this.options.lanes)break}return s.size===this.options.lanes?Array.from(s.values()).sort((e,t)=>e.end===t.end?e.index-t.index:e.end-t.end)[0]:void 0},this.getMeasurementOptions=ze(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(e,t,n,s,a,l,r)=>(void 0!==this.prevLanes&&this.prevLanes!==l&&(this.lanesChangedFlag=!0),this.prevLanes=l,this.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:t,scrollMargin:n,getItemKey:s,enabled:a,lanes:l,laneAssignmentMode:r}),{key:!1}),this.getMeasurements=ze(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:e,paddingStart:t,scrollMargin:n,getItemKey:s,enabled:a,lanes:l,laneAssignmentMode:r},o)=>{if(!a)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>e)for(const t of this.laneAssignments.keys())t>=e&&this.laneAssignments.delete(t);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),0!==this.measurementsCache.length||this.lanesSettling||(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(e=>{this.itemSizeCache.set(e.key,e.size)}));const i=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===e&&(this.lanesSettling=!1);const c=this.measurementsCache.slice(0,i),d=new Array(l).fill(void 0);for(let e=0;e<i;e++){const t=c[e];t&&(d[t.lane]=e)}for(let a=i;a<e;a++){const e=s(a),l=this.laneAssignments.get(a);let i,u;const m="estimate"===r||o.has(e);if(void 0!==l&&this.options.lanes>1){i=l;const e=d[i],s=void 0!==e?c[e]:void 0;u=s?s.end+this.options.gap:t+n}else{const e=1===this.options.lanes?c[a-1]:this.getFurthestMeasurement(c,a);u=e?e.end+this.options.gap:t+n,i=e?e.lane:a%this.options.lanes,this.options.lanes>1&&m&&this.laneAssignments.set(a,i)}const h=o.get(e),p="number"==typeof h?h:this.options.estimateSize(a),g=u+p;c[a]={index:a,start:u,size:p,end:g,key:e,lane:i},d[i]=a}return this.measurementsCache=c,c},{key:!1,debug:()=>this.options.debug}),this.calculateRange=ze(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(e,t,n,s)=>this.range=e.length>0&&t>0?function({measurements:e,outerSize:t,scrollOffset:n,lanes:s}){const a=e.length-1;if(e.length<=s)return{startIndex:0,endIndex:a};let l=Ne(0,a,t=>e[t].start,n),r=l;if(1===s)for(;r<a&&e[r].end<n+t;)r++;else if(s>1){const o=Array(s).fill(0);for(;r<a&&o.some(e=>e<n+t);){const t=e[r];o[t.lane]=t.end,r++}const i=Array(s).fill(n+t);for(;l>=0&&i.some(e=>e>=n);){const t=e[l];i[t.lane]=t.start,l--}l=Math.max(0,l-l%s),r=Math.min(a,r+(s-1-r%s))}return{startIndex:l,endIndex:r}}({measurements:e,outerSize:t,scrollOffset:n,lanes:s}):null,{key:!1,debug:()=>this.options.debug}),this.getVirtualIndexes=ze(()=>{let e=null,t=null;const n=this.calculateRange();return n&&(e=n.startIndex,t=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,e,t]),[this.options.rangeExtractor,this.options.overscan,this.options.count,e,t]},(e,t,n,s,a)=>null===s||null===a?[]:e({startIndex:s,endIndex:a,overscan:t,count:n}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=e=>{const t=this.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn(`Missing attribute name '${t}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=e=>{var t;if(!this.scrollState||"smooth"!==this.scrollState.behavior)return!0;const n=this.scrollState.index??(null==(t=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))?void 0:t.index);if(void 0!==n&&this.range){const t=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),s=Math.max(0,n-t),a=Math.min(this.options.count-1,n+t);return e>=s&&e<=a}return!0},this.measureElement=e=>{if(!e)return void this.elementsCache.forEach((e,t)=>{e.isConnected||(this.observer.unobserve(e),this.elementsCache.delete(t))});const t=this.indexFromElement(e),n=this.options.getItemKey(t),s=this.elementsCache.get(n);s!==e&&(s&&this.observer.unobserve(s),this.observer.observe(e),this.elementsCache.set(n,e)),this.isScrolling&&!this.scrollState||!this.shouldMeasureDuringScroll(t)||this.resizeItem(t,this.options.measureElement(e,void 0,this))},this.resizeItem=(e,t)=>{var n;const s=this.measurementsCache[e];if(!s)return;const a=t-(this.itemSizeCache.get(s.key)??s.size);0!==a&&("smooth"!==(null==(n=this.scrollState)?void 0:n.behavior)&&(void 0!==this.shouldAdjustScrollPositionOnItemSizeChange?this.shouldAdjustScrollPositionOnItemSizeChange(s,a,this):s.start<this.getScrollOffset()+this.scrollAdjustments)&&this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=a,behavior:void 0}),this.pendingMeasuredCacheIndexes.push(s.index),this.itemSizeCache=new Map(this.itemSizeCache.set(s.key,t)),this.notify(!1))},this.getVirtualItems=ze(()=>[this.getVirtualIndexes(),this.getMeasurements()],(e,t)=>{const n=[];for(let s=0,a=e.length;s<a;s++){const a=t[e[s]];n.push(a)}return n},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=e=>{const t=this.getMeasurements();if(0!==t.length)return Ae(t[Ne(0,t.length-1,e=>Ae(t[e]).start,e)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const e=this.scrollElement.document.documentElement;return this.options.horizontal?e.scrollWidth-this.scrollElement.innerWidth:e.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(e,t,n=0)=>{if(!this.scrollElement)return 0;const s=this.getSize(),a=this.getScrollOffset();"auto"===t&&(t=e>=a+s?"end":"start"),"center"===t?e+=(n-s)/2:"end"===t&&(e-=s);const l=this.getMaxScrollOffset();return Math.max(Math.min(l,e),0)},this.getOffsetForIndex=(e,t="auto")=>{e=Math.max(0,Math.min(e,this.options.count-1));const n=this.getSize(),s=this.getScrollOffset(),a=this.measurementsCache[e];if(!a)return;if("auto"===t)if(a.end>=s+n-this.options.scrollPaddingEnd)t="end";else{if(!(a.start<=s+this.options.scrollPaddingStart))return[s,t];t="start"}if("end"===t&&e===this.options.count-1)return[this.getMaxScrollOffset(),t];const l="end"===t?a.end+this.options.scrollPaddingEnd:a.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(l,t,a.size),t]},this.scrollToOffset=(e,{align:t="start",behavior:n="auto"}={})=>{const s=this.getOffsetForAlignment(e,t),a=this.now();this.scrollState={index:null,align:t,behavior:n,startedAt:a,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(e,{align:t="auto",behavior:n="auto"}={})=>{e=Math.max(0,Math.min(e,this.options.count-1));const s=this.getOffsetForIndex(e,t);if(!s)return;const[a,l]=s,r=this.now();this.scrollState={index:e,align:l,behavior:n,startedAt:r,lastTargetOffset:a,stableFrames:0},this._scrollToOffset(a,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(e,{behavior:t="auto"}={})=>{const n=this.getScrollOffset()+e,s=this.now();this.scrollState={index:null,align:"start",behavior:t,startedAt:s,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:t}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{var e;const t=this.getMeasurements();let n;if(0===t.length)n=this.options.paddingStart;else if(1===this.options.lanes)n=(null==(e=t[t.length-1])?void 0:e.end)??0;else{const e=Array(this.options.lanes).fill(null);let s=t.length-1;for(;s>=0&&e.some(e=>null===e);){const n=t[s];null===e[n.lane]&&(e[n.lane]=n.end),s--}n=Math.max(...e.filter(e=>null!==e))}return Math.max(n-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(e,{adjustments:t,behavior:n})=>{this.options.scrollToFn(e,{behavior:n,adjustments:t},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(e)}scheduleScrollReconcile(){this.targetWindow?null==this.rafId&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()})):this.scrollState=null}reconcileScroll(){if(!this.scrollState)return;if(!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3)return void(this.scrollState=null);const e=null!=this.scrollState.index?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,t=e?e[0]:this.scrollState.lastTargetOffset,n=t!==this.scrollState.lastTargetOffset;if(!n&&(s=t,a=this.getScrollOffset(),Math.abs(s-a)<1.01)){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=1)return void(this.scrollState=null)}else this.scrollState.stableFrames=0,n&&(this.scrollState.lastTargetOffset=t,this.scrollState.behavior="auto",this._scrollToOffset(t,{adjustments:void 0,behavior:"auto"}));var s,a;this.scheduleScrollReconcile()}}const Ne=(e,t,n,s)=>{for(;e<=t;){const a=(e+t)/2|0,l=n(a);if(l<s)e=a+1;else{if(!(l>s))return a;t=a-1}}return e>0?e-1:0},He="undefined"!=typeof document?n.useLayoutEffect:n.useEffect;const Ke=()=>(0,d.__useSelector)(z);var Ye=window.elementorV2.editorStylesRepository;const Je={total:0,content:[]},Qe=e=>{const{data:t,...n}=Z();return{...n,data:t?.[e]??Je}},Xe={"wp-post":{label:(0,m.__)("Post","elementor"),icon:n.createElement(i.PostTypeIcon,{fontSize:"inherit"})},"wp-page":{label:(0,m.__)("Page","elementor"),icon:n.createElement(i.PagesIcon,{fontSize:"inherit"})},popup:{label:(0,m.__)("Popup","elementor"),icon:n.createElement(i.PopupTemplateIcon,{fontSize:"inherit"})},header:{label:(0,m.__)("Header","elementor"),icon:n.createElement(i.HeaderTemplateIcon,{fontSize:"inherit"})},footer:{label:(0,m.__)("Footer","elementor"),icon:n.createElement(i.FooterTemplateIcon,{fontSize:"inherit"})}},Ze=({cssClassID:e,onClose:t})=>{const{data:s}=Qe(e),l=(0,a.__useOpenDocumentInNewTab)(),o=s?.content.map(({title:e,elements:t,pageId:n,type:s})=>({type:"item",value:n,label:e,secondaryText:t.length.toString(),docType:s}))??[];return n.createElement(n.Fragment,null,n.createElement(r.PopoverHeader,{icon:n.createElement(i.CurrentLocationIcon,{fontSize:"tiny"}),title:n.createElement(u.Stack,{flexDirection:"row",gap:1,alignItems:"center"},n.createElement(u.Box,{"aria-label":"header-title"},(0,m.__)("Locator","elementor")),n.createElement(u.Box,null,n.createElement(u.Chip,{sx:{lineHeight:1},size:"tiny",label:s.total}))),onClose:t}),n.createElement(u.Divider,null),n.createElement(r.PopoverBody,{width:300},n.createElement(r.PopoverMenuList,{onSelect:t=>{l(+t),re({event:"classUsageLocate",classId:e})},items:o,onClose:()=>{},menuListTemplate:et,menuItemContentTemplate:e=>n.createElement(u.Stack,{flexDirection:"row",flex:1,alignItems:"center"},n.createElement(u.Box,{display:"flex",sx:{pr:1}},n.createElement(u.Tooltip,{disableInteractive:!0,title:Xe?.[e.docType]?.label??e.docType,placement:"top"},n.createElement(u.Icon,{fontSize:"small"},Xe?.[e.docType]?.icon||n.createElement(i.PagesIcon,{fontSize:"inherit"})))),n.createElement(u.Box,{sx:{pr:.5,maxWidth:"173px"},display:"flex"},n.createElement(r.EllipsisWithTooltip,{title:e.label,as:u.Typography,variant:"caption",maxWidth:"173px",sx:{lineHeight:1}})),n.createElement(i.ExternalLinkIcon,{className:"hover-only-icon",fontSize:"tiny"}),n.createElement(u.Chip,{sx:{ml:"auto"},size:"tiny",label:e.secondaryText}))})))},et=(0,u.styled)(u.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 tt(){return tt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)({}).hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},tt.apply(null,arguments)}const nt=({id:e,onClick:t})=>{const{data:{total:s},isLoading:a}=Qe(e),l=(0,u.usePopupState)({variant:"popover",popupId:"css-class-usage-popover"});if(a)return null;const r=0!==s?at:lt;return n.createElement(n.Fragment,null,n.createElement(u.Box,{position:"relative",onMouseEnter:()=>{re({event:"classUsageHovered",classId:e,usage:s})}},n.createElement(r,{total:s},n.createElement(st,tt({disabled:0===s,size:"tiny"},(0,u.bindTrigger)(l),{onClick:n=>{0!==s&&((0,u.bindTrigger)(l).onClick(n),t(e),re({event:"classUsageClicked",classId:e}))}}),n.createElement(i.CurrentLocationIcon,{fontSize:"tiny"})))),n.createElement(u.Box,null,n.createElement(u.Popover,tt({anchorOrigin:{vertical:"center",horizontal:"right"},transformOrigin:{vertical:15,horizontal:-50}},(0,u.bindPopover)(l),{onClose:()=>{(0,u.bindPopover)(l).onClose(),t("")}}),n.createElement(Ze,{onClose:l.close,"aria-label":"css-class-usage-popover",cssClassID:e}))))},st=(0,u.styled)(u.IconButton)(({theme:e})=>({"&.Mui-disabled":{pointerEvents:"auto","&:hover":{color:e.palette.action.disabled}},height:"22px",width:"22px"})),at=({children:e,total:t})=>n.createElement(u.Tooltip,{disableInteractive:!0,placement:"top",title:`${(0,m.__)("Show {{number}} {{locations}}","elementor").replace("{{number}}",t.toString()).replace("{{locations}}",1===t?(0,m.__)("location","elementor"):(0,m.__)("locations","elementor"))}`},n.createElement("span",null,e)),lt=({children:e})=>n.createElement(u.Infotip,{disableInteractive:!0,placement:"top",color:"secondary",content:n.createElement(r.InfoAlert,{sx:{mt:1}},(0,m.__)("This class isn’t being used yet.","elementor"))},n.createElement("span",null,e)),rt=(0,n.createContext)(null),ot=({children:e})=>{const[t,s]=(0,n.useState)(null);return n.createElement(rt.Provider,{value:{openDialog:e=>{s(e)},closeDialog:()=>{s(null)},dialogProps:t}},e,!!t&&n.createElement(it,t))},it=({label:e,id:t})=>{const{closeDialog:s}=ct(),{data:{total:a,content:l}}=Qe(t),o=a&&l.length?(0,m.__)("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,m.__)("Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.","elementor");return n.createElement(r.ConfirmationDialog,{open:!0,onClose:s},n.createElement(r.ConfirmationDialog.Title,null,(0,m.__)("Delete this class?","elementor")),n.createElement(r.ConfirmationDialog.Content,null,n.createElement(r.ConfirmationDialog.ContentText,null,(0,m.__)("Deleting","elementor"),n.createElement(u.Typography,{variant:"subtitle2",component:"span"}," ",e," "),o)),n.createElement(r.ConfirmationDialog.Actions,{onClose:s,onConfirm:()=>{s(),(e=>{re({event:"classDeleted",classId:e,runAction:()=>{(0,d.__dispatch)(w.actions.delete(e)),Oe=!0}})})(t)}}))},ct=()=>{const e=(0,n.useContext)(rt);if(!e)throw new Error("useDeleteConfirmation must be used within a DeleteConfirmationProvider");return e};function dt(){return dt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)({}).hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},dt.apply(null,arguments)}const ut=e=>n.createElement(u.UnstableSortableProvider,dt({restrictAxis:!0,variant:"static",dragPlaceholderStyle:{visibility:"hidden"}},e)),mt=e=>n.createElement(pt,dt({},e,{role:"button",className:"class-item-sortable-trigger","aria-label":"sort"}),n.createElement(i.GripVerticalIcon,{fontSize:"tiny"})),ht=({children:e,id:t,style:s,...a})=>n.createElement(u.UnstableSortableItem,dt({},a,{id:t,render:({itemProps:t,isDragged:a,triggerProps:l,itemStyle:r,triggerStyle:o,dropIndicationStyle:i,showDropIndication:c,isDragOverlay:d,isDragPlaceholder:m})=>n.createElement(u.Box,dt({},t,{style:{...r,...d?null:s},component:"li",role:"listitem",sx:{backgroundColor:d?"background.paper":void 0}}),e({itemProps:t,isDragged:a,triggerProps:l,itemStyle:r,triggerStyle:o,isDragPlaceholder:m}),c&&n.createElement(gt,{style:i}))})),pt=(0,u.styled)("div")(({theme:e})=>({position:"absolute",left:0,top:"50%",transform:`translate( -${e.spacing(1.5)}, -50% )`,color:e.palette.action.active})),gt=(0,u.styled)(u.Box)` | |
| 1 | +!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,{init:function(){return Vt}});var n=window.elementorV2.editor,a=window.elementorV2.editorEditingPanel,l=window.elementorV2.editorPanels,r=window.elementorV2.editorStylesRepository,s=window.elementorV2.store,o=window.React,i=window.elementorV2.editorDocuments,c=window.elementorV2.editorUi,d=window.elementorV2.ui,m=window.wp.i18n,u=window.elementorV2.editorStyles,p=window.elementorV2.editorV1Adapters;const h="elementor_global_classes_update_class";var g=window.elementorV2.utils;const y=(0,g.createError)({code:"global_class_not_found",message:"Global class not found."}),f=(0,g.createError)({code:"global_class_label_already_exists",message:"Class with this name already exists."}),b=(0,g.createError)({code:"global_class_tracking_error",message:"Error tracking global classes event."});var v=window.elementorV2.editorProps;function E({value:e,next:t,prev:n}){return{value:e,prev:n||null,next:t||null}}class _{static registry={};static get(e){return _.registry[e]||(_.registry[e]=new _(e)),_.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=E({value:this.transform(e)}),this.current=this.first,this.current.value;const t=E({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 x=_.get("global-classes"),w="globalClasses",S=(0,s.__createSlice)({name:w,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}){x.next(e.data),e.data.items[t.id]=t,e.data.order.unshift(t.id),e.isDirty=!0},delete(e,{payload:t}){x.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}){x.next(e.data),e.data.order=t,e.isDirty=!0},update(e,{payload:t}){x.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}){x.next(e.data),Object.entries(t).forEach(([t,{modified:n}])=>{e.data.items[t].label=n}),e.isDirty=!1},updateProps(e,{payload:t}){const n=e.data.items[t.id];if(!n)throw new y({context:{styleId:t.id}});x.next(e.data);const a=(0,u.getVariantByMeta)(n,t.meta);let l=("custom_css"in t?t.custom_css:a?.custom_css)??null;l=l?.raw?l:null,a?(a.props=(0,v.mergeProps)(a.props,t.props),a.custom_css=l,n.variants=C(n)):n.variants.push({meta:t.meta,props:t.props,custom_css:l}),e.isDirty=!0},reset(e,{payload:{context:t}}){"frontend"===t&&(x.reset(),e.initialData.frontend=e.data,e.isDirty=!1),e.initialData.preview=e.data},undo(e){x.isLast()&&x.next(e.data);const t=x.prev();t?(e.data=t,e.isDirty=!0):e.data=e.initialData.preview},resetToInitialState(e,{payload:{context:t}}){x.reset(),e.data=e.initialData[t],e.isDirty=!1},redo(e){const t=x.next();x.isLast()&&x.prev(),t&&(e.data=t,e.isDirty=!0)}}}),C=e=>e.variants.filter(({props:e,custom_css:t})=>Object.keys(e).length||t?.raw),I=e=>e[w].data,D=e=>e[w].initialData.frontend,T=e=>e[w].initialData.preview,P=(0,s.__createSelector)(I,({order:e})=>e),k=(0,s.__createSelector)(I,({items:e})=>e),O=e=>e[w].isDirty,z=(0,s.__createSelector)(k,P,(e,t)=>t.map(t=>e[t])),M=(e,t)=>e[w].data.items[t]??null,A=(0,s.__createSelector)(I,({items:e})=>Object.values(e).filter(e=>0===e.variants.length));var B=window.elementorV2.mixpanel,j=window.elementorV2.httpClient;const L="/global-classes",V="elementor/v1",W=`${L}/usage`,F={usage:()=>(0,j.httpService)().get(`${V}${W}`),all:(e="preview")=>(0,j.httpService)().get(`${V}${L}`,{params:{context:e}}),publish:e=>(0,j.httpService)().put("elementor/v1"+L,e,{params:{context:"frontend"}}),saveDraft:e=>(0,j.httpService)().put("elementor/v1"+L,e,{params:{context:"preview"}})},$={DUPLICATED_LABEL:"DUPLICATED_LABEL"},U=async()=>{const e=await F.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},G=async e=>{const{runAction:t}=e,n=await H(e);n&&(q(n),"classCreated"===n.event&&"classId"in n&&R(n.classId)),t?.()},R=async e=>{const t=await Q(e);q({event:"classApplied",classId:e,...t,totalInstancesAfterApply:1})},H=async e=>{switch(e.event){case"classApplied":if("classId"in e&&e.classId){const t=await Q(e.classId);return{...e,...t}}break;case"classRemoved":if("classId"in e&&e.classId){const t=X(e.classId);return{...e,...t}}break;case"classDeleted":if("classId"in e&&e.classId){const t=await K(e.classId);return{...e,...t}}break;case"classCreated":return"source"in e&&"created"!==e.source&&"classId"in e&&e.classId?{...e,classTitle:Y(e.classId).label}:e;case"classStateClicked":if("classId"in e&&e.classId)return{...e,classTitle:Y(e.classId).label};break;default:return e}},q=e=>{const{dispatchEvent:t,config:n}=(0,B.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:l,...r}=e;try{t?.(a,{event:l,properties:{...r}})}catch(e){throw new b({cause:e})}},N=e=>({classTitle:Y(e).label}),Y=e=>{const t=M((0,s.__getState)(),e);if(!t)throw new Error(`CSS class with ID ${e} not found`);return t},K=async e=>({totalInstances:await J(e),classTitle:Y(e).label}),J=async e=>{const t=await U();return t[e]?.total??1},Q=async e=>{const{classTitle:t}=N(e);return{classTitle:t,totalInstancesAfterApply:await J(e)+1}},X=e=>{const{classTitle:t}=N(e);return{classTitle:t}},Z="global-classes",ee=(0,r.createStylesProvider)({key:Z,priority:30,limit:100,labels:{singular:(0,m.__)("class","elementor"),plural:(0,m.__)("classes","elementor")},subscribe:e=>te(e),capabilities:(()=>{if((0,p.isExperimentActive)("global_classes_should_enforce_capabilities"))return{update:h,create:h,delete:h,updateProps:h}})(),actions:{all:()=>{const e=z((0,s.__getState)());return localStorage.setItem("elementor-global-classes",JSON.stringify(e)),e},get:e=>M((0,s.__getState)(),e),resolveCssName:e=>M((0,s.__getState)(),e)?.label??e,create:(e,t=[])=>{const n=k((0,s.__getState)());if(Object.values(n).map(e=>e.label).includes(e))throw new f({context:{label:e}});const a=Object.keys(n),l=(0,u.generateId)("g-",a);return(0,s.__dispatch)(S.actions.add({id:l,type:"class",label:e,variants:t})),l},update:e=>{(0,s.__dispatch)(S.actions.update({style:e}))},delete:e=>{(0,s.__dispatch)(S.actions.delete(e))},updateProps:e=>{(0,s.__dispatch)(S.actions.updateProps({id:e.id,meta:e.meta,props:e.props}))},updateCustomCss:e=>{(0,s.__dispatch)(S.actions.updateProps({id:e.id,meta:e.meta,custom_css:e.custom_css,props:{}}))},tracking:e=>{G(e).catch(e=>{throw new b({cause:e})})}}}),te=e=>{let t=I((0,s.__getState)());return(0,s.__subscribeWithSelector)(e=>e.globalClasses,n=>{e(t.items,n.data.items),t=n.data})};var ne=window.elementorV2.query;const ae="css-classes-usage";function le(){const e=(0,ne.useQueryClient)();return{prefetchClassesUsage:()=>e.prefetchQuery({queryKey:[ae],queryFn:U})}}const re=()=>{const{prefetchClassesUsage:e}=le();return e(),null};var se=window.elementorV2.icons;const oe=()=>(0,s.__useSelector)(P),ie=()=>(0,s.__useSelector)(O),ce=(0,o.createContext)(void 0),de={empty:!1,onThisPage:!1,unused:!1},me=({children:e})=>{const[t,n]=o.useState(de),{debouncedValue:a,inputValue:l,handleChange:r}=(0,g.useDebounceState)({delay:300,initialValue:(()=>{const e=localStorage.getItem("elementor-global-classes-search");return e?(localStorage.removeItem("elementor-global-classes-search"),e):""})()});return o.createElement(ce.Provider,{value:{search:{debouncedValue:a,inputValue:l,handleChange:r,onClearSearch:()=>{r("")}},filters:{filters:t,setFilters:n,onClearFilter:()=>{n(de)}}}},e)},ue=()=>{const e=(0,o.useContext)(ce);if(!e)throw new Error("useSearchContext must be used within a SearchContextProvider");return e},pe=()=>(0,ne.useQuery)({queryKey:[ae],queryFn:U,refetchOnMount:!1,refetchOnWindowFocus:!0}),he={empty:[],onThisPage:[],unused:[]},ge=()=>{const e=(0,i.__useActiveDocument)(),t=(0,s.__useSelector)(A),{data:n,isLoading:a}=pe(),l=(()=>{const e=(0,s.__useSelector)(k);return Object.keys(e)})(),r=(0,o.useMemo)(()=>t.map(({id:e})=>e),[t]),c=(0,o.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]),d=(0,o.useMemo)(()=>n?((e,t)=>{const n=new Set(e);return t.filter(e=>!n.has(e))})(Object.keys(n),l):[],[n,l]);return!a&&n&&e?{onThisPage:c,unused:d,empty:r}:he},ye=()=>{const{filters:{filters:e}}=ue(),t=ge();return(0,o.useMemo)(()=>{const n=Object.entries(e).filter(([,e])=>e);return 0===n.length?null:n.reduce((e,[n],a)=>{const l=t[n]||[];return 0===a?l:e.filter(e=>l.includes(e))},[])},[e,t])},fe="DUP_",be=({modifiedLabels:e,onApprove:t})=>o.createElement(o.Fragment,null,o.createElement(d.DialogHeader,{logo:!1},o.createElement(d.Box,{display:"flex",alignItems:"center",gap:1},o.createElement(d.Icon,{color:"secondary"},o.createElement(se.InfoCircleFilledIcon,{fontSize:"medium"})),o.createElement(d.Typography,{variant:"subtitle1"},(0,m.__)("We've published your page and updated class names.","elementor")))),o.createElement(d.DialogContent,null,o.createElement(d.Stack,{spacing:2,direction:"column"},o.createElement(d.Typography,{variant:"body2"},(0,m.__)("Some new classes used the same names as existing ones. To prevent conflicts, we added the prefix","elementor"),o.createElement("strong",null," ",fe)),o.createElement(d.Box,null,o.createElement(d.Box,{sx:{width:"100%",display:"flex",gap:2,alignItems:"flex-start"}},o.createElement(d.Typography,{variant:"subtitle2",sx:{fontWeight:"bold",flex:1,flexShrink:1,flexGrow:1,minWidth:0}},(0,m.__)("Before","elementor")),o.createElement(d.Typography,{variant:"subtitle2",sx:{minWidth:"200px",fontWeight:"bold",flexShrink:0,flexGrow:0,width:"200px",maxWidth:"200px"}},(0,m.__)("After","elementor"))),o.createElement(d.Divider,{sx:{mt:.5,mb:.5}}),o.createElement(d.Stack,{direction:"column",gap:.5,sx:{pb:2}},Object.values(e).map(({original:e,modified:t},n)=>o.createElement(d.Box,{key:n,sx:{width:"100%",display:"flex",gap:2,alignItems:"flex-start"}},o.createElement(d.Box,{sx:{flex:1,flexShrink:1,flexGrow:1,minWidth:0}},o.createElement(c.EllipsisWithTooltip,{title:e},o.createElement(d.Typography,{variant:"body2",sx:{color:"text.secondary"}},e))),o.createElement(d.Box,{sx:{minWidth:"200px",flexShrink:0,flexGrow:0,width:"200px",maxWidth:"200px"}},o.createElement(c.EllipsisWithTooltip,{title:t},o.createElement(d.Typography,{variant:"body2",sx:{color:"text.primary"}},t)))))),o.createElement(d.Box,null,o.createElement(d.Alert,{severity:"info",size:"small",color:"secondary"},o.createElement("strong",null,(0,m.__)("Your designs and classes are safe.","elementor")),(0,m.__)("Only the prefixes were added. Find them in Class Manager by searching","elementor"),o.createElement("strong",null,fe)))))),o.createElement(d.DialogActions,null,o.createElement(d.Button,{color:"secondary",variant:"text",onClick:()=>{localStorage.setItem("elementor-global-classes-search",fe),t?.(),(0,c.closeDialog)()}},(0,m.__)("Go to Class Manager","elementor")),o.createElement(d.Button,{color:"secondary",variant:"contained",onClick:c.closeDialog},(0,m.__)("Done","elementor"))));async function ve({context:e,onApprove:t}){const n=I((0,s.__getState)()),a="preview"===e?F.saveDraft:F.publish,l="preview"===e?T:D,r=await a({items:n.items,order:n.order,changes:Ee(n,l((0,s.__getState)()))});(0,s.__dispatch)(S.actions.reset({context:e})),r?.data?.data?.code===$.DUPLICATED_LABEL&&((0,s.__dispatch)(S.actions.updateMultiple(r.data.data.modifiedLabels)),G({event:"classPublishConflict",numOfConflicts:Object.keys(r.data.data.modifiedLabels).length}),(0,c.openDialog)({component:o.createElement(be,{modifiedLabels:r.data.data.modifiedLabels||[],onApprove:t})}))}function Ee(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,g.hash)(e.items[n])!==(0,g.hash)(t.items[n]))}}const _e=({tooltipText:e,sx:t,trigger:n})=>{const{filters:{onClearFilter:a}}=ue();return o.createElement(d.Tooltip,{title:e,placement:"top",disableInteractive:!0},o.createElement(d.Box,null,o.createElement(xe,{"aria-label":e,size:"tiny",onClick:()=>{a(n),G({event:"classManagerFilterCleared",trigger:n})},sx:t},o.createElement(se.BrushBigIcon,{fontSize:"tiny"}))))},xe=(0,d.styled)(d.IconButton)(({theme:e})=>({"&.Mui-disabled":{pointerEvents:"auto","&:hover":{color:e.palette.action.disabled}}})),we={unused:(0,m.__)("Unused","elementor"),empty:(0,m.__)("Empty","elementor"),onThisPage:(0,m.__)("On this page","elementor")},Se=()=>{const{filters:{filters:e,setFilters:t}}=ue(),n=ge(),a=n=>{t(e=>({...e,[n]:!e[n]})),G({event:"classManagerFilterUsed",action:e[n]?"remove":"apply",type:n,trigger:"menu"})};return o.createElement(d.MenuList,null,o.createElement(d.MenuItem,{onClick:()=>a("unused")},o.createElement(Ce,{label:we.unused,checked:e.unused,suffix:o.createElement(d.Chip,{size:"tiny",sx:{ml:"auto"},label:n.unused.length})})),o.createElement(d.MenuItem,{onClick:()=>a("empty")},o.createElement(Ce,{label:we.empty,checked:e.empty,suffix:o.createElement(d.Chip,{size:"tiny",sx:{ml:"auto"},label:n.empty.length})})),o.createElement(d.MenuItem,{onClick:()=>a("onThisPage")},o.createElement(Ce,{label:we.onThisPage,checked:e.onThisPage,suffix:o.createElement(d.Chip,{size:"tiny",sx:{ml:"auto"},label:n.onThisPage.length})})))},Ce=({label:e,suffix:t,checked:n})=>o.createElement(d.Stack,{direction:"row",alignItems:"center",gap:.5,flex:1},o.createElement(d.Checkbox,{size:"small",checked:n,sx:{padding:0,color:"text.tertiary","&.Mui-checked":{color:"text.tertiary"}}}),o.createElement(d.Typography,{variant:"caption",sx:{color:"text.secondary"}},e),t),Ie=()=>{const{filters:{filters:e,setFilters:t}}=ue(),n=Object.keys(e).filter(t=>e[t]),a=n.length>0;return o.createElement(d.Stack,{direction:"row",alignItems:"center",justifyContent:"space-between"},o.createElement(d.Stack,{direction:"row",gap:.5,alignItems:"center",flexWrap:"wrap"},n.map(e=>o.createElement(d.Chip,{key:e,label:we[e],onDelete:()=>(e=>{t(t=>({...t,[e]:!1})),G({event:"classManagerFilterUsed",action:"remove",type:e,trigger:"header"})})(e),sx:De,size:"tiny"}))),a&&o.createElement(_e,{trigger:"header",tooltipText:(0,m.__)("Clear Filters","elementor"),sx:{margin:"0 0 auto auto"}}))},De={"& .MuiChip-deleteIcon":{display:"none",transition:"opacity 0.2s"},"&:hover .MuiChip-deleteIcon":{display:"block"}};function Te(){return Te=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},Te.apply(null,arguments)}const Pe=()=>{const{filters:{filters:e}}=ue(),t=(0,d.usePopupState)({variant:"popover",disableAutoFocus:!0});o.useEffect(()=>{t.isOpen&&G({event:"classManagerFiltersOpened"})},[t.isOpen]);const n=Object.values(e).some(e=>e);return o.createElement(o.Fragment,null,o.createElement(d.Tooltip,{title:(0,m.__)("Filters","elementor"),placement:"top"},o.createElement(d.ToggleButton,Te({value:"filter",size:"tiny",selected:t.isOpen},(0,d.bindToggle)(t)),o.createElement(se.FilterIcon,{fontSize:"tiny"}))),o.createElement(d.Popover,Te({sx:{maxWidth:"344px"},anchorOrigin:{vertical:"top",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:-21}},(0,d.bindPopover)(t)),o.createElement(c.PopoverHeader,{actions:n?[o.createElement(_e,{trigger:"menu",key:"clear-all-button",tooltipText:(0,m.__)("Clear all","elementor")})]:[],onClose:t.close,title:(0,m.__)("Filters","elementor"),icon:o.createElement(se.FilterIcon,{fontSize:"tiny"})}),o.createElement(d.Divider,{sx:{borderWidth:"1px 0 0 0"}}),o.createElement(c.PopoverBody,{width:344,height:125},o.createElement(Se,null))))},ke=()=>{const{search:{inputValue:e,handleChange:t}}=ue();return o.createElement(d.Stack,{direction:"row",gap:.5,sx:{width:"100%"}},o.createElement(d.Box,{sx:{flexGrow:1}},o.createElement(d.TextField,{role:"search",fullWidth:!0,size:"tiny",value:e,onFocus:()=>{G({event:"classManagerSearched"})},placeholder:(0,m.__)("Search","elementor"),onChange:e=>t(e.target.value),InputProps:{startAdornment:o.createElement(d.InputAdornment,{position:"start"},o.createElement(se.SearchIcon,{fontSize:"tiny"}))}})))};var Oe=window.elementorV2.editorCurrentUser;const ze=()=>{const[e,t]=(0,Oe.useSuppressedMessage)("global-class-manager"),[n,a]=(0,o.useState)(!e);return o.createElement(c.IntroductionModal,{open:n,title:(0,m.__)("Class Manager","elementor"),handleClose:e=>{e||t(),a(!1)}},o.createElement(d.Image,{sx:{width:"100%",aspectRatio:"16 / 9"},src:"https://assets.elementor.com/packages/v1/images/class-manager-intro.svg",alt:""}),o.createElement(Me,null))},Me=()=>o.createElement(d.Box,{p:3},o.createElement(d.Typography,{variant:"body2"},(0,m.__)("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")),o.createElement("br",null),o.createElement(d.Typography,{variant:"body2"},(0,m.__)("Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.","elementor")));let Ae=!1;function Be(){return Be=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},Be.apply(null,arguments)}const je=({sx:e,...t})=>o.createElement(se.ColorSwatchIcon,Be({sx:{transform:"rotate(90deg)",...e}},t)),Le=()=>(0,s.__useSelector)(z),Ve={total:0,content:[]},We=e=>{const{data:t,...n}=pe();return{...n,data:t?.[e]??Ve}},Fe={"wp-post":{label:(0,m.__)("Post","elementor"),icon:o.createElement(se.PostTypeIcon,{fontSize:"inherit"})},"wp-page":{label:(0,m.__)("Page","elementor"),icon:o.createElement(se.PagesIcon,{fontSize:"inherit"})},popup:{label:(0,m.__)("Popup","elementor"),icon:o.createElement(se.PopupTemplateIcon,{fontSize:"inherit"})},header:{label:(0,m.__)("Header","elementor"),icon:o.createElement(se.HeaderTemplateIcon,{fontSize:"inherit"})},footer:{label:(0,m.__)("Footer","elementor"),icon:o.createElement(se.FooterTemplateIcon,{fontSize:"inherit"})}},$e=({cssClassID:e,onClose:t})=>{const{data:n}=We(e),a=(0,i.__useOpenDocumentInNewTab)(),l=n?.content.map(({title:e,elements:t,pageId:n,type:a})=>({type:"item",value:n,label:e,secondaryText:t.length.toString(),docType:a}))??[];return o.createElement(o.Fragment,null,o.createElement(c.PopoverHeader,{icon:o.createElement(se.CurrentLocationIcon,{fontSize:"tiny"}),title:o.createElement(d.Stack,{flexDirection:"row",gap:1,alignItems:"center"},o.createElement(d.Box,{"aria-label":"header-title"},(0,m.__)("Locator","elementor")),o.createElement(d.Box,null,o.createElement(d.Chip,{sx:{lineHeight:1},size:"tiny",label:n.total}))),onClose:t}),o.createElement(d.Divider,null),o.createElement(c.PopoverBody,{width:300},o.createElement(c.PopoverMenuList,{onSelect:t=>{a(+t),G({event:"classUsageLocate",classId:e})},items:l,onClose:()=>{},menuListTemplate:Ue,menuItemContentTemplate:e=>o.createElement(d.Stack,{flexDirection:"row",flex:1,alignItems:"center"},o.createElement(d.Box,{display:"flex",sx:{pr:1}},o.createElement(d.Tooltip,{disableInteractive:!0,title:Fe?.[e.docType]?.label??e.docType,placement:"top"},o.createElement(d.Icon,{fontSize:"small"},Fe?.[e.docType]?.icon||o.createElement(se.PagesIcon,{fontSize:"inherit"})))),o.createElement(d.Box,{sx:{pr:.5,maxWidth:"173px"},display:"flex"},o.createElement(c.EllipsisWithTooltip,{title:e.label,as:d.Typography,variant:"caption",maxWidth:"173px",sx:{lineHeight:1}})),o.createElement(se.ExternalLinkIcon,{className:"hover-only-icon",fontSize:"tiny"}),o.createElement(d.Chip,{sx:{ml:"auto"},size:"tiny",label:e.secondaryText}))})))},Ue=(0,d.styled)(d.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 Ge(){return Ge=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},Ge.apply(null,arguments)}const Re=({id:e,onClick:t})=>{const{data:{total:n},isLoading:a}=We(e),l=(0,d.usePopupState)({variant:"popover",popupId:"css-class-usage-popover"});if(a)return null;const r=0!==n?qe:Ne;return o.createElement(o.Fragment,null,o.createElement(d.Box,{position:"relative",onMouseEnter:()=>{G({event:"classUsageHovered",classId:e,usage:n})}},o.createElement(r,{total:n},o.createElement(He,Ge({disabled:0===n,size:"tiny"},(0,d.bindTrigger)(l),{onClick:a=>{0!==n&&((0,d.bindTrigger)(l).onClick(a),t(e),G({event:"classUsageClicked",classId:e}))}}),o.createElement(se.CurrentLocationIcon,{fontSize:"tiny"})))),o.createElement(d.Box,null,o.createElement(d.Popover,Ge({anchorOrigin:{vertical:"center",horizontal:"right"},transformOrigin:{vertical:15,horizontal:-50}},(0,d.bindPopover)(l),{onClose:()=>{(0,d.bindPopover)(l).onClose(),t("")}}),o.createElement($e,{onClose:l.close,"aria-label":"css-class-usage-popover",cssClassID:e}))))},He=(0,d.styled)(d.IconButton)(({theme:e})=>({"&.Mui-disabled":{pointerEvents:"auto","&:hover":{color:e.palette.action.disabled}},height:"22px",width:"22px"})),qe=({children:e,total:t})=>o.createElement(d.Tooltip,{disableInteractive:!0,placement:"top",title:`${(0,m.__)("Show {{number}} {{locations}}","elementor").replace("{{number}}",t.toString()).replace("{{locations}}",1===t?(0,m.__)("location","elementor"):(0,m.__)("locations","elementor"))}`},o.createElement("span",null,e)),Ne=({children:e})=>o.createElement(d.Infotip,{disableInteractive:!0,placement:"top",color:"secondary",content:o.createElement(c.InfoAlert,{sx:{mt:1}},(0,m.__)("This class isn’t being used yet.","elementor"))},o.createElement("span",null,e)),Ye=(0,o.createContext)(null),Ke=({children:e})=>{const[t,n]=(0,o.useState)(null);return o.createElement(Ye.Provider,{value:{openDialog:e=>{n(e)},closeDialog:()=>{n(null)},dialogProps:t}},e,!!t&&o.createElement(Qe,t))},Je="delete-class-dialog",Qe=({label:e,id:t})=>{const{closeDialog:n}=Xe(),{data:{total:a,content:l}}=We(t),r=a&&l.length?(0,m.__)("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,m.__)("Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.","elementor");return o.createElement(d.Dialog,{open:!0,onClose:n,"aria-labelledby":Je,maxWidth:"xs"},o.createElement(d.DialogTitle,{id:Je,display:"flex",alignItems:"center",gap:1,sx:{lineHeight:1}},o.createElement(se.AlertOctagonFilledIcon,{color:"error"}),(0,m.__)("Delete this class?","elementor")),o.createElement(d.DialogContent,null,o.createElement(d.DialogContentText,{variant:"body2",color:"textPrimary"},(0,m.__)("Deleting","elementor"),o.createElement(d.Typography,{variant:"subtitle2",component:"span"}," ",e," "),r)),o.createElement(d.DialogActions,null,o.createElement(d.Button,{color:"secondary",onClick:n},(0,m.__)("Not now","elementor")),o.createElement(d.Button,{autoFocus:!0,variant:"contained",color:"error",onClick:()=>{n(),(e=>{G({event:"classDeleted",classId:e,runAction:()=>{(0,s.__dispatch)(S.actions.delete(e)),Ae=!0}})})(t)}},(0,m.__)("Delete","elementor"))))},Xe=()=>{const e=(0,o.useContext)(Ye);if(!e)throw new Error("useDeleteConfirmation must be used within a DeleteConfirmationProvider");return e};function Ze(){return Ze=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},Ze.apply(null,arguments)}const et=e=>o.createElement(d.UnstableSortableProvider,Ze({restrictAxis:!0,variant:"static",dragPlaceholderStyle:{opacity:"1"}},e)),tt=e=>o.createElement(at,Ze({},e,{role:"button",className:"class-item-sortable-trigger","aria-label":"sort"}),o.createElement(se.GripVerticalIcon,{fontSize:"tiny"})),nt=({children:e,id:t,...n})=>o.createElement(d.UnstableSortableItem,Ze({},n,{id:t,render:({itemProps:t,isDragged:n,triggerProps:a,itemStyle:l,triggerStyle:r,dropIndicationStyle:s,showDropIndication:i,isDragOverlay:c,isDragPlaceholder:m})=>o.createElement(d.Box,Ze({},t,{style:l,component:"li",role:"listitem",sx:{backgroundColor:c?"background.paper":void 0}}),e({itemProps:t,isDragged:n,triggerProps:a,itemStyle:l,triggerStyle:r,isDragPlaceholder:m}),i&&o.createElement(lt,{style:s}))})),at=(0,d.styled)("div")(({theme:e})=>({position:"absolute",left:0,top:"50%",transform:`translate( -${e.spacing(1.5)}, -50% )`,color:e.palette.action.active})),lt=(0,d.styled)(d.Box)` | |
| 2 | 2 | width: 100%; |
| 3 | 3 | height: 1px; |
| 4 | 4 | background-color: ${({theme:e})=>e.palette.text.primary}; |
| 5 | -`;function ft(){return ft=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)({}).hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},ft.apply(null,arguments)}const yt=({id:e,label:t,renameClass:s,selected:a,disabled:l,sortableTriggerProps:o,showSortIndicator:c,syncToV3:d,onToggleSync:h})=>{const p=(0,n.useRef)(null),{ref:g,openEditMode:f,isEditing:y,error:b,getProps:v}=(0,r.useEditable)({value:t,onSubmit:s,validation:_t}),[E,_]=(0,n.useState)(""),{openDialog:w}=ct(),S=(0,u.usePopupState)({variant:"popover",disableAutoFocus:!0}),x=(E===e||a||S.isOpen)&&!l;return n.createElement(n.Fragment,null,n.createElement(u.Stack,{p:0},n.createElement(r.WarningInfotip,{open:Boolean(b),text:b??"",placement:"bottom",width:p.current?.getBoundingClientRect().width,offset:[0,-15]},n.createElement(bt,{ref:p,dense:!0,disableGutters:!0,showSortIndicator:c,showActions:x||y,shape:"rounded",onDoubleClick:f,selected:x,disabled:l,focusVisibleClassName:"visible-class-item"},n.createElement(mt,o),n.createElement(vt,{isActive:y,isError:!!b},y?n.createElement(r.EditableField,ft({ref:g,as:u.Typography,variant:"caption"},v())):n.createElement(r.EllipsisWithTooltip,{title:t,as:u.Typography,variant:"caption"})),n.createElement(u.Box,{className:"class-item-locator"},n.createElement(nt,{id:e,onClick:_})),n.createElement(u.Tooltip,{placement:"top",className:"class-item-more-actions",title:(0,m.__)("More actions","elementor")},n.createElement(u.IconButton,ft({size:"tiny"},(0,u.bindTrigger)(S),{"aria-label":"More actions"}),n.createElement(i.DotsVerticalIcon,{fontSize:"tiny"})))))),n.createElement(u.Menu,ft({},(0,u.bindMenu)(S),{anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"}}),n.createElement(r.MenuListItem,{sx:{minWidth:"160px"},onClick:()=>{S.close(),f()}},n.createElement(u.Typography,{variant:"caption",sx:{color:"text.primary"}},(0,m.__)("Rename","elementor"))),h&&n.createElement(r.MenuListItem,{onClick:()=>{S.close(),h(e,!d)}},n.createElement(u.Stack,{direction:"row",alignItems:"center",gap:1},d?n.createElement(i.RefreshOffIcon,{fontSize:"tiny"}):n.createElement(i.RefreshIcon,{fontSize:"tiny"}),n.createElement(u.Typography,{variant:"caption",sx:{color:"text.primary"}},d?(0,m.__)("Stop syncing to Global Fonts","elementor"):(0,m.__)("Sync to Global Fonts","elementor")))),n.createElement(r.MenuListItem,{onClick:()=>{S.close(),w({id:e,label:t})}},n.createElement(u.Typography,{variant:"caption",sx:{color:"error.light"}},(0,m.__)("Delete","elementor")))))},bt=(0,u.styled)(u.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 `),vt=(0,u.styled)(u.Box,{shouldForwardProp:e=>!["isActive","isError"].includes(e)})(({theme:e,isActive:t,isError:n})=>({display:"flex",width:"100%",flexGrow:1,borderRadius:e.spacing(.5),border:Et({isActive:t,isError:n,theme:e}),padding:`0 ${e.spacing(1)}`,marginLeft:t?e.spacing(1):0,minWidth:0})),Et=({isActive:e,isError:t,theme:n})=>t?`2px solid ${n.palette.error.main}`:e?`2px solid ${n.palette.secondary.main}`:"none",_t=e=>{const t=(0,Ye.validateStyleLabel)(e,"rename");return t.isValid?null:t.errorMessage};function wt(){return wt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)({}).hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},wt.apply(null,arguments)}const St={filterAndSearch:{mainText:(0,m.__)("Sorry, nothing matched.","elementor"),sceneryText:(0,m.__)("Try something else.","elementor"),icon:n.createElement(i.PhotoIcon,{color:"inherit",fontSize:"large"})},search:{mainText:(0,m.__)("Sorry, nothing matched","elementor"),sceneryText:(0,m.__)("Clear your input and try something else.","elementor"),icon:n.createElement(i.PhotoIcon,{color:"inherit",fontSize:"large"})},filter:{mainText:(0,m.__)("Sorry, nothing matched that search.","elementor"),sceneryText:(0,m.__)("Clear the filters and try something else.","elementor"),icon:n.createElement(i.ColorSwatchIcon,{color:"inherit",fontSize:"large"})}},xt=({notFoundType:e})=>{const{search:{onClearSearch:t,inputValue:s},filters:{onClearFilter:a}}=W();switch(e){case"filter":return n.createElement(Ct,wt({},St.filter,{onClear:a}));case"search":return n.createElement(Ct,wt({},St.search,{searchValue:s,onClear:t}));case"filterAndSearch":return n.createElement(Ct,wt({},St.filterAndSearch,{onClear:()=>{a(),t()}}))}},Ct=({onClear:e,searchValue:t,mainText:s,sceneryText:a,icon:l})=>n.createElement(u.Stack,{color:"text.secondary",pt:5,alignItems:"center",gap:1,overflow:"hidden",justifySelf:"center"},l,n.createElement(u.Box,{sx:{width:"100%"}},n.createElement(u.Typography,{align:"center",variant:"subtitle2",color:"inherit"},s),t&&n.createElement(u.Typography,{variant:"subtitle2",color:"inherit",sx:{display:"flex",width:"100%",justifyContent:"center"}},n.createElement("span",null,"“"),n.createElement("span",{style:{maxWidth:"80%",overflow:"hidden",textOverflow:"ellipsis"}},t),n.createElement("span",null,"”."))),n.createElement(u.Typography,{align:"center",variant:"caption",color:"inherit"},a),n.createElement(u.Typography,{align:"center",variant:"caption",color:"inherit"},n.createElement(u.Link,{color:"secondary",variant:"caption",component:"button",onClick:e},(0,m.__)("Clear & try again","elementor")))),It=({disabled:e,scrollElement:t,onStopSyncRequest:s,onStartSyncRequest:a})=>{const{search:{debouncedValue:l}}=W(),r=Ke(),o=(0,d.__useDispatch)(),i=ne(),[c,m]=(0,n.useState)(null),h=r.find(e=>e.id===c)?.label??"",[p,g]=Ot(c,m,h??""),f=kt(),y=(b={count:f.length,getScrollElement:()=>t??null,estimateSize:()=>40,overscan:6,getItemKey:e=>f[e].id,rangeExtractor:e=>{const t=new Set(Re(e));if(c){const e=f.findIndex(e=>e.id===c);e>=0&&t.add(e)}return[...t].sort((e,t)=>e-t)}},function({useFlushSync:e=!0,...t}){const s=n.useReducer(()=>({}),{})[1],a={...t,onChange:(n,a)=>{var l;e&&a?(0,Me.flushSync)(s):s(),null==(l=t.onChange)||l.call(t,n,a)}},[l]=n.useState(()=>new qe(a));return l.setOptions(a),He(()=>l._didMount(),[]),He(()=>l._willUpdate()),l}({observeElementRect:Ve,observeElementOffset:$e,scrollToFn:Ge,...b}));var b;if((0,n.useEffect)(()=>{const e=e=>{if("z"===e.key&&(e.ctrlKey||e.metaKey)){if(e.stopImmediatePropagation(),e.preventDefault(),e.shiftKey)return void o(w.actions.redo());o(w.actions.undo())}};return window.addEventListener("keydown",e,{capture:!0}),()=>window.removeEventListener("keydown",e)},[o]),!r?.length)return n.createElement(Dt,null);const v=((e,t,n)=>{const s=n.length<=0&&e.length>1,a=t&&0===t.length;return s&&a?"filterAndSearch":s?"search":a?"filter":void 0})(l,i,f);if(v)return n.createElement(xt,{notFoundType:v});const E=i?.length||l,_=f.length>1&&!E;return n.createElement(ot,null,n.createElement(u.List,{sx:{position:"relative",display:"block",height:y.getTotalSize(),padding:0}},n.createElement(ut,{value:p,onChange:g,onDragStart:e=>m(e.active.id),onDragEnd:()=>m(null),onDragCancel:()=>m(null),disableDragOverlay:!_},y.getVirtualItems().map(t=>{const l=f[t.index];return n.createElement(ht,{key:t.key,id:l.id,style:{position:"absolute",top:t.start,left:0,width:"100%"}},({isDragged:t,isDragPlaceholder:r,triggerProps:i,triggerStyle:c})=>n.createElement(yt,{id:l.id,label:l.label,renameClass:e=>{re({event:"classRenamed",classId:l.id,oldValue:l.label,newValue:e,source:"class-manager"}),o(w.actions.update({style:{id:l.id,label:e}}))},selected:t,disabled:e||r,sortableTriggerProps:{...i,style:c},showSortIndicator:_,syncToV3:l.sync_to_v3,onToggleSync:(e,t)=>{!t&&s?s(e):t&&a?a(e):o(w.actions.update({style:{id:e,sync_to_v3:t}}))}}))}))))},Dt=()=>n.createElement(u.Stack,{alignItems:"center",gap:1.5,pt:10,px:.5,maxWidth:"260px",margin:"auto"},n.createElement(Pe,{fontSize:"large"}),n.createElement(Tt,{variant:"subtitle2",component:"h2",color:"text.secondary"},(0,m.__)("There are no global classes yet.","elementor")),n.createElement(u.Typography,{align:"center",variant:"caption",color:"text.secondary"},(0,m.__)("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"))),Tt=(0,u.styled)(u.Typography)(({theme:e,variant:t})=>({"&.MuiTypography-root":{...e.typography[t]}})),Ot=(e,t,n)=>{const s=(0,d.__useDispatch)();return[F(),a=>{s(w.actions.setOrder(a)),e&&(re({event:"classManagerReorder",classId:e,classTitle:n}),t(null))}]},kt=()=>{const e=Ke(),{search:{debouncedValue:t}}=W(),s=ne(),a=(0,n.useMemo)(()=>e.map(e=>({...e,lowerLabel:e.label.toLowerCase()})),[e]),l=(0,n.useMemo)(()=>{const n=t.replace(/[^a-zA-Z0-9_-]/g,"").toLowerCase();return n.length>1?a.filter(e=>e.lowerLabel.includes(n)):e},[t,e,a]);return(0,n.useMemo)(()=>s&&s.length>0?l.filter(e=>s.includes(e.id)):l,[l,s])};function Pt(){const e=window;e.$e?.components?.get?.("panel")?.blockUserInteractions?.()}function Mt(){const e=window;e.$e?.components?.get?.("panel")?.unblockUserInteractions?.()}const zt=({externalOpen:e,classId:t,onExternalClose:s,onConfirm:a}={})=>{const[l,r]=(0,n.useState)(!0),o=(0,n.useRef)(!1);(0,n.useEffect)(()=>{e&&t&&!o.current&&(o.current=!0,re({event:"classSyncToV3PopupShown",classId:t})),e||(o.current=!1)},[e,t]);const i=()=>{t&&re({event:"classSyncToV3PopupClick",classId:t,action:"cancel"}),s?.()};return n.createElement(u.Dialog,{open:!!e,onClose:i,maxWidth:"sm",fullWidth:!0},n.createElement(u.DialogContent,{sx:{p:0}},n.createElement(u.Box,{component:"img",src:"https://assets.elementor.com/packages/v1/images/class-manager-sync-modal.png",alt:"",sx:{width:"100%",display:"block"}}),n.createElement(u.Box,{sx:{px:3,pt:4,pb:1}},n.createElement(u.Typography,{variant:"h6"},(0,m.__)("Sync class to Global Fonts","elementor")),n.createElement(u.Typography,{variant:"body2",color:"secondary",sx:{mb:2,pt:1}},(0,m.__)("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")))),n.createElement(u.DialogActions,{sx:{justifyContent:"space-between",px:3,pb:2}},n.createElement(u.FormControlLabel,{control:n.createElement(u.Checkbox,{checked:!l,onChange:e=>r(!e.target.checked)}),label:n.createElement(u.Typography,{variant:"body2",color:"secondary"},(0,m.__)("Don't show again","elementor"))}),n.createElement(u.Box,{sx:{display:"flex",gap:1}},n.createElement(u.Button,{onClick:i,color:"secondary",size:"small"},(0,m.__)("Cancel","elementor")),n.createElement(u.Button,{onClick:()=>{t&&re({event:"classSyncToV3PopupClick",classId:t,action:"sync"}),a?.(),s?.()},variant:"contained",size:"small"},(0,m.__)("Sync to Global Fonts","elementor")))))};function At(){return At=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var s in n)({}).hasOwnProperty.call(n,s)&&(e[s]=n[s])}return e},At.apply(null,arguments)}const Lt="stop-sync-class",Ft="global-classes-manager";function jt({onRequestClose:e,onExposeCloseAttempt:t}){return n.createElement(Bt,{embedded:!0,onRequestClose:e,onExposeCloseAttempt:t})}const{panel:Rt,usePanelActions:Vt}=(0,l.__createPanel)({id:Ft,component:function(){return n.createElement(Bt,null)},allowedEditModes:["edit",Ft],onOpen:()=>{(0,o.changeEditMode)(Ft),Pt()},onClose:async()=>{(0,o.changeEditMode)("edit"),await(0,a.reloadCurrentDocument)(),Mt()},isOpenPreviousElement:!0});function Bt({embedded:e=!1,onRequestClose:t,onExposeCloseAttempt:a}={}){const o=j(),{close:i}=Vt(),c=(0,n.useMemo)(()=>e?t??(async()=>{}):i,[e,t,i]),{open:h,close:p,isOpen:g}=(0,r.useDialog)(),[f,y]=(0,n.useState)(null),[b,v]=(0,n.useState)(null),[E]=(0,s.useSuppressedMessage)(Lt),[_,S]=(0,n.useState)(null),{mutateAsync:x,isPending:C}=Gt(),I=(0,n.useCallback)(()=>{o?h():c()},[o,h,c]);(0,n.useEffect)(()=>{if(e&&a)return a(()=>I()),()=>a(null)},[e,a,I]),(0,n.useEffect)(()=>{if(e)return Pt(),()=>{Mt()}},[e]);const D=(0,n.useCallback)(e=>{(0,d.__dispatch)(w.actions.update({style:{id:e,sync_to_v3:!1}})),re({event:"classSyncToV3",classId:e,action:"unsync"}),y(null)},[]),T=(0,n.useCallback)(e=>{(0,d.__dispatch)(w.actions.update({style:{id:e,sync_to_v3:!0}})),re({event:"classSyncToV3",classId:e,action:"sync"}),v(null)},[]),O=(0,n.useCallback)(e=>{E?D(e):y(e)},[E,D]);Ut();const k=n.createElement(u.Box,{px:2,pb:1},n.createElement(u.Stack,{direction:"row",alignItems:"center",justifyContent:"space-between",gap:.5,sx:{pb:.5}},n.createElement(u.Box,{sx:e?{flexGrow:1,minWidth:0}:{flexGrow:1}},n.createElement(Ie,null)),n.createElement(Ce,null),e&&n.createElement(qt,null)),n.createElement(we,null)),P=n.createElement(u.Box,{ref:S,px:2,sx:{flexGrow:1,overflowY:"auto",...e?{minHeight:0}:{}}},n.createElement(It,{disabled:C,scrollElement:_,onStopSyncRequest:O,onStartSyncRequest:e=>v(e)})),M=n.createElement(l.PanelFooter,null,n.createElement(u.Button,{fullWidth:!0,size:"small",color:"global",variant:"contained",onClick:x,disabled:!o,loading:C},(0,m.__)("Save changes","elementor"))),z=n.createElement(n.Fragment,null,b&&n.createElement(zt,{externalOpen:!0,classId:b,onExternalClose:()=>v(null),onConfirm:()=>T(b)}),f&&n.createElement(Nt,{open:!0,onClose:()=>y(null),onConfirm:()=>D(f)}),g&&n.createElement(r.SaveChangesDialog,null,n.createElement(u.DialogHeader,{onClose:p,logo:!1},n.createElement(r.SaveChangesDialog.Title,null,(0,m.__)("You have unsaved changes","elementor"))),n.createElement(r.SaveChangesDialog.Content,null,n.createElement(r.SaveChangesDialog.ContentText,null,(0,m.__)("You have unsaved changes in the Class Manager.","elementor")),n.createElement(r.SaveChangesDialog.ContentText,null,(0,m.__)("To avoid losing your updates, save your changes before leaving.","elementor"))),n.createElement(r.SaveChangesDialog.Actions,{actions:{discard:{label:(0,m.__)("Discard","elementor"),action:()=>{(0,d.__dispatch)(w.actions.resetToInitialState({context:"frontend"})),p()}},confirm:{label:(0,m.__)("Save & Continue","elementor"),action:async()=>{await x(),p(),c()}}}}))),A=e?n.createElement(u.Stack,{direction:"column",sx:{height:"100%",width:"100%",flex:1,minHeight:0,overflow:"hidden"}},k,n.createElement(u.Divider,null),P,M):n.createElement(l.Panel,null,n.createElement(l.PanelHeader,null,n.createElement(u.Stack,{p:1,pl:2,width:"100%",direction:"row",alignItems:"center"},n.createElement(u.Stack,{width:"100%",direction:"row",gap:1},n.createElement(l.PanelHeaderTitle,{sx:{display:"flex",alignItems:"center",gap:.5}},n.createElement(Pe,{fontSize:"inherit"}),(0,m.__)("Class Manager","elementor")),n.createElement(qt,null)),n.createElement(Wt,{disabled:C,onClose:()=>{o?h():i()}}))),n.createElement(l.PanelBody,{sx:{display:"flex",flexDirection:"column",height:"100%"}},k,n.createElement(u.Divider,null),P),M),L=n.createElement(n.Fragment,null,n.createElement(u.ErrorBoundary,{fallback:n.createElement($t,null)},n.createElement(B,null,A)),n.createElement(De,null),z);return e?L:n.createElement(r.ThemeProvider,null,L)}const Wt=({onClose:e,sx:t,...s})=>n.createElement(u.IconButton,At({size:"small",color:"secondary",onClick:e,"aria-label":"Close",sx:{marginLeft:"auto",...t}},s),n.createElement(i.XIcon,{fontSize:"small"})),$t=()=>n.createElement(u.Box,{role:"alert",sx:{minHeight:"100%",p:2}},n.createElement(u.Alert,{severity:"error",sx:{mb:2,maxWidth:400,textAlign:"center"}},n.createElement("strong",null,(0,m.__)("Something went wrong","elementor")))),Ut=()=>{const e=j();(0,n.useEffect)(()=>{const t=t=>{e&&t.preventDefault()};return window.addEventListener("beforeunload",t),()=>{window.removeEventListener("beforeunload",t)}},[e])},Gt=()=>(0,c.useMutation)({mutationFn:()=>fe({context:"frontend"}),onSuccess:async()=>{(0,a.setDocumentModifiedStatus)(!1),Oe&&await(async()=>{Oe=!1})()}}),qt=()=>{const e=ne(),t=F();return n.createElement(u.Chip,{size:"small",label:e?`${e.length} / ${t?.length}`:t?.length})},Nt=({open:e,onClose:t,onConfirm:a})=>{const[,l]=(0,s.useSuppressedMessage)(Lt);return n.createElement(r.ConfirmationDialog,{open:e,onClose:t},n.createElement(r.ConfirmationDialog.Title,{icon:Pe,iconColor:"primary"},(0,m.__)("Un-sync typography class","elementor")),n.createElement(r.ConfirmationDialog.Content,null,n.createElement(r.ConfirmationDialog.ContentText,null,(0,m.__)("You're about to stop syncing a typography class to Global Fonts.","elementor")),n.createElement(r.ConfirmationDialog.ContentText,{sx:{mt:1}},(0,m.__)("Note that if it's being used anywhere, the affected elements will inherit the default typography.","elementor"))),n.createElement(r.ConfirmationDialog.Actions,{onClose:t,onConfirm:a,cancelLabel:(0,m.__)("Cancel","elementor"),confirmLabel:(0,m.__)("Got it","elementor"),color:"primary",onSuppressMessage:l,suppressLabel:(0,m.__)("Don't show again","elementor")}))},Ht="elementor_global_classes_update_class";function Kt(e){return Object.fromEntries(e.map(e=>[e.id,e.label]))}function Yt(e){return Object.fromEntries(Object.entries(e).filter(e=>null!==e[1]))}async function Jt(){const e=(await Y.all("preview")).data.data,t=Kt(e),n=e.map(e=>e.id);!function(e,t){(0,d.__dispatch)(w.actions.load({preview:{items:{},order:e},frontend:{items:{},order:e},classLabels:t}))}(n,t);const s=(0,a.getCurrentDocument)()?.id;if(!s)return;const[l,r]=await Promise.all([Y.getStylesForPost(s,"preview"),Y.getStylesForPost(s,"frontend")]),o=Yt(l.data.data),i=Yt(r.data.data);(0,d.__dispatch)(w.actions.load({preview:{items:o,order:n},frontend:{items:i,order:n},classLabels:t}))}async function Qt(e){const[t,n]=await Promise.all([Y.getStylesForPost(e,"preview"),Y.getStylesForPost(e,"frontend")]),s=Yt(t.data.data),a=Yt(n.data.data);(0,d.__dispatch)(w.actions.mergeExistingClasses({preview:s,frontend:a}))}let Xt=null;const Zt=new Set;async function en(e){const t=P((0,d.__getState)()),n=e.filter(e=>!(e in t));if(0!==n.length){if(n.forEach(e=>Zt.add(e)),Xt)return await Xt,en(e);Xt=async function(){const e=Array.from(Zt);if(Zt.clear(),0===e.length)return;const t=await Y.getStylesByIds(e,"preview"),n=await Y.getStylesByIds(e,"frontend"),s=Yt(t.data.data),a=Yt(n.data.data);(0,d.__dispatch)(w.actions.mergeExistingClasses({preview:s,frontend:a}))}();try{await Xt}finally{Xt=null}}}const tn="global-classes",nn=/^global-([0-9]+-)?(preview|frontend)-[a-zA-Z_-]+-css$/,sn=(0,Ye.createStylesProvider)({key:tn,priority:30,limit:1e3,isPregeneratedLink:({id:e})=>nn.test(e),labels:{singular:(0,m.__)("class","elementor"),plural:(0,m.__)("classes","elementor")},subscribe:e=>an(e),capabilities:(()=>{if((0,o.isExperimentActive)("global_classes_should_enforce_capabilities"))return{update:Ht,create:Ht,delete:Ht,updateProps:Ht}})(),actions:{all:()=>z((0,d.__getState)()),get:e=>{const t=(0,d.__getState)(),n=((e,t)=>!!e[_].initialData.preview.items[t]||!!e[_].initialData.frontend.items[t]||!1)(t,e),s=A(t,e);if(n||s)return s;en([e]);const a=D(t)[e]??e;return C(e,a)},resolveCssName:e=>{const t=(0,d.__getState)(),n=A(t,e);return n?n.label:D(t)[e]??e},create:(e,t=[],n)=>{const s=Object.entries(D((0,d.__getState)()));if(s.map(([,e])=>e).includes(e))throw new f({context:{label:e}});const a=s.map(([e])=>e);return n||(n=(0,h.generateId)("g-",a)),(0,d.__dispatch)(w.actions.add({id:n,type:"class",label:e,variants:t})),n},update:e=>{(0,d.__dispatch)(w.actions.update({style:e}))},delete:e=>{(0,d.__dispatch)(w.actions.delete(e))},updateProps:e=>{(0,d.__dispatch)(w.actions.updateProps({id:e.id,meta:e.meta,props:e.props,mode:e.mode}))},updateCustomCss:e=>{(0,d.__dispatch)(w.actions.updateProps({id:e.id,meta:e.meta,custom_css:e.custom_css,props:{}}))},tracking:e=>{re(e).catch(e=>{throw new y({cause:e})})}}}),an=e=>{let t=I((0,d.__getState)());return(0,d.__subscribeWithSelector)(e=>I(e),n=>{e(t.items,n.items),t=n})},ln="elementor://global-classes",rn="elementor-global-classes",on=()=>{const e=z((0,d.__getState)());localStorage.setItem(rn,JSON.stringify(e))};var cn=window.elementorV2.editor,dn=window.elementorV2.editorEditingPanel,un=window.elementorV2.editorMcp;function mn(){const e=(0,c.useQueryClient)();return{prefetchClassesUsage:()=>e.prefetchQuery({queryKey:[X],queryFn:Q})}}const hn=()=>{const{prefetchClassesUsage:e}=mn();return e(),null},pn=()=>{re({event:"classManagerOpened",source:"style-panel"})},gn=()=>{const e=(0,a.__useActiveDocument)(),{open:t}=Vt(),{save:s}=(0,a.__useActiveDocumentActions)(),{open:l,close:i,isOpen:c}=(0,r.useDialog)(),{prefetchClassesUsage:d}=mn(),{userCan:h}=(0,Ye.useUserStylesCapability)();if(!h(sn.getKey()).update)return null;const p=()=>{(0,o.isExperimentActive)("e_editor_design_system_panel")?window.dispatchEvent(new CustomEvent("elementor/toggle-design-system",{detail:{tab:"classes"}})):t()};return n.createElement(n.Fragment,null,n.createElement(u.Tooltip,{title:(0,m.__)("Class Manager","elementor"),placement:"top"},n.createElement(u.IconButton,{size:"tiny",onClick:()=>{e?.isDirty?l():(p(),pn(),d())},sx:{marginInlineEnd:-.75}},n.createElement(Pe,{fontSize:"tiny"}))),c&&n.createElement(r.SaveChangesDialog,null,n.createElement(r.SaveChangesDialog.Title,null,(0,m.__)("You have unsaved changes","elementor")),n.createElement(r.SaveChangesDialog.Content,null,n.createElement(r.SaveChangesDialog.ContentText,{sx:{mb:2}},(0,m.__)("To open the Class Manager, save your page first. You can't continue without saving.","elementor"))),n.createElement(r.SaveChangesDialog.Actions,{actions:{cancel:{label:(0,m.__)("Stay here","elementor"),action:i},confirm:{label:(0,m.__)("Save & Continue","elementor"),action:async()=>{await s(),i(),p(),pn(),d()}}}})))},fn=e=>{const t=e.styleDef;return n.createElement(n.Fragment,null,n.createElement(r.MenuListItem,{disabled:!e.canConvert,onClick:()=>{const n=function(e){let t=1,n=`${e}${t}`;for(;!(0,Ye.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=sn.actions.create?.(n,t.variants);s&&(e.successCallback(s),re({classId:s,event:"classCreated",source:"converted",classTitle:n}))},dense:!0,sx:{"&.Mui-focusVisible":{border:"none",boxShadow:"none !important",backgroundColor:"transparent"}}},(0,m.__)("Convert to global class","elementor")),n.createElement(u.Divider,null))};var yn=window.elementorV2.editorCanvas;function bn(){const e=(0,d.__useDispatch)();return(0,n.useEffect)(()=>{const t=async t=>{const n=t,s=n.detail?.global_classes;s?.added_items_order&&s?.added_items&&0!==s?.added_items_order?.length?e(w.actions.updateAfterTemplateImport({addedItems:s.added_items,addedIdsOrder:s.added_items_order,addedClassLabels:Kt(Object.values(s.added_items))})):Jt()};return window.addEventListener(yn.GLOBAL_STYLES_IMPORTED_EVENT,t),()=>{window.removeEventListener(yn.GLOBAL_STYLES_IMPORTED_EVENT,t)}},[e]),null}const vn="elementor/open-global-classes-manager";function En(){const{open:e}=Vt();return(0,n.useEffect)(()=>{const t=()=>e();return window.addEventListener(vn,t),()=>window.removeEventListener(vn,t)},[e]),null}const _n="active-panel",wn="global-classes-manager",Sn="panel/elements";function xn(){const{open:e}=Vt(),t=(0,n.useRef)(!1);return(0,n.useEffect)(()=>{if(new URLSearchParams(window.location.search).get(_n)===wn)return(0,o.__privateListenTo)((0,o.routeOpenEvent)(Sn),()=>{t.current||(t.current=!0,requestAnimationFrame(()=>{e()}))})},[e]),null}function Cn(){return(0,n.useEffect)(()=>{Jt(),(0,o.registerDataHook)("after","editor/documents/attach-preview",async()=>{await Jt()})},[]),null}var In=window.elementorV2.schema;const Dn="elementor://global-classes/tools/apply-global-class-guide";var Tn=window.elementorV2.editorProps;const On={action:In.z.enum(["create","modify","delete"]).describe("Operation to perform"),classId:In.z.string().optional().describe("Global class ID (required for modify). Get from elementor://global-classes resource."),globalClassName:In.z.string().optional().describe("Global class name (required for create)"),props:In.z.object({default:In.z.record(In.z.any()).describe('key-value of style-schema PropValues. Available properties at dynamic resource "elementor://styles/schema/{property-name}"'),hover:In.z.record(In.z.any()).describe("key-value of style-schema PropValues, for :hover css state. optional").optional(),focus:In.z.record(In.z.any()).describe("key-value of style-schema PropValues, for :focus css state. optional").optional(),active:In.z.record(In.z.any()).describe("key-value of style-schema PropValues, for :active css state. optional").optional()}),breakpoint:In.z.nullable(In.z.string().describe("Responsive breakpoint name for styles. Defaults to desktop (null).")).default(null).describe("Responsive breakpoint name for styles. Defaults to desktop (null).")},kn={status:In.z.enum(["ok","error"]).describe("Operation status"),classId:In.z.string().optional().describe("Class ID (returned on create success)"),message:In.z.string().optional().describe("Error details if status is error")},Pn=async e=>{const{action:t,classId:n,globalClassName:s,props:a,breakpoint:l}=e,r=a;let o=n;if("create"===t&&!s)return{status:"error",message:"Create requires globalClassName"};if("modify"===t&&!o)return{status:"error",message:"Modify requires classId"};if("delete"===t&&!o)return{status:"error",message:"Delete requires classId"};const{create:i,update:c,delete:d}=sn.actions;if(!i||!c||!d)return{status:"error",message:"Required actions not available"};const u=[],m=(0,h.getStylesSchema)(),p=Object.keys(m);if(Object.values(r).forEach(e=>{Object.keys(e).forEach(t=>{const n=m[t];if(!n)return void u.push(`Property "${t}" does not exist in styles schema.`);const{valid:s,jsonSchema:a}=Tn.Schema.validatePropValue(n,e[t]);s||u.push(`- Property "${t}" has invalid value\n Expected schema: ${a}\n`)})}),u.length>0)return{status:"error",message:`Validation errors:\n${u.join("\n")}\nAvailable Properties: ${p.join(", ")}\nUpdate your input and try again.`};const g=window.elementorV2.editorVariables.Utils;Object.values(r).forEach(e=>{Object.keys(e).forEach(t=>{e[t]=Tn.Schema.adjustLlmPropValueSchema(e[t],{transformers:g.globalVariablesLLMResolvers})})});const f=l??"desktop";let y={status:"error",classId:"",message:"unknown error"};try{let e=t;for await(const[n,a]of Object.entries(r))switch(e){case"create":const l=await Mn({props:a,className:s,stylesProvider:sn,breakpoint:f,state:n});l&&"create"===e&&(e="modify",o=l),y=l?{status:"ok",message:`created global class with ID ${l}`}:{status:"error",message:"error creating class"};break;case"modify":y=await zn({classId:o,props:a,stylesProvider:sn,breakpoint:f,state:n})?{status:"ok",classId:o}:{status:"error",message:"error modifying class"};break;case"delete":y=await An({classId:o,stylesProvider:sn})?{status:"ok",message:`deleted global class with ID ${o}`}:{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 y};async function Mn(e){const{props:t,breakpoint:n,className:s,stylesProvider:a,state:l}=e,{create:r,delete:o}=a.actions;if(!s)throw new Error("Global class name is a required for creation");if(!r||!o)throw new Error("User is unable to create global classes");const i=r(s,[{meta:{breakpoint:n,state:"default"===l?null:l},custom_css:null,props:t}]);try{return await fe({context:"frontend"}),i}catch{return o(i),null}}async function zn(e){const{props:t,breakpoint:n,classId:s,stylesProvider:a,state:l}=e,{updateProps:r,update:o}=a.actions;if(!s)throw new Error("Class ID is required for modification");if(!r||!o)throw new Error("User is unable to update global classes");const i=structuredClone(a.actions.all());try{return r({id:s,props:t,meta:{breakpoint:n,state:l}}),await fe({context:"frontend"}),!0}catch{return i.forEach(e=>{o({id:e.id,variants:e.variants})}),await fe({context:"frontend"}),!1}}async function An(e){const{classId:t,stylesProvider:n}=e,{delete:s,create:a}=n.actions;if(!t)throw new Error("Class ID is required for deletion");if(!s||!a)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 s(t),await fe({context:"frontend"}),!0}catch{return!1}}const Ln=(e,t)=>{(function(e){const{addTool:t,resource:n}=e,s=(()=>{const e=(0,un.toolPrompts)("apply-global-class");return e.description("Apply a global class to an element, enabling consistent styling through your design system."),e.instruction('## 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)'),e.instruction("## 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"),e.instruction('## 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")'),e.prompt()})();n("apply-global-class-guide",Dn,{description:"Workflow, prerequisites, and best practices for apply-global-class",mimeType:"text/plain",title:"Apply global class tool guide"},async e=>({contents:[{mimeType:"text/plain",text:s,uri:e.href}]})),t({schema:{classId:In.z.string().describe("The ID of the class to apply"),elementId:In.z.string().describe("The ID of the element to which the class will be applied")},outputSchema:{result:In.z.string().describe("Result message indicating the success of the apply operation"),llm_instructions:In.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 for shared design-system styling. Read the full guide at [${Dn}].`,requiredResources:[{description:"Apply global class tool guide",uri:Dn},{description:"Global classes list",uri:ln}],handler:async e=>{const{classId:t,elementId:n}=e,s=(0,dn.doGetAppliedClasses)(n);return(0,dn.doApplyClasses)(n,[...s,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.`}}}),t({name:"unapply-global-class",schema:{classId:In.z.string().describe("The ID of the class to unapply"),elementId:In.z.string().describe("The ID of the element from which the class will be unapplied")},outputSchema:{result:In.z.string().describe("Result message indicating the success of the unapply operation")},modelPreferences:{intelligencePriority:.7,speedPriority:.8},description:`Unapply a global class from an element by class ID. Resolve class names to IDs via [${ln}].`,requiredResources:[{description:"Global classes list",uri:ln}],handler:async e=>{const{classId:t,elementId:n}=e;if(!(0,dn.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.`}}})})(e),function(e){const{addTool:t}=e,n={usages:In.z.array(In.z.object({classId:In.z.string().describe('The ID of the class, not visible to the user. To retrieve the name of the class, use the "list-global-classes" tool'),usages:In.z.array(In.z.object({pageId:In.z.string().describe("The ID of the page where the class is used"),title:In.z.string().describe("The title of the page where the class is used"),total:In.z.number().describe("The number of times the class is used on this page"),elements:In.z.array(In.z.string()).describe("List of element IDs using this class on the page")}))}))};t({name:"get-global-class-usages",modelPreferences:{intelligencePriority:.6,speedPriority:.8},description:"Retrieve usages of global classes across all Elementor pages. Heavy operation — scans every page in the site.\n\n## When to use:\n- Before deleting or radically changing a class — to understand cross-page side effects and decide whether to consult the user.\n- To identify unused global classes for cleanup.\n\n## When NOT to use:\n- To list global classes themselves — use the global-classes resource instead (this tool returns usages, not the class list).",requiredResources:[{description:"Global classes list",uri:ln}],outputSchema:n,handler:async()=>{const e=await Q(),t={usages:[]};return Object.entries(e).forEach(([e,n])=>{const s={classId:e,usages:[]};if("number"!=typeof n){const{content:e}=n;e.forEach(e=>{s.usages.push({pageId:String(e.pageId),title:e.title,total:e.total,elements:e.elements})}),t.usages.push(s)}}),t}})}(e),(e=>{const{addTool:t}=e;t({name:"manage-global-classes",requiredResources:[{uri:ln,description:"Global classes list"},{uri:yn.STYLE_SCHEMA_URI,description:"Style schema resources"},{uri:yn.BREAKPOINTS_SCHEMA_URI,description:"Breakpoints list"}],modelPreferences:{intelligencePriority:.85,speedPriority:.6},description:"Create or modify global classes for reusable design-system styling. Class names must reflect purpose (e.g. heading-primary, button-cta). Create classes BEFORE compositions. Do NOT create classes for one-off styles or layout-specific properties.",schema:On,outputSchema:kn,handler:Pn})})(e),((e,t)=>{[t,e].forEach(e=>{const{sendResourceUpdated:t,resource:n,waitForReady:s}=e;n("global-classes",ln,{description:"Global classes list."},async()=>({contents:[{uri:ln,text:localStorage[rn]??"[]"}]})),s().then(()=>{on(),sn.subscribe(()=>{on(),t({uri:ln})})})})})(e,t)};let Fn=null;function jn(e,t="preview"){const n=(0,s.getCurrentUser)(),a=n?.capabilities.includes(Ht);if(!a)return null;if(Fn)return Fn;const l=fe({context:t,onApprove:e?.open});return Fn=l,l.finally(()=>{Fn=null}),l}function Rn(){return M((0,d.__getState)())}function Vn(){const{open:e}=Vt();return(0,n.useEffect)(()=>(0,o.__privateListenTo)((0,o.v1ReadyEvent)(),()=>{!function(e){const t=(0,d.__subscribeWithSelector)(M,()=>{Rn()&&(0,a.setDocumentModifiedStatus)(!0)});(function(e){(0,o.registerDataHook)("dependency","document/save/save",t=>(jn(e,"publish"===t.status?"frontend":"preview"),!0))})(e),window.addEventListener("elementor/global-styles/before-save",e=>{!Fn&&Rn()&&jn(),Fn&&e.detail.promises.push(Fn)})}({open:(0,o.isExperimentActive)("e_editor_design_system_panel")?()=>{window.dispatchEvent(new CustomEvent("elementor/open-global-classes-manager"))}:e})}),[]),null}function Bn(){(0,d.__registerSlice)(w),(0,o.isExperimentActive)("e_editor_design_system_panel")||(0,l.__registerPanel)(Rt),Ye.stylesRepository.register(sn),(0,cn.injectIntoLogic)({id:"global-classes-populate-store",component:Cn}),(0,cn.injectIntoLogic)({id:"global-classes-sync-with-document",component:Vn}),(0,cn.injectIntoLogic)({id:"global-classes-import-listener",component:bn}),(0,cn.injectIntoLogic)({id:"global-classes-prefetch-css-class-usage",component:hn}),(0,o.isExperimentActive)("e_editor_design_system_panel")||((0,cn.injectIntoLogic)({id:"global-classes-open-panel-from-url",component:xn}),(0,cn.injectIntoLogic)({id:"global-classes-open-panel-from-event",component:En})),(0,dn.injectIntoCssClassConvert)({id:"global-classes-convert-from-local-class",component:fn}),(0,dn.injectIntoClassSelectorActions)({id:"global-classes-manager-button",component:gn}),(0,dn.registerStyleProviderToColors)(tn,{name:"global",getThemeColor:e=>e.palette.global.dark}),Ln((0,un.getMCPByDomain)("classes",{instructions:"MCP server for management of Elementor global classes",docs:"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"}),(0,un.getMCPByDomain)("canvas"))}(window.elementorV2=window.elementorV2||{}).editorGlobalClasses=t}(),window.elementorV2.editorGlobalClasses?.init?.(); | |
| 5 | +`;function rt(){return rt=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},rt.apply(null,arguments)}const st=({id:e,label:t,renameClass:n,selected:a,disabled:l,sortableTriggerProps:r,showSortIndicator:s})=>{const i=(0,o.useRef)(null),{ref:u,openEditMode:p,isEditing:h,error:g,getProps:y}=(0,c.useEditable)({value:t,onSubmit:n,validation:dt}),[f,b]=(0,o.useState)(""),{openDialog:v}=Xe(),E=(0,d.usePopupState)({variant:"popover",disableAutoFocus:!0}),_=(f===e||a||E.isOpen)&&!l;return o.createElement(o.Fragment,null,o.createElement(d.Stack,{p:0},o.createElement(c.WarningInfotip,{open:Boolean(g),text:g??"",placement:"bottom",width:i.current?.getBoundingClientRect().width,offset:[0,-15]},o.createElement(ot,{ref:i,dense:!0,disableGutters:!0,showSortIndicator:s,showActions:_||h,shape:"rounded",onDoubleClick:p,selected:_,disabled:l,focusVisibleClassName:"visible-class-item"},o.createElement(tt,r),o.createElement(it,{isActive:h,isError:!!g},h?o.createElement(c.EditableField,rt({ref:u,as:d.Typography,variant:"caption"},y())):o.createElement(c.EllipsisWithTooltip,{title:t,as:d.Typography,variant:"caption"})),o.createElement(d.Box,{className:"class-item-locator"},o.createElement(Re,{id:e,onClick:b})),o.createElement(d.Tooltip,{placement:"top",className:"class-item-more-actions",title:(0,m.__)("More actions","elementor")},o.createElement(d.IconButton,rt({size:"tiny"},(0,d.bindTrigger)(E),{"aria-label":"More actions"}),o.createElement(se.DotsVerticalIcon,{fontSize:"tiny"})))))),o.createElement(d.Menu,rt({},(0,d.bindMenu)(E),{anchorOrigin:{vertical:"bottom",horizontal:"right"},transformOrigin:{vertical:"top",horizontal:"right"}}),o.createElement(c.MenuListItem,{sx:{minWidth:"160px"},onClick:()=>{E.close(),p()}},o.createElement(d.Typography,{variant:"caption",sx:{color:"text.primary"}},(0,m.__)("Rename","elementor"))),o.createElement(c.MenuListItem,{onClick:()=>{E.close(),v({id:e,label:t})}},o.createElement(d.Typography,{variant:"caption",sx:{color:"error.light"}},(0,m.__)("Delete","elementor")))))},ot=(0,d.styled)(d.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 `),it=(0,d.styled)(d.Box,{shouldForwardProp:e=>!["isActive","isError"].includes(e)})(({theme:e,isActive:t,isError:n})=>({display:"flex",width:"100%",flexGrow:1,borderRadius:e.spacing(.5),border:ct({isActive:t,isError:n,theme:e}),padding:`0 ${e.spacing(1)}`,marginLeft:t?e.spacing(1):0,minWidth:0})),ct=({isActive:e,isError:t,theme:n})=>t?`2px solid ${n.palette.error.main}`:e?`2px solid ${n.palette.secondary.main}`:"none",dt=e=>{const t=(0,r.validateStyleLabel)(e,"rename");return t.isValid?null:t.errorMessage};function mt(){return mt=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},mt.apply(null,arguments)}const ut={filterAndSearch:{mainText:(0,m.__)("Sorry, nothing matched.","elementor"),sceneryText:(0,m.__)("Try something else.","elementor"),icon:o.createElement(se.PhotoIcon,{color:"inherit",fontSize:"large"})},search:{mainText:(0,m.__)("Sorry, nothing matched","elementor"),sceneryText:(0,m.__)("Clear your input and try something else.","elementor"),icon:o.createElement(se.PhotoIcon,{color:"inherit",fontSize:"large"})},filter:{mainText:(0,m.__)("Sorry, nothing matched that search.","elementor"),sceneryText:(0,m.__)("Clear the filters and try something else.","elementor"),icon:o.createElement(se.ColorSwatchIcon,{color:"inherit",fontSize:"large"})}},pt=({notFoundType:e})=>{const{search:{onClearSearch:t,inputValue:n},filters:{onClearFilter:a}}=ue();switch(e){case"filter":return o.createElement(ht,mt({},ut.filter,{onClear:a}));case"search":return o.createElement(ht,mt({},ut.search,{searchValue:n,onClear:t}));case"filterAndSearch":return o.createElement(ht,mt({},ut.filterAndSearch,{onClear:()=>{a(),t()}}))}},ht=({onClear:e,searchValue:t,mainText:n,sceneryText:a,icon:l})=>o.createElement(d.Stack,{color:"text.secondary",pt:5,alignItems:"center",gap:1,overflow:"hidden",justifySelf:"center"},l,o.createElement(d.Box,{sx:{width:"100%"}},o.createElement(d.Typography,{align:"center",variant:"subtitle2",color:"inherit"},n),t&&o.createElement(d.Typography,{variant:"subtitle2",color:"inherit",sx:{display:"flex",width:"100%",justifyContent:"center"}},o.createElement("span",null,"“"),o.createElement("span",{style:{maxWidth:"80%",overflow:"hidden",textOverflow:"ellipsis"}},t),o.createElement("span",null,"”."))),o.createElement(d.Typography,{align:"center",variant:"caption",color:"inherit"},a),o.createElement(d.Typography,{align:"center",variant:"caption",color:"inherit"},o.createElement(d.Link,{color:"secondary",variant:"caption",component:"button",onClick:e},(0,m.__)("Clear & try again","elementor")))),gt=({disabled:e})=>{const{search:{debouncedValue:t}}=ue(),n=Le(),a=(0,s.__useDispatch)(),l=ye(),[r,i]=o.useState(null),c=n.find(e=>e.id===r)?.label??"",[m,u]=bt(r,i,c??""),p=vt();if((0,o.useEffect)(()=>{const e=e=>{if("z"===e.key&&(e.ctrlKey||e.metaKey)){if(e.stopImmediatePropagation(),e.preventDefault(),e.shiftKey)return void a(S.actions.redo());a(S.actions.undo())}};return window.addEventListener("keydown",e,{capture:!0}),()=>window.removeEventListener("keydown",e)},[a]),!n?.length)return o.createElement(yt,null);const h=((e,t,n)=>{const a=n.length<=0&&e.length>1,l=t&&0===t.length;return a&&l?"filterAndSearch":a?"search":l?"filter":void 0})(t,l,p);if(h)return o.createElement(pt,{notFoundType:h});const g=l?.length||t,y=p.length>1&&!g;return o.createElement(Ke,null,o.createElement(d.List,{sx:{display:"flex",flexDirection:"column",gap:.5}},o.createElement(et,{value:m,onChange:u,disableDragOverlay:!y},p?.map(({id:t,label:n})=>o.createElement(nt,{key:t,id:t},({isDragged:l,isDragPlaceholder:s,triggerProps:c,triggerStyle:d})=>(l&&!r&&i(t),o.createElement(st,{id:t,label:n,renameClass:e=>{G({event:"classRenamed",classId:t,oldValue:n,newValue:e,source:"class-manager"}),a(S.actions.update({style:{id:t,label:e}}))},selected:l,disabled:e||s,sortableTriggerProps:{...c,style:d},showSortIndicator:y})))))))},yt=()=>o.createElement(d.Stack,{alignItems:"center",gap:1.5,pt:10,px:.5,maxWidth:"260px",margin:"auto"},o.createElement(je,{fontSize:"large"}),o.createElement(ft,{variant:"subtitle2",component:"h2",color:"text.secondary"},(0,m.__)("There are no global classes yet.","elementor")),o.createElement(d.Typography,{align:"center",variant:"caption",color:"text.secondary"},(0,m.__)("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"))),ft=(0,d.styled)(d.Typography)(({theme:e,variant:t})=>({"&.MuiTypography-root":{...e.typography[t]}})),bt=(e,t,n)=>{const a=(0,s.__useDispatch)();return[oe(),l=>{a(S.actions.setOrder(l)),e&&(G({event:"classManagerReorder",classId:e,classTitle:n}),t(null))}]},vt=()=>{const e=Le(),{search:{debouncedValue:t}}=ue(),n=ye(),a=(0,o.useMemo)(()=>e.map(e=>({...e,lowerLabel:e.label.toLowerCase()})),[e]),l=(0,o.useMemo)(()=>t.length>1?a.filter(e=>e.lowerLabel.includes(t.toLowerCase())):e,[t,e,a]);return(0,o.useMemo)(()=>n&&n.length>0?l.filter(e=>n.includes(e.id)):l,[l,n])};function Et(){return Et=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},Et.apply(null,arguments)}const _t="global-classes-manager",{panel:xt,usePanelActions:wt}=(0,l.__createPanel)({id:_t,component:function(){const e=ie(),{close:t}=wt(),{open:n,close:a,isOpen:r}=(0,c.useDialog)(),{mutateAsync:i,isPending:u}=Dt();return It(),o.createElement(c.ThemeProvider,null,o.createElement(d.ErrorBoundary,{fallback:o.createElement(Ct,null)},o.createElement(l.Panel,null,o.createElement(me,null,o.createElement(l.PanelHeader,null,o.createElement(d.Stack,{p:1,pl:2,width:"100%",direction:"row",alignItems:"center"},o.createElement(d.Stack,{width:"100%",direction:"row",gap:1},o.createElement(l.PanelHeaderTitle,{sx:{display:"flex",alignItems:"center",gap:.5}},o.createElement(je,{fontSize:"inherit"}),(0,m.__)("Class Manager","elementor")),o.createElement(Tt,null)),o.createElement(St,{sx:{marginLeft:"auto"},disabled:u,onClose:()=>{e?n():t()}}))),o.createElement(l.PanelBody,{sx:{display:"flex",flexDirection:"column",height:"100%"}},o.createElement(d.Box,{px:2,pb:1},o.createElement(d.Stack,{direction:"row",justifyContent:"spaceBetween",gap:.5,sx:{pb:.5}},o.createElement(d.Box,{sx:{flexGrow:1}},o.createElement(ke,null)),o.createElement(Pe,null)),o.createElement(Ie,null)),o.createElement(d.Divider,null),o.createElement(d.Box,{px:2,sx:{flexGrow:1,overflowY:"auto"}},o.createElement(gt,{disabled:u}))),o.createElement(l.PanelFooter,null,o.createElement(d.Button,{fullWidth:!0,size:"small",color:"global",variant:"contained",onClick:i,disabled:!e,loading:u},(0,m.__)("Save changes","elementor")))))),o.createElement(ze,null),r&&o.createElement(c.SaveChangesDialog,null,o.createElement(d.DialogHeader,{onClose:a,logo:!1},o.createElement(c.SaveChangesDialog.Title,null,(0,m.__)("You have unsaved changes","elementor"))),o.createElement(c.SaveChangesDialog.Content,null,o.createElement(c.SaveChangesDialog.ContentText,null,(0,m.__)("You have unsaved changes in the Class Manager.","elementor")),o.createElement(c.SaveChangesDialog.ContentText,null,(0,m.__)("To avoid losing your updates, save your changes before leaving.","elementor"))),o.createElement(c.SaveChangesDialog.Actions,{actions:{discard:{label:(0,m.__)("Discard","elementor"),action:()=>{(0,s.__dispatch)(S.actions.resetToInitialState({context:"frontend"})),a()}},confirm:{label:(0,m.__)("Save & Continue","elementor"),action:async()=>{await i(),a(),t()}}}})))},allowedEditModes:["edit",_t],onOpen:()=>{(0,p.changeEditMode)(_t),function(){const e=window;e.$e?.components?.get?.("panel")?.blockUserInteractions?.()}()},onClose:()=>{(0,p.changeEditMode)("edit"),function(){const e=window;e.$e?.components?.get?.("panel")?.unblockUserInteractions?.()}()},isOpenPreviousElement:!0}),St=({onClose:e,...t})=>o.createElement(d.IconButton,Et({size:"small",color:"secondary",onClick:e,"aria-label":"Close"},t),o.createElement(se.XIcon,{fontSize:"small"})),Ct=()=>o.createElement(d.Box,{role:"alert",sx:{minHeight:"100%",p:2}},o.createElement(d.Alert,{severity:"error",sx:{mb:2,maxWidth:400,textAlign:"center"}},o.createElement("strong",null,(0,m.__)("Something went wrong","elementor")))),It=()=>{const e=ie();(0,o.useEffect)(()=>{const t=t=>{e&&t.preventDefault()};return window.addEventListener("beforeunload",t),()=>{window.removeEventListener("beforeunload",t)}},[e])},Dt=()=>(0,ne.useMutation)({mutationFn:()=>ve({context:"frontend"}),onSuccess:async()=>{(0,i.setDocumentModifiedStatus)(!1),Ae&&await(async()=>{await(()=>{const e=(0,i.getCurrentDocument)();return(0,i.getV1DocumentsManager)().invalidateCache(),(0,p.__privateRunCommand)("editor/documents/switch",{id:e?.id,shouldScroll:!1,shouldNavigateToDefaultRoute:!1})})(),Ae=!1})()}}),Tt=()=>{const e=ye(),t=oe();return o.createElement(d.Chip,{size:"small",label:e?`${e.length} / ${t?.length}`:t?.length})},Pt=()=>{G({event:"classManagerOpened",source:"style-panel"})},kt=()=>{const e=(0,i.__useActiveDocument)(),{open:t}=wt(),{save:n}=(0,i.__useActiveDocumentActions)(),{open:a,close:l,isOpen:s}=(0,c.useDialog)(),{prefetchClassesUsage:u}=le(),{userCan:p}=(0,r.useUserStylesCapability)();return p(ee.getKey()).update?o.createElement(o.Fragment,null,o.createElement(d.Tooltip,{title:(0,m.__)("Class Manager","elementor"),placement:"top"},o.createElement(d.IconButton,{size:"tiny",onClick:()=>{e?.isDirty?a():(t(),Pt(),G({event:"classManagerOpened",source:"style-panel"}),u())},sx:{marginInlineEnd:-.75}},o.createElement(je,{fontSize:"tiny"}))),s&&o.createElement(c.SaveChangesDialog,null,o.createElement(c.SaveChangesDialog.Title,null,(0,m.__)("You have unsaved changes","elementor")),o.createElement(c.SaveChangesDialog.Content,null,o.createElement(c.SaveChangesDialog.ContentText,{sx:{mb:2}},(0,m.__)("To open the Class Manager, save your page first. You can't continue without saving.","elementor"))),o.createElement(c.SaveChangesDialog.Actions,{actions:{cancel:{label:(0,m.__)("Stay here","elementor"),action:l},confirm:{label:(0,m.__)("Save & Continue","elementor"),action:async()=>{await n(),l(),t(),Pt(),u()}}}}))):null},Ot=e=>{const t=e.styleDef;return o.createElement(o.Fragment,null,o.createElement(c.MenuListItem,{disabled:!e.canConvert,onClick:()=>{const n=function(e){let t=1,n=`${e}${t}`;for(;!(0,r.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 a=ee.actions.create?.(n,t.variants);a&&(e.successCallback(a),G({classId:a,event:"classCreated",source:"converted",classTitle:n}))},dense:!0,sx:{"&.Mui-focusVisible":{border:"none",boxShadow:"none !important",backgroundColor:"transparent"}}},(0,m.__)("Convert to global class","elementor")),o.createElement(d.Divider,null))};function zt(){const e=(0,s.__useDispatch)();return(0,o.useEffect)(()=>{Promise.all([F.all("preview"),F.all("frontend")]).then(([t,n])=>{const{data:a}=t,{data:l}=n;e(S.actions.load({preview:{items:a.data,order:a.meta.order},frontend:{items:l.data,order:l.meta.order}}))})},[e]),null}var Mt=window.elementorV2.editorMcp;const At="elementor://classes";var Bt=window.elementorV2.schema;const jt=()=>{const e=(0,Mt.getMCPByDomain)("classes");var t;e.setMCPDescription("Tools for managing and applying Global CSS classes to elements within the Elementor editor."),(t=e).addTool({name:"list-all-global-classes",description:"List all classes applied to a specific element\n\n## When to use this tool:\n- When a user requests to see which classes or global classes exists.\n- When you need the list of global classes to allow the user to select from.\n- At least once before applying or unapplying a class, to ensure the class ID is correct.\n\n",outputSchema:{appliedClasses:Bt.z.array(Bt.z.object({id:Bt.z.string().describe("The ID of the class"),label:Bt.z.string().describe("The label of the class"),variants:Bt.z.array(Bt.z.object({meta:Bt.z.object({breakpoint:Bt.z.string().optional(),state:Bt.z.string().optional()}),props:Bt.z.record(Bt.z.any())}))}))},handler:async()=>{const e=r.stylesRepository.getProviderByKey("global-classes");if(!e)throw new Error("Global classes provider not found");const t=[];return e.actions.all().forEach(e=>{const{id:n,label:a,variants:l}=e;t.push({id:n,label:a,variants:l.map(e=>({meta:{breakpoint:e.meta.breakpoint,state:e.meta.state},props:e.props}))})}),{appliedClasses:t}}}),t.addTool({schema:{classId:Bt.z.string().describe("The ID of the class to apply"),elementId:Bt.z.string().describe("The ID of the element to which the class will be applied")},name:"apply-global-class",description:'Apply a global class to the current element\n\n## When to use this tool:\n- When a user requests to apply a global class or a class to an element in the Elementor editor.\n- When you need to add a specific class to 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 duplicates. You can use the "list-applied-classes" tool to fetch the current classes.\n- Make sure you have the correct class ID that you want to apply.',handler:async e=>{const{classId:t,elementId:n}=e,l=(0,a.doGetAppliedClasses)(n);return(0,a.doApplyClasses)(n,[...l,t]),`Class ${t} applied to element ${n} successfully.`}}),t.addTool({name:"unapply-global-class",schema:{classId:Bt.z.string().describe("The ID of the class to unapply"),elementId:Bt.z.string().describe("The ID of the element from which the class will be unapplied")},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. You can use the "list-global-classes" tool to fetch the all classes applied to all elements.\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, please use the "list-global-classes" tool to get the class ID from the name first.\n</note>\n',handler:async e=>{const{classId:t,elementId:n}=e;if(!(0,a.doUnapplyClass)(n,t))throw new Error(`Class ${t} is not applied to element ${n}, cannot unapply it.`);return`Class ${t} unapplied from element ${n} successfully.`}}),function(e){const{addTool:t}=e;t({name:"get-global-class-usages",description:'Retreive the usage details of global classes within the Elementor editor, accross all pages.\n\n## Prequisites:\n- Use "list-global-classes" tool to be able to match class IDs to class names/labels.\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',outputSchema:{usages:Bt.z.array(Bt.z.object({classId:Bt.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:Bt.z.array(Bt.z.object({pageId:Bt.z.string().describe("The ID of the page where the class is used"),title:Bt.z.string().describe("The title of the page where the class is used"),total:Bt.z.number().describe("The number of times the class is used on this page"),elements:Bt.z.array(Bt.z.string()).describe("List of element IDs using this class on the page")}))}))},handler:async()=>{const e=await U(),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),(()=>{const{mcpServer:e}=(0,Mt.getMCPByDomain)("classes");e.resource("global-classes",At,{description:"Global classes list."},async()=>({contents:[{uri:At,text:localStorage["elementor-global-classes"]??{}}]}))})()};function Lt(){const e=wt();return(0,o.useEffect)(()=>{(0,p.__privateListenTo)((0,p.v1ReadyEvent)(),()=>{!function(e){const t=(0,s.__subscribeWithSelector)(O,()=>{O((0,s.__getState)())&&(0,i.setDocumentModifiedStatus)(!0)});(function(e){(0,p.registerDataHook)("dependency","document/save/save",t=>{const n=(0,Oe.getCurrentUser)(),a=n?.capabilities.includes(h);return!a||(ve({context:"publish"===t.status?"frontend":"preview",onApprove:e?.open}),!0)})})(e)}(e)})},[]),null}function Vt(){(0,s.__registerSlice)(S),(0,l.__registerPanel)(xt),r.stylesRepository.register(ee),(0,n.injectIntoLogic)({id:"global-classes-populate-store",component:zt}),(0,n.injectIntoLogic)({id:"global-classes-sync-with-document",component:Lt}),(0,n.injectIntoLogic)({id:"global-classes-prefetch-css-class-usage",component:re}),(0,a.injectIntoCssClassConvert)({id:"global-classes-convert-from-local-class",component:Ot}),(0,a.injectIntoClassSelectorActions)({id:"global-classes-manager-button",component:kt}),(0,a.registerStyleProviderToColors)(Z,{name:"global",getThemeColor:e=>e.palette.global.dark}),jt()}(window.elementorV2=window.elementorV2||{}).editorGlobalClasses=t}(),window.elementorV2.editorGlobalClasses?.init?.(); | |