@elementor/editor-global-classes 3.35.0-469 → 3.35.0-471
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +250 -271
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +250 -271
- package/dist/index.mjs.map +1 -1
- package/package.json +20 -20
- package/src/mcp-integration/classes-resource.ts +20 -17
- package/src/mcp-integration/index.ts +5 -5
- package/src/mcp-integration/mcp-apply-unapply-global-classes.ts +19 -6
- package/src/mcp-integration/mcp-manage-global-classes.ts +282 -0
- package/src/mcp-integration/design-system/design-system-tool.ts +0 -121
- package/src/mcp-integration/mcp-create-global-class.ts +0 -164
- package/src/mcp-integration/mcp-modify-global-class.ts +0 -134
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/mcp-integration/classes-resource.ts","../src/global-classes-styles-provider.ts","../src/capabilities.ts","../src/errors.ts","../src/store.ts","../src/utils/snapshot-history.ts","../src/utils/tracking.ts","../src/api.ts","../src/components/css-class-usage/utils.ts","../service/css-class-usage-service.ts","../src/init.ts","../src/components/class-manager/class-manager-button.tsx","../src/hooks/use-prefetch-css-class-usage.ts","../src/components/css-class-usage/types.ts","../src/components/class-manager/class-manager-panel.tsx","../src/hooks/use-classes-order.ts","../src/hooks/use-dirty-state.ts","../src/hooks/use-filters.ts","../src/components/search-and-filter/context.tsx","../src/hooks/use-filtered-css-class-usage.tsx","../src/hooks/use-css-class-usage.ts","../src/hooks/use-empty-css-class.ts","../src/save-global-classes.tsx","../src/components/class-manager/duplicate-label-dialog.tsx","../src/components/search-and-filter/components/filter/active-filters.tsx","../src/components/search-and-filter/components/filter/clear-icon-button.tsx","../src/components/search-and-filter/components/filter/filter-list.tsx","../src/components/search-and-filter/components/filter/css-class-filter.tsx","../src/components/search-and-filter/components/search/class-manager-search.tsx","../src/components/class-manager/class-manager-introduction.tsx","../src/components/class-manager/delete-class.ts","../src/components/class-manager/flipped-color-swatch-icon.tsx","../src/components/class-manager/global-classes-list.tsx","../src/hooks/use-ordered-classes.ts","../src/components/class-manager/class-item.tsx","../src/components/css-class-usage/components/css-class-usage-popover.tsx","../src/hooks/use-css-class-usage-by-id.ts","../src/components/css-class-usage/components/css-class-usage-trigger.tsx","../src/components/class-manager/delete-confirmation-dialog.tsx","../src/components/class-manager/sortable.tsx","../src/components/class-manager/not-found.tsx","../src/components/class-manager/panel-interactions.ts","../src/components/convert-local-class-to-global-class.tsx","../src/components/populate-store.tsx","../src/mcp-integration/index.ts","../src/mcp-integration/mcp-apply-unapply-global-classes.ts","../src/mcp-integration/mcp-create-global-class.ts","../src/mcp-integration/mcp-get-global-class-usages.ts","../src/mcp-integration/mcp-modify-global-class.ts","../src/sync-with-document.tsx","../src/sync-with-document-save.ts"],"sourcesContent":["export { GLOBAL_CLASSES_URI } from './mcp-integration/classes-resource';\n\nexport { init } from './init';\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\n\nexport const GLOBAL_CLASSES_URI = 'elementor://global-classes';\n\nexport const initClassesResource = () => {\n\tconst { mcpServer, resource, waitForReady } = getMCPByDomain( 'canvas' );\n\n\tresource(\n\t\t'global-classes',\n\t\tGLOBAL_CLASSES_URI,\n\t\t{\n\t\t\tdescription: 'Global classes list.',\n\t\t},\n\t\tasync () => {\n\t\t\treturn {\n\t\t\t\tcontents: [ { uri: GLOBAL_CLASSES_URI, text: localStorage[ 'elementor-global-classes' ] ?? {} } ],\n\t\t\t};\n\t\t}\n\t);\n\n\twaitForReady().then( () => {\n\t\tglobalClassesStylesProvider.subscribe( () => {\n\t\t\tmcpServer.sendResourceListChanged();\n\t\t} );\n\t} );\n};\n","import { generateId, type StyleDefinition, type StyleDefinitionVariant } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\nimport {\n\t__dispatch as dispatch,\n\t__getState as getState,\n\t__subscribeWithSelector as subscribeWithSelector,\n} from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { getCapabilities } from './capabilities';\nimport { GlobalClassLabelAlreadyExistsError, GlobalClassTrackingError } from './errors';\nimport {\n\tselectClass,\n\tselectData,\n\tselectGlobalClasses,\n\tselectOrderedClasses,\n\tslice,\n\ttype StateWithGlobalClasses,\n} from './store';\nimport { trackGlobalClasses, type TrackingEvent } from './utils/tracking';\n\nconst MAX_CLASSES = 100;\n\nexport const GLOBAL_CLASSES_PROVIDER_KEY = 'global-classes';\n\nexport const globalClassesStylesProvider = createStylesProvider( {\n\tkey: GLOBAL_CLASSES_PROVIDER_KEY,\n\tpriority: 30,\n\tlimit: MAX_CLASSES,\n\tlabels: {\n\t\tsingular: __( 'class', 'elementor' ),\n\t\tplural: __( 'classes', 'elementor' ),\n\t},\n\tsubscribe: ( cb ) => subscribeWithStates( cb ),\n\tcapabilities: getCapabilities(),\n\tactions: {\n\t\tall: () => {\n\t\t\tconst selectAllClasses = selectOrderedClasses( getState() );\n\t\t\tlocalStorage.setItem( 'elementor-global-classes', JSON.stringify( selectAllClasses ) );\n\t\t\treturn selectAllClasses;\n\t\t},\n\t\tget: ( id ) => selectClass( getState(), id ),\n\t\tresolveCssName: ( id: string ) => {\n\t\t\treturn selectClass( getState(), id )?.label ?? id;\n\t\t},\n\t\tcreate: ( label, variants: StyleDefinitionVariant[] = [] ) => {\n\t\t\tconst classes = selectGlobalClasses( getState() );\n\n\t\t\tconst existingLabels = Object.values( classes ).map( ( style ) => style.label );\n\n\t\t\tif ( existingLabels.includes( label ) ) {\n\t\t\t\tthrow new GlobalClassLabelAlreadyExistsError( { context: { label } } );\n\t\t\t}\n\n\t\t\tconst existingIds = Object.keys( classes );\n\t\t\tconst id = generateId( 'g-', existingIds );\n\n\t\t\tdispatch(\n\t\t\t\tslice.actions.add( {\n\t\t\t\t\tid,\n\t\t\t\t\ttype: 'class',\n\t\t\t\t\tlabel,\n\t\t\t\t\tvariants,\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\treturn id;\n\t\t},\n\t\tupdate: ( payload ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.update( {\n\t\t\t\t\tstyle: payload,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tdelete: ( id ) => {\n\t\t\tdispatch( slice.actions.delete( id ) );\n\t\t},\n\t\tupdateProps: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tprops: args.props,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tupdateCustomCss: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tcustom_css: args.custom_css,\n\t\t\t\t\tprops: {},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\ttracking: ( data: { event: string; [ key: string ]: unknown } ) => {\n\t\t\ttrackGlobalClasses( data as TrackingEvent ).catch( ( error ) => {\n\t\t\t\tthrow new GlobalClassTrackingError( { cause: error } );\n\t\t\t} );\n\t\t},\n\t},\n} );\n\nconst subscribeWithStates = (\n\tcb: ( previous: Record< string, StyleDefinition >, current: Record< string, StyleDefinition > ) => void\n) => {\n\tlet previousState = selectData( getState() );\n\n\treturn subscribeWithSelector(\n\t\t( state: StateWithGlobalClasses ) => state.globalClasses,\n\t\t( currentState ) => {\n\t\t\tcb( previousState.items, currentState.data.items );\n\t\t\tpreviousState = currentState.data;\n\t\t}\n\t);\n};\n","import { type UserCapabilities } from '@elementor/editor-styles-repository';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nconst EXPERIMENT_KEY = 'global_classes_should_enforce_capabilities';\nexport const UPDATE_CLASS_CAPABILITY_KEY = 'elementor_global_classes_update_class';\n\nexport const getCapabilities = (): UserCapabilities | undefined => {\n\tconst shouldEnforceCapabilities = isExperimentActive( EXPERIMENT_KEY );\n\n\tif ( shouldEnforceCapabilities ) {\n\t\treturn {\n\t\t\tupdate: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tcreate: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tdelete: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tupdateProps: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t};\n\t}\n};\n","import { createError } from '@elementor/utils';\n\nexport const GlobalClassNotFoundError = createError< { styleId: string } >( {\n\tcode: 'global_class_not_found',\n\tmessage: 'Global class not found.',\n} );\n\nexport const GlobalClassLabelAlreadyExistsError = createError< { label: string } >( {\n\tcode: 'global_class_label_already_exists',\n\tmessage: 'Class with this name already exists.',\n} );\n\nexport const GlobalClassTrackingError = createError< { cause: string } >( {\n\tcode: 'global_class_tracking_error',\n\tmessage: 'Error tracking global classes event.',\n} );\n","import { type Props } from '@elementor/editor-props';\nimport {\n\ttype CustomCss,\n\tgetVariantByMeta,\n\ttype StyleDefinition,\n\ttype StyleDefinitionID,\n\ttype StyleDefinitionVariant,\n} from '@elementor/editor-styles';\nimport { type UpdateActionPayload } from '@elementor/editor-styles-repository';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport type { ApiContext } from './api';\nimport { GlobalClassNotFoundError } from './errors';\nimport { SnapshotHistory } from './utils/snapshot-history';\n\nexport type GlobalClasses = {\n\titems: Record< StyleDefinitionID, StyleDefinition >;\n\torder: StyleDefinitionID[];\n};\n\ntype GlobalClassesState = {\n\tdata: GlobalClasses;\n\tinitialData: {\n\t\tfrontend: GlobalClasses;\n\t\tpreview: GlobalClasses;\n\t};\n\tisDirty: boolean;\n};\n\nexport type ModifiedLabels = {\n\t[ id: string ]: {\n\t\toriginal: string;\n\t\tmodified: string;\n\t};\n};\n\nconst localHistory = SnapshotHistory.get< GlobalClasses >( 'global-classes' );\n\nconst initialState: GlobalClassesState = {\n\tdata: { items: {}, order: [] },\n\tinitialData: {\n\t\tfrontend: { items: {}, order: [] },\n\t\tpreview: { items: {}, order: [] },\n\t},\n\tisDirty: false,\n};\n\nexport type StateWithGlobalClasses = SliceState< typeof slice >;\n\n// Slice\nconst SLICE_NAME = 'globalClasses';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tload(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload: { frontend, preview },\n\t\t\t}: PayloadAction< {\n\t\t\t\tfrontend: GlobalClasses;\n\t\t\t\tpreview: GlobalClasses;\n\t\t\t} >\n\t\t) {\n\t\t\tstate.initialData.frontend = frontend;\n\t\t\tstate.initialData.preview = preview;\n\t\t\tstate.data = preview;\n\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tadd( state, { payload }: PayloadAction< StyleDefinition > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tstate.data.items[ payload.id ] = payload;\n\t\t\tstate.data.order.unshift( payload.id );\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tdelete( state, { payload }: PayloadAction< StyleDefinitionID > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tstate.data.items = Object.fromEntries(\n\t\t\t\tObject.entries( state.data.items ).filter( ( [ id ] ) => id !== payload )\n\t\t\t);\n\n\t\t\tstate.data.order = state.data.order.filter( ( id ) => id !== payload );\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tsetOrder( state, { payload }: PayloadAction< StyleDefinitionID[] > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tstate.data.order = payload;\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tupdate( state, { payload }: PayloadAction< { style: UpdateActionPayload } > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tconst style = state.data.items[ payload.style.id ];\n\n\t\t\tconst mergedData = {\n\t\t\t\t...style,\n\t\t\t\t...payload.style,\n\t\t\t};\n\n\t\t\tstate.data.items[ payload.style.id ] = mergedData;\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tupdateMultiple( state, { payload }: PayloadAction< ModifiedLabels > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tObject.entries( payload ).forEach( ( [ id, { modified } ] ) => {\n\t\t\t\tstate.data.items[ id ].label = modified;\n\t\t\t} );\n\n\t\t\tstate.isDirty = false;\n\t\t},\n\t\tupdateProps(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload,\n\t\t\t}: PayloadAction< {\n\t\t\t\tid: StyleDefinitionID;\n\t\t\t\tmeta: StyleDefinitionVariant[ 'meta' ];\n\t\t\t\tprops: Props;\n\t\t\t\tcustom_css?: CustomCss | null;\n\t\t\t} >\n\t\t) {\n\t\t\tconst style = state.data.items[ payload.id ];\n\n\t\t\tif ( ! style ) {\n\t\t\t\tthrow new GlobalClassNotFoundError( { context: { styleId: payload.id } } );\n\t\t\t}\n\n\t\t\tlocalHistory.next( state.data );\n\n\t\t\tconst variant = getVariantByMeta( style, payload.meta );\n\t\t\tlet customCss = ( 'custom_css' in payload ? payload.custom_css : variant?.custom_css ) ?? null;\n\t\t\tcustomCss = customCss?.raw ? customCss : null;\n\n\t\t\tif ( variant ) {\n\t\t\t\t// mergeProps fails with Proxy objects from store, manually re-create clones\n\t\t\t\tconst variantProps = JSON.parse( JSON.stringify( variant.props ) ) as Props;\n\t\t\t\tconst payloadProps = JSON.parse( JSON.stringify( payload.props ) ) as Props;\n\t\t\t\tvariant.props = mergeProps( variantProps, payloadProps );\n\t\t\t\tvariant.custom_css = customCss;\n\n\t\t\t\tstyle.variants = getNonEmptyVariants( style );\n\t\t\t} else {\n\t\t\t\tstyle.variants.push( { meta: payload.meta, props: payload.props, custom_css: customCss } );\n\t\t\t}\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\treset( state, { payload: { context } }: PayloadAction< { context: ApiContext } > ) {\n\t\t\tif ( context === 'frontend' ) {\n\t\t\t\tlocalHistory.reset();\n\t\t\t\tstate.initialData.frontend = state.data;\n\n\t\t\t\tstate.isDirty = false;\n\t\t\t}\n\n\t\t\tstate.initialData.preview = state.data;\n\t\t},\n\n\t\tundo( state ) {\n\t\t\tif ( localHistory.isLast() ) {\n\t\t\t\tlocalHistory.next( state.data ); // store current before undo\n\t\t\t}\n\t\t\tconst data = localHistory.prev();\n\t\t\tif ( data ) {\n\t\t\t\tstate.data = data;\n\t\t\t\tstate.isDirty = true;\n\t\t\t} else {\n\t\t\t\tstate.data = state.initialData.preview;\n\t\t\t}\n\t\t},\n\n\t\tresetToInitialState( state, { payload: { context } }: PayloadAction< { context: ApiContext } > ) {\n\t\t\tlocalHistory.reset();\n\t\t\tstate.data = state.initialData[ context ];\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tredo( state ) {\n\t\t\tconst data = localHistory.next();\n\t\t\tif ( localHistory.isLast() ) {\n\t\t\t\tlocalHistory.prev();\n\t\t\t}\n\t\t\tif ( data ) {\n\t\t\t\tstate.data = data;\n\t\t\t\tstate.isDirty = true;\n\t\t\t}\n\t\t},\n\t},\n} );\n\nconst mergeProps = ( current: Props, updates: Props ): Props => {\n\t// edge case, the server returns an array instead of an object when empty props because of PHP array / object conversion\n\tconst props = Array.isArray( current ) ? {} : current;\n\n\tObject.entries( updates ).forEach( ( [ key, value ] ) => {\n\t\tif ( value === null || value === undefined ) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\tdelete props[ key ];\n\t\t} else {\n\t\t\tprops[ key ] = value;\n\t\t}\n\t} );\n\n\treturn props;\n};\n\nconst getNonEmptyVariants = ( style: StyleDefinition ) => {\n\treturn style.variants.filter(\n\t\t( { props, custom_css: customCss }: StyleDefinitionVariant ) => Object.keys( props ).length || customCss?.raw\n\t);\n};\n\n// Selectors\nexport const selectData = ( state: SliceState< typeof slice > ) => state[ SLICE_NAME ].data;\n\nexport const selectFrontendInitialData = ( state: SliceState< typeof slice > ) =>\n\tstate[ SLICE_NAME ].initialData.frontend;\n\nexport const selectPreviewInitialData = ( state: SliceState< typeof slice > ) =>\n\tstate[ SLICE_NAME ].initialData.preview;\n\nexport const selectOrder = createSelector( selectData, ( { order } ) => order );\n\nexport const selectGlobalClasses = createSelector( selectData, ( { items } ) => items );\n\nexport const selectIsDirty = ( state: SliceState< typeof slice > ) => state[ SLICE_NAME ].isDirty;\n\nexport const selectOrderedClasses = createSelector( selectGlobalClasses, selectOrder, ( items, order ) =>\n\torder.map( ( id ) => items[ id ] )\n);\n\nexport const selectClass = ( state: SliceState< typeof slice >, id: StyleDefinitionID ) =>\n\tstate[ SLICE_NAME ].data.items[ id ] ?? null;\n\nexport const selectEmptyCssClass = createSelector( selectData, ( { items } ) =>\n\tObject.values( items ).filter( ( cssClass ) => cssClass.variants.length === 0 )\n);\n","type Link< T > = {\n\tprev: Link< T > | null;\n\tnext: Link< T > | null;\n\tvalue: T;\n};\n\nfunction createLink< T >( { value, next, prev }: { value: T; prev?: Link< T >; next?: Link< T > } ): Link< T > {\n\treturn {\n\t\tvalue,\n\t\tprev: prev || null,\n\t\tnext: next || null,\n\t};\n}\n\nexport class SnapshotHistory< T > {\n\tprivate static registry: Record< string, SnapshotHistory< unknown > > = {};\n\n\tpublic static get< K >( namespace: string ): SnapshotHistory< K > {\n\t\tif ( ! SnapshotHistory.registry[ namespace ] ) {\n\t\t\tSnapshotHistory.registry[ namespace ] = new SnapshotHistory( namespace );\n\t\t}\n\t\treturn SnapshotHistory.registry[ namespace ] as SnapshotHistory< K >;\n\t}\n\n\tprivate first: Link< T > | null = null;\n\tprivate current: Link< T > | null = null;\n\n\tprivate constructor( public readonly namespace: string ) {}\n\n\tprivate transform( item: T ): T {\n\t\treturn JSON.parse( JSON.stringify( item ) );\n\t}\n\n\tpublic reset(): void {\n\t\tthis.first = this.current = null;\n\t}\n\n\tpublic prev(): T | null {\n\t\tif ( ! this.current || this.current === this.first ) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.current = this.current.prev;\n\t\treturn this.current?.value || null;\n\t}\n\n\tpublic isLast(): boolean {\n\t\treturn ! this.current || ! this.current.next;\n\t}\n\n\tpublic next( value?: T ): T | null {\n\t\tif ( value ) {\n\t\t\tif ( ! this.current ) {\n\t\t\t\tthis.first = createLink( { value: this.transform( value ) } );\n\t\t\t\tthis.current = this.first;\n\t\t\t\treturn this.current.value;\n\t\t\t}\n\t\t\tconst nextLink = createLink( {\n\t\t\t\tvalue: this.transform( value ),\n\t\t\t\tprev: this.current,\n\t\t\t} );\n\t\t\tthis.current.next = nextLink;\n\t\t\tthis.current = nextLink;\n\t\t\treturn this.current.value;\n\t\t}\n\n\t\t// No value skip to next without setting any\n\t\tif ( ! this.current || ! this.current.next ) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.current = this.current.next;\n\t\treturn this.current.value;\n\t}\n}\n","import { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { getMixpanel } from '@elementor/mixpanel';\nimport { __getState as getState } from '@elementor/store';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { GlobalClassTrackingError } from '../errors';\nimport { type FilterKey } from '../hooks/use-filtered-css-class-usage';\nimport { selectClass } from '../store';\n\ntype EventMap = {\n\tclassCreated: {\n\t\tsource?: 'created' | 'converted';\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle?: string;\n\t};\n\tclassDeleted: {\n\t\tclassId: StyleDefinitionID;\n\t\trunAction?: () => void;\n\t};\n\tclassRenamed: {\n\t\tclassId: StyleDefinitionID;\n\t\toldValue: string;\n\t\tnewValue: string;\n\t\tsource: 'class-manager' | 'style-tab';\n\t};\n\tclassApplied: {\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle: string;\n\t\ttotalInstancesAfterApply: number;\n\t};\n\tclassRemoved: {\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle: string;\n\t};\n\tclassStyled: {\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle: string;\n\t\tclassType: 'global' | 'local';\n\t};\n\tclassManagerOpened: {\n\t\tsource: 'style-panel';\n\t};\n\tclassManagerSearched: Record< string, never >;\n\tclassManagerFiltersOpened: Record< string, never >;\n\tclassManagerFilterUsed: {\n\t\taction: 'apply' | 'remove';\n\t\ttype: FilterKey;\n\t\ttrigger: 'menu' | 'header';\n\t};\n\tclassManagerFilterCleared: {\n\t\ttrigger: 'menu' | 'header';\n\t};\n\tclassManagerReorder: {\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle: string;\n\t};\n\tclassPublishConflict: {\n\t\tnumOfConflicts: number;\n\t};\n\tclassUsageHovered: {\n\t\tclassId: string;\n\t\tusage: number;\n\t};\n\tclassUsageClicked: {\n\t\tclassId: StyleDefinitionID;\n\t};\n\tclassUsageLocate: {\n\t\tclassId: StyleDefinitionID;\n\t};\n\tclassStateClicked: {\n\t\tclassId: StyleDefinitionID | null;\n\t\ttype: string;\n\t\tsource: 'global' | 'local';\n\t};\n};\n\nexport type TrackingEvent = {\n\t[ K in keyof EventMap ]: { event: K } & EventMap[ K ];\n}[ keyof EventMap ];\n\ntype TrackingEventWithComputed = TrackingEvent & {\n\tclassTitle?: string;\n\ttotalInstancesAfterApply?: number;\n\ttotalInstances?: number;\n};\n\nexport const trackGlobalClasses = async ( payload: TrackingEvent ) => {\n\tconst { runAction } = payload as TrackingEventWithComputed & { runAction?: () => void };\n\tconst data = await getSanitizedData( payload );\n\tif ( data ) {\n\t\ttrack( data );\n\t\tif ( data.event === 'classCreated' && 'classId' in data ) {\n\t\t\tfireClassApplied( data.classId as StyleDefinitionID );\n\t\t}\n\t}\n\trunAction?.();\n};\n\nconst fireClassApplied = async ( classId: StyleDefinitionID ) => {\n\tconst appliedInfo = await getAppliedInfo( classId );\n\ttrack( {\n\t\tevent: 'classApplied',\n\t\tclassId,\n\t\t...appliedInfo,\n\t\ttotalInstancesAfterApply: 1,\n\t} );\n};\n\nconst getSanitizedData = async ( payload: TrackingEvent ): Promise< Record< string, unknown > | undefined > => {\n\tswitch ( payload.event ) {\n\t\tcase 'classApplied':\n\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\tconst appliedInfo = await getAppliedInfo( payload.classId );\n\t\t\t\treturn { ...payload, ...appliedInfo };\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'classRemoved':\n\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\tconst deleteInfo = getRemovedInfo( payload.classId );\n\t\t\t\treturn { ...payload, ...deleteInfo };\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'classDeleted':\n\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\tconst deleteInfo = await trackDeleteClass( payload.classId );\n\t\t\t\treturn { ...payload, ...deleteInfo };\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'classCreated':\n\t\t\tif ( 'source' in payload && payload.source !== 'created' ) {\n\t\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\t\treturn { ...payload, classTitle: getCssClass( payload.classId ).label };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn payload;\n\t\tcase 'classStateClicked':\n\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\treturn { ...payload, classTitle: getCssClass( payload.classId ).label };\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn payload;\n\t}\n};\n\nconst track = ( data: Record< string, unknown > ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.global_classes?.[ data.event as keyof EventMap ] ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'Global class tracking event not found', { event: data.event } );\n\t\treturn;\n\t}\n\n\tconst name = config.names.global_classes[ data.event as keyof EventMap ];\n\tconst { event, ...eventData } = data;\n\n\ttry {\n\t\tdispatchEvent?.( name, {\n\t\t\tevent,\n\t\t\t...eventData,\n\t\t} );\n\t} catch ( error ) {\n\t\tthrow new GlobalClassTrackingError( { cause: error } );\n\t}\n};\n\nconst extractCssClassData = ( classId: StyleDefinitionID ) => {\n\tconst cssClass: StyleDefinition = getCssClass( classId );\n\tconst classTitle = cssClass.label;\n\n\treturn { classTitle };\n};\n\nconst getCssClass = ( classId: StyleDefinitionID ) => {\n\tconst cssClass = selectClass( getState(), classId );\n\tif ( ! cssClass ) {\n\t\tthrow new Error( `CSS class with ID ${ classId } not found` );\n\t}\n\treturn cssClass;\n};\n\nconst trackDeleteClass = async ( classId: StyleDefinitionID ) => {\n\tconst totalInstances = await getTotalInstancesByCssClassID( classId );\n\tconst classTitle = getCssClass( classId ).label;\n\treturn { totalInstances, classTitle };\n};\n\nconst getTotalInstancesByCssClassID = async ( classId: StyleDefinitionID ) => {\n\tconst cssClassUsage = await fetchCssClassUsage();\n\treturn cssClassUsage[ classId ]?.total ?? 1;\n};\n\nconst getAppliedInfo = async ( classId: StyleDefinitionID ) => {\n\tconst { classTitle } = extractCssClassData( classId );\n\tconst totalInstancesAfterApply = ( await getTotalInstancesByCssClassID( classId ) ) + 1;\n\treturn { classTitle, totalInstancesAfterApply };\n};\n\nconst getRemovedInfo = ( classId: StyleDefinitionID ) => {\n\tconst { classTitle } = extractCssClassData( classId );\n\treturn {\n\t\tclassTitle,\n\t};\n};\n","import { type StyleDefinition, type StyleDefinitionID, type StyleDefinitionsMap } from '@elementor/editor-styles';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type CssClassUsage } from './components/css-class-usage/types';\nimport { type GlobalClasses } from './store';\n\nconst RESOURCE_URL = '/global-classes';\nconst BASE_URL = 'elementor/v1';\nconst RESOURCE_USAGE_URL = `${ RESOURCE_URL }/usage`;\n\ntype GlobalClassesUsageResponse = HttpResponse< CssClassUsage >;\n\nexport type GlobalClassesGetAllResponse = HttpResponse<\n\tStyleDefinitionsMap,\n\t{\n\t\torder: StyleDefinition[ 'id' ][];\n\t}\n>;\n\ntype UpdatePayload = GlobalClasses & {\n\tchanges: {\n\t\tadded: StyleDefinitionID[];\n\t\tdeleted: StyleDefinitionID[];\n\t\tmodified: StyleDefinitionID[];\n\t};\n};\n\nexport type ApiContext = 'preview' | 'frontend';\n\nexport const apiClient = {\n\tusage: () => httpService().get< GlobalClassesUsageResponse >( `${ BASE_URL }${ RESOURCE_USAGE_URL }` ),\n\n\tall: ( context: ApiContext = 'preview' ) =>\n\t\thttpService().get< GlobalClassesGetAllResponse >( `${ BASE_URL }${ RESOURCE_URL }`, {\n\t\t\tparams: { context },\n\t\t} ),\n\n\tpublish: ( payload: UpdatePayload ) =>\n\t\thttpService().put( 'elementor/v1' + RESOURCE_URL, payload, {\n\t\t\tparams: {\n\t\t\t\tcontext: 'frontend' satisfies ApiContext,\n\t\t\t},\n\t\t} ),\n\n\tsaveDraft: ( payload: UpdatePayload ) =>\n\t\thttpService().put( 'elementor/v1' + RESOURCE_URL, payload, {\n\t\t\tparams: {\n\t\t\t\tcontext: 'preview' satisfies ApiContext,\n\t\t\t},\n\t\t} ),\n};\n\nexport const API_ERROR_CODES = {\n\tDUPLICATED_LABEL: 'DUPLICATED_LABEL',\n};\n","import type { CssClassUsage, EnhancedCssClassUsage } from './types';\n\nexport const transformData = ( data: CssClassUsage ): EnhancedCssClassUsage =>\n\tObject.entries( data ).reduce< EnhancedCssClassUsage >( ( acc, [ key, value ] ) => {\n\t\tacc[ key ] = {\n\t\t\tcontent: value || [],\n\t\t\ttotal: value.reduce( ( total, val ) => total + ( val?.total || 0 ), 0 ),\n\t\t};\n\t\treturn acc;\n\t}, {} );\n","import { apiClient } from '../src/api';\nimport type { EnhancedCssClassUsage } from '../src/components/css-class-usage/types';\nimport { transformData } from '../src/components/css-class-usage/utils';\n\nexport const fetchCssClassUsage = async (): Promise< EnhancedCssClassUsage > => {\n\tconst response = await apiClient.usage();\n\treturn transformData( response?.data?.data || {} );\n};\n","import { injectIntoLogic } from '@elementor/editor';\nimport {\n\tinjectIntoClassSelectorActions,\n\tinjectIntoCssClassConvert,\n\tregisterStyleProviderToColors,\n} from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __registerSlice as registerSlice } from '@elementor/store';\n\nimport { ClassManagerButton } from './components/class-manager/class-manager-button';\nimport { panel } from './components/class-manager/class-manager-panel';\nimport { ConvertLocalClassToGlobalClass } from './components/convert-local-class-to-global-class';\nimport { PopulateStore } from './components/populate-store';\nimport { GLOBAL_CLASSES_PROVIDER_KEY, globalClassesStylesProvider } from './global-classes-styles-provider';\nimport { PrefetchCssClassUsage } from './hooks/use-prefetch-css-class-usage';\nimport { initMcpIntegration } from './mcp-integration';\nimport { slice } from './store';\nimport { SyncWithDocumentSave } from './sync-with-document';\n\nexport function init() {\n\tregisterSlice( slice );\n\tregisterPanel( panel );\n\n\tstylesRepository.register( globalClassesStylesProvider );\n\n\tinjectIntoLogic( {\n\t\tid: 'global-classes-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'global-classes-sync-with-document',\n\t\tcomponent: SyncWithDocumentSave,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'global-classes-prefetch-css-class-usage',\n\t\tcomponent: PrefetchCssClassUsage,\n\t} );\n\n\tinjectIntoCssClassConvert( {\n\t\tid: 'global-classes-convert-from-local-class',\n\t\tcomponent: ConvertLocalClassToGlobalClass,\n\t} );\n\n\tinjectIntoClassSelectorActions( {\n\t\tid: 'global-classes-manager-button',\n\t\tcomponent: ClassManagerButton,\n\t} );\n\n\tregisterStyleProviderToColors( GLOBAL_CLASSES_PROVIDER_KEY, {\n\t\tname: 'global',\n\t\tgetThemeColor: ( theme ) => theme.palette.global.dark,\n\t} );\n\n\tinitMcpIntegration();\n}\n","import * as React from 'react';\nimport {\n\t__useActiveDocument as useActiveDocument,\n\t__useActiveDocumentActions as useActiveDocumentActions,\n} from '@elementor/editor-documents';\nimport { useUserStylesCapability } from '@elementor/editor-styles-repository';\nimport { SaveChangesDialog, useDialog } from '@elementor/editor-ui';\nimport { IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { globalClassesStylesProvider } from '../../global-classes-styles-provider';\nimport { usePrefetchCssClassUsage } from '../../hooks/use-prefetch-css-class-usage';\nimport { trackGlobalClasses } from '../../utils/tracking';\nimport { usePanelActions } from './class-manager-panel';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\n\nconst trackGlobalClassesButton = () => {\n\ttrackGlobalClasses( {\n\t\tevent: 'classManagerOpened',\n\t\tsource: 'style-panel',\n\t} );\n};\n\nexport const ClassManagerButton = () => {\n\tconst document = useActiveDocument();\n\tconst { open: openPanel } = usePanelActions();\n\tconst { save: saveDocument } = useActiveDocumentActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\tconst { prefetchClassesUsage } = usePrefetchCssClassUsage();\n\n\tconst { userCan } = useUserStylesCapability();\n\n\tconst isUserAllowedToUpdateClass = userCan( globalClassesStylesProvider.getKey() ).update;\n\n\tif ( ! isUserAllowedToUpdateClass ) {\n\t\treturn null;\n\t}\n\n\tconst handleOpenPanel = () => {\n\t\tif ( document?.isDirty ) {\n\t\t\topenSaveChangesDialog();\n\t\t\treturn;\n\t\t}\n\n\t\topenPanel();\n\t\ttrackGlobalClassesButton();\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classManagerOpened',\n\t\t\tsource: 'style-panel',\n\t\t} );\n\t\tprefetchClassesUsage();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip title={ __( 'Class Manager', 'elementor' ) } placement=\"top\">\n\t\t\t\t<IconButton size=\"tiny\" onClick={ handleOpenPanel } sx={ { marginInlineEnd: -0.75 } }>\n\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<SaveChangesDialog.Title>{ __( 'You have unsaved changes', 'elementor' ) }</SaveChangesDialog.Title>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText sx={ { mb: 2 } }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\"To open the Class Manager, save your page first. You can't continue without saving.\",\n\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tcancel: {\n\t\t\t\t\t\t\t\tlabel: __( 'Stay here', 'elementor' ),\n\t\t\t\t\t\t\t\taction: closeSaveChangesDialog,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tawait saveDocument();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\topenPanel();\n\t\t\t\t\t\t\t\t\ttrackGlobalClassesButton();\n\t\t\t\t\t\t\t\t\tprefetchClassesUsage();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</>\n\t);\n};\n","import { useQueryClient } from '@elementor/query';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { QUERY_KEY } from '../components/css-class-usage/types';\n\nexport function usePrefetchCssClassUsage() {\n\tconst queryClient = useQueryClient();\n\n\tconst prefetchClassesUsage = () =>\n\t\tqueryClient.prefetchQuery( {\n\t\t\tqueryKey: [ QUERY_KEY ],\n\t\t\tqueryFn: fetchCssClassUsage,\n\t\t} );\n\n\treturn { prefetchClassesUsage };\n}\n\nexport const PrefetchCssClassUsage = () => {\n\tconst { prefetchClassesUsage } = usePrefetchCssClassUsage();\n\tprefetchClassesUsage();\n\treturn null;\n};\n","export const QUERY_KEY = 'css-classes-usage';\n\nexport type CssClassID = string;\n\nexport type ContentType = 'header' | 'footer' | 'wp-page' | 'wp-post' | 'popup';\n\nexport type CssClassUsageContent = {\n\telements: string[];\n\tpageId: string;\n\ttotal: number;\n\ttitle: string;\n\ttype: ContentType;\n};\n\nexport type CssClassUsage = Record< CssClassID, Array< CssClassUsageContent > >;\n\nexport type EnhancedCssClassUsageContent = { content: Array< CssClassUsageContent >; total: number };\n\nexport type EnhancedCssClassUsage = Record< CssClassID, EnhancedCssClassUsageContent >;\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport {\n\t__createPanel as createPanel,\n\tPanel,\n\tPanelBody,\n\tPanelFooter,\n\tPanelHeader,\n\tPanelHeaderTitle,\n} from '@elementor/editor-panels';\nimport { SaveChangesDialog, ThemeProvider, useDialog } from '@elementor/editor-ui';\nimport { changeEditMode } from '@elementor/editor-v1-adapters';\nimport { XIcon } from '@elementor/icons';\nimport { useMutation } from '@elementor/query';\nimport { __dispatch as dispatch } from '@elementor/store';\nimport {\n\tAlert,\n\tBox,\n\tButton,\n\tChip,\n\tDialogHeader,\n\tDivider,\n\tErrorBoundary,\n\tIconButton,\n\ttype IconButtonProps,\n\tStack,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useDirtyState } from '../../hooks/use-dirty-state';\nimport { useFilters } from '../../hooks/use-filters';\nimport { saveGlobalClasses } from '../../save-global-classes';\nimport { slice } from '../../store';\nimport { ActiveFilters } from '../search-and-filter/components/filter/active-filters';\nimport { CssClassFilter } from '../search-and-filter/components/filter/css-class-filter';\nimport { ClassManagerSearch } from '../search-and-filter/components/search/class-manager-search';\nimport { SearchAndFilterProvider } from '../search-and-filter/context';\nimport { ClassManagerIntroduction } from './class-manager-introduction';\nimport { hasDeletedItems, onDelete } from './delete-class';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { GlobalClassesList } from './global-classes-list';\nimport { blockPanelInteractions, unblockPanelInteractions } from './panel-interactions';\n\nconst id = 'global-classes-manager';\n\n// We need to disable the app-bar buttons, and the elements overlays when opening the classes manager panel.\n// The buttons and overlays are enabled only in edit mode, so we're creating a custom new edit mode that\n// will force them to be disabled. We can't use the `preview` edit mode in this case since it'll force\n// the panel to be closed.\nexport const { panel, usePanelActions } = createPanel( {\n\tid,\n\tcomponent: ClassManagerPanel,\n\tallowedEditModes: [ 'edit', id ],\n\tonOpen: () => {\n\t\tchangeEditMode( id );\n\n\t\tblockPanelInteractions();\n\t},\n\tonClose: () => {\n\t\tchangeEditMode( 'edit' );\n\n\t\tunblockPanelInteractions();\n\t},\n\tisOpenPreviousElement: true,\n} );\n\nexport function ClassManagerPanel() {\n\tconst isDirty = useDirtyState();\n\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst { mutateAsync: publish, isPending: isPublishing } = usePublish();\n\n\tconst resetAndClosePanel = () => {\n\t\tdispatch( slice.actions.resetToInitialState( { context: 'frontend' } ) );\n\t\tcloseSaveChangesDialog();\n\t};\n\n\tusePreventUnload();\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<ErrorBoundary fallback={ <ErrorBoundaryFallback /> }>\n\t\t\t\t<Panel>\n\t\t\t\t\t<SearchAndFilterProvider>\n\t\t\t\t\t\t<PanelHeader>\n\t\t\t\t\t\t\t<Stack p={ 1 } pl={ 2 } width=\"100%\" direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t\t\t<Stack width=\"100%\" direction=\"row\" gap={ 1 }>\n\t\t\t\t\t\t\t\t\t<PanelHeaderTitle sx={ { display: 'flex', alignItems: 'center', gap: 0.5 } }>\n\t\t\t\t\t\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Class Manager', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t\t\t<TotalCssClassCounter />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\t\tdisabled={ isPublishing }\n\t\t\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\t\t\tif ( isDirty ) {\n\t\t\t\t\t\t\t\t\t\t\topenSaveChangesDialog();\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</PanelHeader>\n\t\t\t\t\t\t<PanelBody\n\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Box px={ 2 } pb={ 1 }>\n\t\t\t\t\t\t\t\t<Stack direction=\"row\" justifyContent=\"spaceBetween\" gap={ 0.5 } sx={ { pb: 0.5 } }>\n\t\t\t\t\t\t\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t\t\t\t\t\t\t<ClassManagerSearch />\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t<CssClassFilter />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<ActiveFilters />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Divider />\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tpx={ 2 }\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GlobalClassesList disabled={ isPublishing } />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</PanelBody>\n\n\t\t\t\t\t\t<PanelFooter>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\t\tonClick={ publish }\n\t\t\t\t\t\t\t\tdisabled={ ! isDirty }\n\t\t\t\t\t\t\t\tloading={ isPublishing }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</PanelFooter>\n\t\t\t\t\t</SearchAndFilterProvider>\n\t\t\t\t</Panel>\n\t\t\t</ErrorBoundary>\n\t\t\t<ClassManagerIntroduction />\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<DialogHeader onClose={ closeSaveChangesDialog } logo={ false }>\n\t\t\t\t\t\t<SaveChangesDialog.Title>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.Title>\n\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes in the Class Manager.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'To avoid losing your updates, save your changes before leaving.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tdiscard: {\n\t\t\t\t\t\t\t\tlabel: __( 'Discard', 'elementor' ),\n\t\t\t\t\t\t\t\taction: () => {\n\t\t\t\t\t\t\t\t\tresetAndClosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tawait publish();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</ThemeProvider>\n\t);\n}\n\nconst CloseButton = ( { onClose, ...props }: IconButtonProps & { onClose: () => void } ) => (\n\t<IconButton size=\"small\" color=\"secondary\" onClick={ onClose } aria-label=\"Close\" { ...props }>\n\t\t<XIcon fontSize=\"small\" />\n\t</IconButton>\n);\n\nconst ErrorBoundaryFallback = () => (\n\t<Box role=\"alert\" sx={ { minHeight: '100%', p: 2 } }>\n\t\t<Alert severity=\"error\" sx={ { mb: 2, maxWidth: 400, textAlign: 'center' } }>\n\t\t\t<strong>{ __( 'Something went wrong', 'elementor' ) }</strong>\n\t\t</Alert>\n\t</Box>\n);\n\nconst usePreventUnload = () => {\n\tconst isDirty = useDirtyState();\n\n\tuseEffect( () => {\n\t\tconst handleBeforeUnload = ( event: BeforeUnloadEvent ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener( 'beforeunload', handleBeforeUnload );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'beforeunload', handleBeforeUnload );\n\t\t};\n\t}, [ isDirty ] );\n};\n\nconst usePublish = () => {\n\treturn useMutation( {\n\t\tmutationFn: () => saveGlobalClasses( { context: 'frontend' } ),\n\t\tonSuccess: async () => {\n\t\t\tsetDocumentModifiedStatus( false );\n\n\t\t\tif ( hasDeletedItems() ) {\n\t\t\t\tawait onDelete();\n\t\t\t}\n\t\t},\n\t} );\n};\n\nconst TotalCssClassCounter = () => {\n\tconst filters = useFilters();\n\tconst cssClasses = useClassesOrder();\n\n\treturn (\n\t\t<Chip\n\t\t\tsize={ 'small' }\n\t\t\tlabel={ filters ? `${ filters.length } / ${ cssClasses?.length }` : cssClasses?.length }\n\t\t/>\n\t);\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectOrder } from '../store';\n\nexport const useClassesOrder = () => {\n\treturn useSelector( selectOrder );\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectIsDirty } from '../store';\n\nexport const useDirtyState = () => {\n\treturn useSelector( selectIsDirty );\n};\n","import { useMemo } from 'react';\n\nimport { useSearchAndFilters } from '../components/search-and-filter/context';\nimport { type FilterKey, useFilteredCssClassUsage } from './use-filtered-css-class-usage';\n\nexport const useFilters = () => {\n\tconst {\n\t\tfilters: { filters },\n\t} = useSearchAndFilters();\n\tconst allFilters = useFilteredCssClassUsage();\n\n\treturn useMemo( () => {\n\t\tconst activeEntries = Object.entries( filters ).filter( ( [ , isActive ] ) => isActive ) as [\n\t\t\tFilterKey,\n\t\t\ttrue,\n\t\t][];\n\n\t\tif ( activeEntries.length === 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn activeEntries.reduce< string[] >( ( acc, [ key ], index ) => {\n\t\t\tconst current = allFilters[ key ] || [];\n\t\t\tif ( index === 0 ) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn acc.filter( ( val ) => current.includes( val ) );\n\t\t}, [] );\n\t}, [ filters, allFilters ] );\n};\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { useDebounceState } from '@elementor/utils';\n\nexport type CheckedFilters = {\n\tempty: boolean;\n\tonThisPage: boolean;\n\tunused: boolean;\n};\n\ntype SearchContextType = {\n\tdebouncedValue: string;\n\tinputValue: string;\n\thandleChange: ( value: string ) => void;\n\tonClearSearch: () => void;\n};\ntype FilterAndSortContextType = {\n\tfilters: CheckedFilters;\n\tsetFilters: React.Dispatch< React.SetStateAction< CheckedFilters > >;\n\tonClearFilter: ( type?: 'menu' | 'header' ) => void;\n};\n\nexport type SearchAndFilterContextType = {\n\tsearch: SearchContextType;\n\tfilters: FilterAndSortContextType;\n};\n\nconst SearchAndFilterContext = createContext< SearchAndFilterContextType | undefined >( undefined );\n\nconst INIT_CHECKED_FILTERS: CheckedFilters = {\n\tempty: false,\n\tonThisPage: false,\n\tunused: false,\n};\n\nexport const SearchAndFilterProvider = ( { children }: React.PropsWithChildren ) => {\n\tconst [ filters, setFilters ] = React.useState< CheckedFilters >( INIT_CHECKED_FILTERS );\n\n\tconst getInitialSearchValue = () => {\n\t\tconst storedValue = localStorage.getItem( 'elementor-global-classes-search' );\n\t\tif ( storedValue ) {\n\t\t\tlocalStorage.removeItem( 'elementor-global-classes-search' );\n\t\t\treturn storedValue;\n\t\t}\n\t\treturn '';\n\t};\n\n\tconst { debouncedValue, inputValue, handleChange } = useDebounceState( {\n\t\tdelay: 300,\n\t\tinitialValue: getInitialSearchValue(),\n\t} );\n\n\tconst onClearSearch = () => {\n\t\thandleChange( '' );\n\t};\n\n\tconst onClearFilter = () => {\n\t\tsetFilters( INIT_CHECKED_FILTERS );\n\t};\n\n\treturn (\n\t\t<SearchAndFilterContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tsearch: {\n\t\t\t\t\tdebouncedValue,\n\t\t\t\t\tinputValue,\n\t\t\t\t\thandleChange,\n\t\t\t\t\tonClearSearch,\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\tfilters,\n\t\t\t\t\tsetFilters,\n\t\t\t\t\tonClearFilter,\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</SearchAndFilterContext.Provider>\n\t);\n};\n\nexport const useSearchAndFilters = () => {\n\tconst context = useContext( SearchAndFilterContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useSearchContext must be used within a SearchContextProvider' );\n\t}\n\treturn context;\n};\n","import { useMemo } from 'react';\nimport { __useActiveDocument as useActiveDocument } from '@elementor/editor-documents';\n\nimport { type CssClassUsageContent, type EnhancedCssClassUsage } from '../components/css-class-usage/types';\nimport { useCssClassUsage } from './use-css-class-usage';\nimport { useAllCssClassesIDs, useEmptyCssClass } from './use-empty-css-class';\n\nexport type FilterKey = 'empty' | 'onThisPage' | 'unused';\n\ntype FilteredCssClassUsage = Record< FilterKey, string[] >;\n\nconst findCssClassKeysByPageID = ( data: EnhancedCssClassUsage, pageId: number ) => {\n\tconst result: string[] = [];\n\tfor ( const key in data ) {\n\t\tdata[ key ].content.forEach( ( content: CssClassUsageContent ) => {\n\t\t\tif ( +content.pageId === pageId ) {\n\t\t\t\tresult.push( key );\n\t\t\t}\n\t\t} );\n\t}\n\treturn result;\n};\n\nconst getUnusedClasses = ( usedCssClass: string[], potentialUnused: string[] ): string[] => {\n\tconst set = new Set( usedCssClass );\n\treturn potentialUnused.filter( ( cssClass: string ) => ! set.has( cssClass ) );\n};\n\nconst EMPTY_FILTERED_CSS_CLASS_RESPONSE: FilteredCssClassUsage = {\n\tempty: [],\n\tonThisPage: [],\n\tunused: [],\n};\n\nexport const useFilteredCssClassUsage = (): FilteredCssClassUsage => {\n\tconst document = useActiveDocument();\n\tconst emptyCssClasses = useEmptyCssClass();\n\tconst { data, isLoading } = useCssClassUsage();\n\tconst listOfCssClasses = useAllCssClassesIDs();\n\n\tconst emptyCssClassesIDs = useMemo( () => emptyCssClasses.map( ( { id } ) => id ), [ emptyCssClasses ] );\n\n\tconst onThisPage = useMemo( () => {\n\t\tif ( ! data || ! document ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn findCssClassKeysByPageID( data, document.id );\n\t}, [ data, document ] );\n\n\tconst unused = useMemo( () => {\n\t\tif ( ! data ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn getUnusedClasses( Object.keys( data ), listOfCssClasses );\n\t}, [ data, listOfCssClasses ] );\n\n\tif ( isLoading || ! data || ! document ) {\n\t\treturn EMPTY_FILTERED_CSS_CLASS_RESPONSE;\n\t}\n\n\treturn {\n\t\tonThisPage,\n\t\tunused,\n\t\tempty: emptyCssClassesIDs,\n\t};\n};\n","import { useQuery, type UseQueryResult } from '@elementor/query';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { type EnhancedCssClassUsage, QUERY_KEY } from '../components/css-class-usage/types';\n\nexport const useCssClassUsage = (): UseQueryResult< EnhancedCssClassUsage > => {\n\treturn useQuery( {\n\t\tqueryKey: [ QUERY_KEY ],\n\t\tqueryFn: fetchCssClassUsage,\n\t\trefetchOnMount: false,\n\t\trefetchOnWindowFocus: true,\n\t} );\n};\n","import { __useSelector } from '@elementor/store';\n\nimport { selectEmptyCssClass, selectGlobalClasses } from '../store';\n\nexport const useEmptyCssClass = () => {\n\treturn __useSelector( selectEmptyCssClass );\n};\n\nexport const useAllCssClassesIDs = () => {\n\tconst cssClasses = __useSelector( selectGlobalClasses );\n\treturn Object.keys( cssClasses );\n};\n","import * as React from 'react';\nimport { openDialog } from '@elementor/editor-ui';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { hash } from '@elementor/utils';\n\nimport { API_ERROR_CODES, apiClient, type ApiContext } from './api';\nimport { DuplicateLabelDialog } from './components/class-manager/duplicate-label-dialog';\nimport { type GlobalClasses, selectData, selectFrontendInitialData, selectPreviewInitialData, slice } from './store';\nimport { trackGlobalClasses } from './utils/tracking';\n\ntype Options = {\n\tcontext: ApiContext;\n\tonApprove?: () => void;\n};\n\nexport async function saveGlobalClasses( { context, onApprove }: Options ) {\n\tconst state = selectData( getState() );\n\tconst apiAction = context === 'preview' ? apiClient.saveDraft : apiClient.publish;\n\tconst currentContext = context === 'preview' ? selectPreviewInitialData : selectFrontendInitialData;\n\tconst response = await apiAction( {\n\t\titems: state.items,\n\t\torder: state.order,\n\t\tchanges: calculateChanges( state, currentContext( getState() ) ),\n\t} );\n\n\tdispatch( slice.actions.reset( { context } ) );\n\tif ( response?.data?.data?.code === API_ERROR_CODES.DUPLICATED_LABEL ) {\n\t\tdispatch( slice.actions.updateMultiple( response.data.data.modifiedLabels ) );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classPublishConflict',\n\t\t\tnumOfConflicts: Object.keys( response.data.data.modifiedLabels ).length,\n\t\t} );\n\t\topenDialog( {\n\t\t\tcomponent: (\n\t\t\t\t<DuplicateLabelDialog\n\t\t\t\t\tmodifiedLabels={ response.data.data.modifiedLabels || [] }\n\t\t\t\t\tonApprove={ onApprove }\n\t\t\t\t/>\n\t\t\t),\n\t\t} );\n\t}\n}\n\nfunction calculateChanges( state: GlobalClasses, initialData: GlobalClasses ) {\n\tconst stateIds = Object.keys( state.items );\n\tconst initialDataIds = Object.keys( initialData.items );\n\n\treturn {\n\t\tadded: stateIds.filter( ( id ) => ! initialDataIds.includes( id ) ),\n\t\tdeleted: initialDataIds.filter( ( id ) => ! stateIds.includes( id ) ),\n\t\tmodified: stateIds.filter( ( id ) => {\n\t\t\treturn id in initialData.items && hash( state.items[ id ] ) !== hash( initialData.items[ id ] );\n\t\t} ),\n\t};\n}\n","import * as React from 'react';\nimport { closeDialog, EllipsisWithTooltip } from '@elementor/editor-ui';\nimport { InfoCircleFilledIcon } from '@elementor/icons';\nimport {\n\tAlert,\n\tBox,\n\tButton,\n\tDialogActions,\n\tDialogContent,\n\tDialogHeader,\n\tDivider,\n\tIcon,\n\tStack,\n\tTypography,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type ModifiedLabels } from '../../store';\n\nconst DUP_PREFIX = 'DUP_';\n\nexport const DuplicateLabelDialog = ( {\n\tmodifiedLabels,\n\tonApprove,\n}: {\n\tmodifiedLabels: ModifiedLabels;\n\tonApprove?: () => void;\n} ) => {\n\tconst handleButtonClick = () => {\n\t\tlocalStorage.setItem( 'elementor-global-classes-search', DUP_PREFIX );\n\t\tonApprove?.();\n\t\tcloseDialog();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<DialogHeader logo={ false }>\n\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t\t<Icon color=\"secondary\">\n\t\t\t\t\t\t<InfoCircleFilledIcon fontSize=\"medium\" />\n\t\t\t\t\t</Icon>\n\t\t\t\t\t<Typography variant=\"subtitle1\">\n\t\t\t\t\t\t{ __( \"We've published your page and updated class names.\", 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</DialogHeader>\n\t\t\t<DialogContent>\n\t\t\t\t<Stack spacing={ 2 } direction=\"column\">\n\t\t\t\t\t<Typography variant=\"body2\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Some new classes used the same names as existing ones. To prevent conflicts, we added the prefix',\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<strong> { DUP_PREFIX }</strong>\n\t\t\t\t\t</Typography>\n\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t\tflexShrink: 1,\n\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Before', 'elementor' ) }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tminWidth: '200px',\n\t\t\t\t\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\tflexGrow: 0,\n\t\t\t\t\t\t\t\t\twidth: '200px',\n\t\t\t\t\t\t\t\t\tmaxWidth: '200px',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'After', 'elementor' ) }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Divider sx={ { mt: 0.5, mb: 0.5 } } />\n\t\t\t\t\t\t<Stack direction=\"column\" gap={ 0.5 } sx={ { pb: 2 } }>\n\t\t\t\t\t\t\t{ Object.values( modifiedLabels ).map( ( { original, modified }, index ) => (\n\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t\t\t\tflexShrink: 1,\n\t\t\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<EllipsisWithTooltip title={ original }>\n\t\t\t\t\t\t\t\t\t\t\t<Typography variant=\"body2\" sx={ { color: 'text.secondary' } }>\n\t\t\t\t\t\t\t\t\t\t\t\t{ original }\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t</EllipsisWithTooltip>\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\tminWidth: '200px',\n\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\tflexGrow: 0,\n\t\t\t\t\t\t\t\t\t\t\twidth: '200px',\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: '200px',\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<EllipsisWithTooltip title={ modified }>\n\t\t\t\t\t\t\t\t\t\t\t<Typography variant=\"body2\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t\t\t\t\t\t\t{ modified }\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t</EllipsisWithTooltip>\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Alert severity=\"info\" size=\"small\" color=\"secondary\">\n\t\t\t\t\t\t\t\t<strong>{ __( 'Your designs and classes are safe.', 'elementor' ) }</strong>\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'Only the prefixes were added. Find them in Class Manager by searching',\n\t\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t<strong>{ DUP_PREFIX }</strong>\n\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t</Stack>\n\t\t\t</DialogContent>\n\t\t\t<DialogActions>\n\t\t\t\t<Button color=\"secondary\" variant=\"text\" onClick={ handleButtonClick }>\n\t\t\t\t\t{ __( 'Go to Class Manager', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button color=\"secondary\" variant=\"contained\" onClick={ closeDialog }>\n\t\t\t\t\t{ __( 'Done', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</DialogActions>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { Chip, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { FilterKey } from '../../../../hooks/use-filtered-css-class-usage';\nimport { trackGlobalClasses } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\nimport { ClearIconButton } from './clear-icon-button';\nimport { filterConfig } from './filter-list';\n\nexport const ActiveFilters = () => {\n\tconst {\n\t\tfilters: { filters, setFilters },\n\t} = useSearchAndFilters();\n\n\tconst handleRemove = ( key: FilterKey ) => {\n\t\tsetFilters( ( prev ) => ( { ...prev, [ key ]: false } ) );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classManagerFilterUsed',\n\t\t\taction: 'remove',\n\t\t\ttype: key,\n\t\t\ttrigger: 'header',\n\t\t} );\n\t};\n\n\tconst activeKeys = Object.keys( filters ).filter( ( key ): key is FilterKey => filters[ key as FilterKey ] );\n\n\tconst showClearIcon = activeKeys.length > 0;\n\n\treturn (\n\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n\t\t\t<Stack direction=\"row\" gap={ 0.5 } alignItems=\"center\" flexWrap=\"wrap\">\n\t\t\t\t{ activeKeys.map( ( key ) => (\n\t\t\t\t\t<Chip\n\t\t\t\t\t\tkey={ key }\n\t\t\t\t\t\tlabel={ filterConfig[ key ] }\n\t\t\t\t\t\tonDelete={ () => handleRemove( key ) }\n\t\t\t\t\t\tsx={ chipSx }\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</Stack>\n\t\t\t{ showClearIcon && (\n\t\t\t\t<ClearIconButton\n\t\t\t\t\ttrigger=\"header\"\n\t\t\t\t\ttooltipText={ __( 'Clear Filters', 'elementor' ) }\n\t\t\t\t\tsx={ { margin: '0 0 auto auto' } }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Stack>\n\t);\n};\n\nconst chipSx = {\n\t'& .MuiChip-deleteIcon': {\n\t\tdisplay: 'none',\n\t\ttransition: 'opacity 0.2s',\n\t},\n\t'&:hover .MuiChip-deleteIcon': {\n\t\tdisplay: 'block',\n\t},\n};\n","import * as React from 'react';\nimport { BrushBigIcon } from '@elementor/icons';\nimport { Box, IconButton, styled, type SxProps, type Theme, Tooltip } from '@elementor/ui';\n\nimport { trackGlobalClasses } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\n\ntype ClearIconButtonProps = { tooltipText: React.ReactNode; sx?: SxProps< Theme >; trigger: 'menu' | 'header' };\n\nexport const ClearIconButton = ( { tooltipText, sx, trigger }: ClearIconButtonProps ) => {\n\tconst {\n\t\tfilters: { onClearFilter },\n\t} = useSearchAndFilters();\n\n\tconst handleClearFilters = () => {\n\t\tonClearFilter( trigger );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classManagerFilterCleared',\n\t\t\ttrigger,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Tooltip title={ tooltipText } placement=\"top\" disableInteractive>\n\t\t\t<Box>\n\t\t\t\t<CustomIconButton aria-label={ tooltipText } size=\"tiny\" onClick={ handleClearFilters } sx={ sx }>\n\t\t\t\t\t<BrushBigIcon fontSize=\"tiny\" />\n\t\t\t\t</CustomIconButton>\n\t\t\t</Box>\n\t\t</Tooltip>\n\t);\n};\nconst CustomIconButton = styled( IconButton )( ( { theme } ) => ( {\n\t'&.Mui-disabled': {\n\t\tpointerEvents: 'auto',\n\t\t'&:hover': {\n\t\t\tcolor: theme.palette.action.disabled,\n\t\t},\n\t},\n} ) );\n","import * as React from 'react';\nimport { Checkbox, Chip, MenuItem, MenuList, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FilterKey, useFilteredCssClassUsage } from '../../../../hooks/use-filtered-css-class-usage';\nimport { trackGlobalClasses } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\n\nexport const filterConfig: Record< FilterKey, string > = {\n\tunused: __( 'Unused', 'elementor' ),\n\tempty: __( 'Empty', 'elementor' ),\n\tonThisPage: __( 'On this page', 'elementor' ),\n};\n\nexport const FilterList = () => {\n\tconst {\n\t\tfilters: { filters, setFilters },\n\t} = useSearchAndFilters();\n\tconst filteredCssClass = useFilteredCssClassUsage();\n\n\tconst handleOnClick = ( value: FilterKey ) => {\n\t\tsetFilters( ( prev ) => ( { ...prev, [ value ]: ! prev[ value ] } ) );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classManagerFilterUsed',\n\t\t\taction: filters[ value ] ? 'remove' : 'apply',\n\t\t\ttype: value,\n\t\t\ttrigger: 'menu',\n\t\t} );\n\t};\n\n\treturn (\n\t\t<MenuList>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'unused' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.unused }\n\t\t\t\t\tchecked={ filters.unused }\n\t\t\t\t\tsuffix={ <Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.unused.length } /> }\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'empty' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.empty }\n\t\t\t\t\tchecked={ filters.empty }\n\t\t\t\t\tsuffix={ <Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.empty.length } /> }\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'onThisPage' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.onThisPage }\n\t\t\t\t\tchecked={ filters.onThisPage }\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.onThisPage.length } />\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t</MenuList>\n\t);\n};\n\ntype LabeledCheckboxProps = {\n\tlabel: string;\n\tsuffix?: React.ReactNode;\n\tchecked: boolean;\n};\n\nconst LabeledCheckbox = ( { label, suffix, checked }: LabeledCheckboxProps ) => (\n\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 } flex={ 1 }>\n\t\t<Checkbox\n\t\t\tsize={ 'small' }\n\t\t\tchecked={ checked }\n\t\t\tsx={ {\n\t\t\t\tpadding: 0,\n\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t'&.Mui-checked': {\n\t\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t},\n\t\t\t} }\n\t\t/>\n\t\t<Typography variant=\"caption\" sx={ { color: 'text.secondary' } }>\n\t\t\t{ label }\n\t\t</Typography>\n\t\t{ suffix }\n\t</Stack>\n);\n","import * as React from 'react';\nimport { PopoverBody, PopoverHeader } from '@elementor/editor-ui';\nimport { FilterIcon } from '@elementor/icons';\nimport { bindPopover, bindToggle, Divider, Popover, ToggleButton, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { trackGlobalClasses, type TrackingEvent } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\nimport { ClearIconButton } from './clear-icon-button';\nimport { FilterList } from './filter-list';\n\nexport const CssClassFilter = () => {\n\tconst {\n\t\tfilters: { filters },\n\t} = useSearchAndFilters();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tReact.useEffect( () => {\n\t\tif ( popupState.isOpen ) {\n\t\t\ttrackGlobalClasses( {\n\t\t\t\tevent: 'classManagerFiltersOpened',\n\t\t\t} as TrackingEvent );\n\t\t}\n\t}, [ popupState.isOpen ] );\n\n\tconst showCleanIcon = Object.values( filters ).some( ( value ) => value );\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip title={ __( 'Filters', 'elementor' ) } placement=\"top\">\n\t\t\t\t<ToggleButton\n\t\t\t\t\tvalue=\"filter\"\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tselected={ popupState.isOpen }\n\t\t\t\t\t{ ...bindToggle( popupState ) }\n\t\t\t\t>\n\t\t\t\t\t<FilterIcon fontSize=\"tiny\" />\n\t\t\t\t</ToggleButton>\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tsx={ {\n\t\t\t\t\tmaxWidth: '344px',\n\t\t\t\t} }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: -21,\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t>\n\t\t\t\t<PopoverHeader\n\t\t\t\t\tactions={\n\t\t\t\t\t\tshowCleanIcon\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t<ClearIconButton\n\t\t\t\t\t\t\t\t\t\ttrigger=\"menu\"\n\t\t\t\t\t\t\t\t\t\tkey=\"clear-all-button\"\n\t\t\t\t\t\t\t\t\t\ttooltipText={ __( 'Clear all', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t/>,\n\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t}\n\t\t\t\t\tonClose={ popupState.close }\n\t\t\t\t\ttitle={ __( 'Filters', 'elementor' ) }\n\t\t\t\t\ticon={ <FilterIcon fontSize={ 'tiny' } /> }\n\t\t\t\t/>\n\t\t\t\t<Divider\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tborderWidth: '1px 0 0 0',\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<PopoverBody width={ 344 } height={ 125 }>\n\t\t\t\t\t<FilterList />\n\t\t\t\t</PopoverBody>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { SearchIcon } from '@elementor/icons';\nimport { Box, InputAdornment, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { trackGlobalClasses, type TrackingEvent } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\n\nexport const ClassManagerSearch = () => {\n\tconst {\n\t\tsearch: { inputValue, handleChange },\n\t} = useSearchAndFilters();\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={ 0.5 } sx={ { width: '100%' } }>\n\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t<TextField\n\t\t\t\t\trole={ 'search' }\n\t\t\t\t\tfullWidth\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tonFocus={ () => {\n\t\t\t\t\t\ttrackGlobalClasses( {\n\t\t\t\t\t\t\tevent: 'classManagerSearched',\n\t\t\t\t\t\t} as TrackingEvent );\n\t\t\t\t\t} }\n\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t<SearchIcon fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useSuppressedMessage } from '@elementor/editor-current-user';\nimport { IntroductionModal } from '@elementor/editor-ui';\nimport { Box, Image, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst MESSAGE_KEY = 'global-class-manager';\n\nexport const ClassManagerIntroduction = () => {\n\tconst [ isMessageSuppressed, suppressMessage ] = useSuppressedMessage( MESSAGE_KEY );\n\tconst [ shouldShowIntroduction, setShouldShowIntroduction ] = useState( ! isMessageSuppressed );\n\n\treturn (\n\t\t<IntroductionModal\n\t\t\topen={ shouldShowIntroduction }\n\t\t\ttitle={ __( 'Class Manager', 'elementor' ) }\n\t\t\thandleClose={ ( shouldShowAgain ) => {\n\t\t\t\tif ( ! shouldShowAgain ) {\n\t\t\t\t\tsuppressMessage();\n\t\t\t\t}\n\n\t\t\t\tsetShouldShowIntroduction( false );\n\t\t\t} }\n\t\t>\n\t\t\t<Image\n\t\t\t\tsx={ { width: '100%', aspectRatio: '16 / 9' } }\n\t\t\t\tsrc={ 'https://assets.elementor.com/packages/v1/images/class-manager-intro.svg' }\n\t\t\t\talt={ '' }\n\t\t\t/>\n\t\t\t<IntroductionContent />\n\t\t</IntroductionModal>\n\t);\n};\n\nconst IntroductionContent = () => {\n\treturn (\n\t\t<Box p={ 3 }>\n\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t{ __(\n\t\t\t\t\t\"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.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<br />\n\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t{ __(\n\t\t\t\t\t'Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t</Box>\n\t);\n};\n","import { getCurrentDocument, getV1DocumentsManager } from '@elementor/editor-documents';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { slice } from '../../store';\nimport { trackGlobalClasses } from '../../utils/tracking';\n\nlet isDeleted = false;\n\nexport const deleteClass = ( id: string ) => {\n\ttrackGlobalClasses( {\n\t\tevent: 'classDeleted',\n\t\tclassId: id,\n\t\trunAction: () => {\n\t\t\tdispatch( slice.actions.delete( id ) );\n\t\t\tisDeleted = true;\n\t\t},\n\t} );\n};\n\nexport const onDelete = async () => {\n\tawait reloadDocument();\n\n\tisDeleted = false;\n};\n\nexport const hasDeletedItems = () => isDeleted;\n\n// When deleting a class, we remove it from all the documents that have it applied.\n// In order to reflect the changes in the active document, we need to reload it.\nconst reloadDocument = () => {\n\tconst currentDocument = getCurrentDocument();\n\tconst documentsManager = getV1DocumentsManager();\n\n\tdocumentsManager.invalidateCache();\n\n\treturn runCommand( 'editor/documents/switch', {\n\t\tid: currentDocument?.id,\n\t\tshouldScroll: false,\n\t\tshouldNavigateToDefaultRoute: false,\n\t} );\n};\n","import * as React from 'react';\nimport { ColorSwatchIcon } from '@elementor/icons';\nimport { type SvgIconProps } from '@elementor/ui';\n\nexport const FlippedColorSwatchIcon = ( { sx, ...props }: SvgIconProps ) => (\n\t<ColorSwatchIcon sx={ { transform: 'rotate(90deg)', ...sx } } { ...props } />\n);\n","import * as React from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { __useDispatch as useDispatch } from '@elementor/store';\nimport { List, Stack, styled, Typography, type TypographyProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useFilters } from '../../hooks/use-filters';\nimport { useOrderedClasses } from '../../hooks/use-ordered-classes';\nimport { slice } from '../../store';\nimport { trackGlobalClasses } from '../../utils/tracking';\nimport { useSearchAndFilters } from '../search-and-filter/context';\nimport { ClassItem } from './class-item';\nimport { DeleteConfirmationProvider } from './delete-confirmation-dialog';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { getNotFoundType, NotFound } from './not-found';\nimport { SortableItem, SortableProvider } from './sortable';\n\ntype GlobalClassesListProps = {\n\tdisabled?: boolean;\n};\n\nexport const GlobalClassesList = ( { disabled }: GlobalClassesListProps ) => {\n\tconst {\n\t\tsearch: { debouncedValue: searchValue },\n\t} = useSearchAndFilters();\n\tconst cssClasses = useOrderedClasses();\n\tconst dispatch = useDispatch();\n\tconst filters = useFilters();\n\tconst [ draggedItemId, setDraggedItemId ] = React.useState< StyleDefinitionID | null >( null );\n\tconst draggedItemLabel = cssClasses.find( ( cssClass ) => cssClass.id === draggedItemId )?.label ?? '';\n\tconst [ classesOrder, reorderClasses ] = useReorder( draggedItemId, setDraggedItemId, draggedItemLabel ?? '' );\n\tconst filteredCssClasses = useFilteredCssClasses();\n\n\tuseEffect( () => {\n\t\tconst handler = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'z' && ( event.ctrlKey || event.metaKey ) ) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( event.shiftKey ) {\n\t\t\t\t\tdispatch( slice.actions.redo() );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdispatch( slice.actions.undo() );\n\t\t\t}\n\t\t};\n\t\twindow.addEventListener( 'keydown', handler, {\n\t\t\tcapture: true,\n\t\t} );\n\t\treturn () => window.removeEventListener( 'keydown', handler );\n\t}, [ dispatch ] );\n\n\tif ( ! cssClasses?.length ) {\n\t\treturn <EmptyState />;\n\t}\n\n\tconst notFoundType = getNotFoundType( searchValue, filters, filteredCssClasses );\n\n\tif ( notFoundType ) {\n\t\treturn <NotFound notFoundType={ notFoundType } />;\n\t}\n\n\tconst isFiltersApplied = filters?.length || searchValue;\n\n\tconst allowSorting = filteredCssClasses.length > 1 && ! isFiltersApplied;\n\n\treturn (\n\t\t<DeleteConfirmationProvider>\n\t\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 0.5 } }>\n\t\t\t\t<SortableProvider\n\t\t\t\t\tvalue={ classesOrder }\n\t\t\t\t\tonChange={ reorderClasses }\n\t\t\t\t\tdisableDragOverlay={ ! allowSorting }\n\t\t\t\t>\n\t\t\t\t\t{ filteredCssClasses?.map( ( { id, label } ) => (\n\t\t\t\t\t\t<SortableItem key={ id } id={ id }>\n\t\t\t\t\t\t\t{ ( { isDragged, isDragPlaceholder, triggerProps, triggerStyle } ) => {\n\t\t\t\t\t\t\t\tif ( isDragged && ! draggedItemId ) {\n\t\t\t\t\t\t\t\t\tsetDraggedItemId( id );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<ClassItem\n\t\t\t\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\t\t\t\trenameClass={ ( newLabel: string ) => {\n\t\t\t\t\t\t\t\t\t\t\ttrackGlobalClasses( {\n\t\t\t\t\t\t\t\t\t\t\t\tevent: 'classRenamed',\n\t\t\t\t\t\t\t\t\t\t\t\tclassId: id,\n\t\t\t\t\t\t\t\t\t\t\t\toldValue: label,\n\t\t\t\t\t\t\t\t\t\t\t\tnewValue: newLabel,\n\t\t\t\t\t\t\t\t\t\t\t\tsource: 'class-manager',\n\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\t\t\t\t\t\tslice.actions.update( {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\tselected={ isDragged }\n\t\t\t\t\t\t\t\t\t\tdisabled={ disabled || isDragPlaceholder }\n\t\t\t\t\t\t\t\t\t\tsortableTriggerProps={ {\n\t\t\t\t\t\t\t\t\t\t\t...triggerProps,\n\t\t\t\t\t\t\t\t\t\t\tstyle: triggerStyle,\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\tshowSortIndicator={ allowSorting }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t) ) }\n\t\t\t\t</SortableProvider>\n\t\t\t</List>\n\t\t</DeleteConfirmationProvider>\n\t);\n};\n\nconst EmptyState = () => (\n\t<Stack alignItems=\"center\" gap={ 1.5 } pt={ 10 } px={ 0.5 } maxWidth=\"260px\" margin=\"auto\">\n\t\t<FlippedColorSwatchIcon fontSize=\"large\" />\n\t\t<StyledHeader variant=\"subtitle2\" component=\"h2\" color=\"text.secondary\">\n\t\t\t{ __( 'There are no global classes yet.', 'elementor' ) }\n\t\t</StyledHeader>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t{ __(\n\t\t\t\t'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.',\n\t\t\t\t'elementor'\n\t\t\t) }\n\t\t</Typography>\n\t</Stack>\n);\n\n// Override panel reset styles.\nconst StyledHeader = styled( Typography )< TypographyProps >( ( { theme, variant } ) => ( {\n\t'&.MuiTypography-root': {\n\t\t...( theme.typography[ variant as keyof typeof theme.typography ] as React.CSSProperties ),\n\t},\n} ) );\n\nconst useReorder = (\n\tdraggedItemId: StyleDefinitionID | null,\n\tsetDraggedItemId: React.Dispatch< React.SetStateAction< StyleDefinitionID | null > >,\n\tdraggedItemLabel: string\n) => {\n\tconst dispatch = useDispatch();\n\tconst order = useClassesOrder();\n\n\tconst reorder = ( newIds: StyleDefinitionID[] ) => {\n\t\tdispatch( slice.actions.setOrder( newIds ) );\n\n\t\tif ( draggedItemId ) {\n\t\t\ttrackGlobalClasses( {\n\t\t\t\tevent: 'classManagerReorder',\n\t\t\t\tclassId: draggedItemId,\n\t\t\t\tclassTitle: draggedItemLabel,\n\t\t\t} );\n\t\t\tsetDraggedItemId( null ); // Reset after tracking\n\t\t}\n\t};\n\n\treturn [ order, reorder ] as const;\n};\n\nconst useFilteredCssClasses = (): StyleDefinition[] => {\n\tconst cssClasses = useOrderedClasses();\n\tconst {\n\t\tsearch: { debouncedValue: searchValue },\n\t} = useSearchAndFilters();\n\tconst filters = useFilters();\n\n\tconst lowercaseLabels = useMemo(\n\t\t() =>\n\t\t\tcssClasses.map( ( cssClass ) => ( {\n\t\t\t\t...cssClass,\n\t\t\t\tlowerLabel: cssClass.label.toLowerCase(),\n\t\t\t} ) ),\n\t\t[ cssClasses ]\n\t);\n\n\tconst filteredClasses = useMemo( () => {\n\t\tif ( searchValue.length > 1 ) {\n\t\t\treturn lowercaseLabels.filter( ( cssClass ) => cssClass.lowerLabel.includes( searchValue.toLowerCase() ) );\n\t\t}\n\t\treturn cssClasses;\n\t}, [ searchValue, cssClasses, lowercaseLabels ] );\n\n\treturn useMemo( () => {\n\t\tif ( filters && filters.length > 0 ) {\n\t\t\treturn filteredClasses.filter( ( cssClass ) => filters.includes( cssClass.id ) );\n\t\t}\n\t\treturn filteredClasses;\n\t}, [ filteredClasses, filters ] );\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectOrderedClasses } from '../store';\n\nexport const useOrderedClasses = () => {\n\treturn useSelector( selectOrderedClasses );\n};\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { EditableField, EllipsisWithTooltip, MenuListItem, useEditable, WarningInfotip } from '@elementor/editor-ui';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tListItemButton,\n\ttype ListItemButtonProps,\n\tMenu,\n\tStack,\n\tstyled,\n\ttype Theme,\n\tTooltip,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { CssClassUsageTrigger } from '../css-class-usage/components';\nimport { useDeleteConfirmation } from './delete-confirmation-dialog';\nimport { SortableTrigger, type SortableTriggerProps } from './sortable';\n\ntype ClassItemProps = React.PropsWithChildren< {\n\tid: string;\n\tlabel: string;\n\trenameClass: ( newLabel: string ) => void;\n\tselected?: boolean;\n\tdisabled?: boolean;\n\tsortableTriggerProps: SortableTriggerProps;\n\tshowSortIndicator?: boolean;\n} >;\n\nexport const ClassItem = ( {\n\tid,\n\tlabel,\n\trenameClass,\n\tselected,\n\tdisabled,\n\tsortableTriggerProps,\n\tshowSortIndicator,\n}: ClassItemProps ) => {\n\tconst itemRef = useRef< HTMLElement >( null );\n\tconst {\n\t\tref: editableRef,\n\t\topenEditMode,\n\t\tisEditing,\n\t\terror,\n\t\tgetProps: getEditableProps,\n\t} = useEditable( {\n\t\tvalue: label,\n\t\tonSubmit: renameClass,\n\t\tvalidation: validateLabel,\n\t} );\n\tconst [ selectedCssUsage, setSelectedCssUsage ] = useState( '' );\n\tconst { openDialog } = useDeleteConfirmation();\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst isSelected = ( selectedCssUsage === id || selected || popupState.isOpen ) && ! disabled;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack p={ 0 }>\n\t\t\t\t<WarningInfotip\n\t\t\t\t\topen={ Boolean( error ) }\n\t\t\t\t\ttext={ error ?? '' }\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\twidth={ itemRef.current?.getBoundingClientRect().width }\n\t\t\t\t\toffset={ [ 0, -15 ] }\n\t\t\t\t>\n\t\t\t\t\t<StyledListItemButton\n\t\t\t\t\t\tref={ itemRef }\n\t\t\t\t\t\tdense\n\t\t\t\t\t\tdisableGutters\n\t\t\t\t\t\tshowSortIndicator={ showSortIndicator }\n\t\t\t\t\t\tshowActions={ isSelected || isEditing }\n\t\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t\t\tonDoubleClick={ openEditMode }\n\t\t\t\t\t\tselected={ isSelected }\n\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t\tfocusVisibleClassName=\"visible-class-item\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<SortableTrigger { ...sortableTriggerProps } />\n\t\t\t\t\t\t<Indicator isActive={ isEditing } isError={ !! error }>\n\t\t\t\t\t\t\t{ isEditing ? (\n\t\t\t\t\t\t\t\t<EditableField\n\t\t\t\t\t\t\t\t\tref={ editableRef }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\t{ ...getEditableProps() }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<EllipsisWithTooltip title={ label } as={ Typography } variant=\"caption\" />\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Indicator>\n\t\t\t\t\t\t<Box className={ 'class-item-locator' }>\n\t\t\t\t\t\t\t<CssClassUsageTrigger id={ id } onClick={ setSelectedCssUsage } />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\tclassName={ 'class-item-more-actions' }\n\t\t\t\t\t\t\ttitle={ __( 'More actions', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconButton size=\"tiny\" { ...bindTrigger( popupState ) } aria-label=\"More actions\">\n\t\t\t\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t</StyledListItemButton>\n\t\t\t\t</WarningInfotip>\n\t\t\t</Stack>\n\t\t\t<Menu\n\t\t\t\t{ ...bindMenu( popupState ) }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<MenuListItem\n\t\t\t\t\tsx={ { minWidth: '160px' } }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tpopupState.close();\n\t\t\t\t\t\topenEditMode();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t{ __( 'Rename', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t\t<MenuListItem\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tpopupState.close();\n\t\t\t\t\t\topenDialog( { id, label } );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'error.light' } }>\n\t\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n\nconst StyledListItemButton = styled( ListItemButton, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'showActions', 'showSortIndicator' ].includes( prop ),\n} )< ListItemButtonProps & { showActions: boolean; showSortIndicator: boolean } >(\n\t( { showActions, showSortIndicator } ) => `\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: ${ showSortIndicator && showActions ? 'visible' : 'hidden' };\n }\n\n &:hover:not(:disabled) {\n .class-item-locator {\n visibility: visible;\n }\n\n .class-item-sortable-trigger {\n visibility: ${ showSortIndicator ? 'visible' : 'hidden' };\n }\n }\n `\n);\n\nconst Indicator = styled( Box, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'isActive', 'isError' ].includes( prop ),\n} )< { isActive: boolean; isError: boolean } >( ( { theme, isActive, isError } ) => ( {\n\tdisplay: 'flex',\n\twidth: '100%',\n\tflexGrow: 1,\n\tborderRadius: theme.spacing( 0.5 ),\n\tborder: getIndicatorBorder( { isActive, isError, theme } ),\n\tpadding: `0 ${ theme.spacing( 1 ) }`,\n\tmarginLeft: isActive ? theme.spacing( 1 ) : 0,\n\tminWidth: 0,\n} ) );\n\nconst getIndicatorBorder = ( { isActive, isError, theme }: { isActive: boolean; isError: boolean; theme: Theme } ) => {\n\tif ( isError ) {\n\t\treturn `2px solid ${ theme.palette.error.main }`;\n\t}\n\n\tif ( isActive ) {\n\t\treturn `2px solid ${ theme.palette.secondary.main }`;\n\t}\n\n\treturn 'none';\n};\n\nconst validateLabel = ( newLabel: string ) => {\n\tconst result = validateStyleLabel( newLabel, 'rename' );\n\n\tif ( result.isValid ) {\n\t\treturn null;\n\t}\n\n\treturn result.errorMessage;\n};\n","import * as React from 'react';\nimport { __useOpenDocumentInNewTab as useOpenDocumentInNewTab } from '@elementor/editor-documents';\nimport {\n\tEllipsisWithTooltip,\n\tPopoverBody,\n\tPopoverHeader,\n\tPopoverMenuList,\n\ttype VirtualizedItem,\n} from '@elementor/editor-ui';\nimport {\n\tCurrentLocationIcon,\n\tExternalLinkIcon,\n\tFooterTemplateIcon,\n\tHeaderTemplateIcon,\n\tPagesIcon,\n\tPopupTemplateIcon,\n\tPostTypeIcon,\n} from '@elementor/icons';\nimport { Box, Chip, Divider, Icon, MenuList, Stack, styled, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../../hooks/use-css-class-usage-by-id';\nimport { trackGlobalClasses } from '../../../utils/tracking';\nimport { type ContentType } from '../types';\n\ntype CssClassUsageRecord = VirtualizedItem< 'item', string > & { docType: ContentType };\n\nconst iconMapper: Record< ContentType, { label: string; icon: React.ReactElement } > = {\n\t'wp-post': {\n\t\tlabel: __( 'Post', 'elementor' ),\n\t\ticon: <PostTypeIcon fontSize={ 'inherit' } />,\n\t},\n\t'wp-page': {\n\t\tlabel: __( 'Page', 'elementor' ),\n\t\ticon: <PagesIcon fontSize={ 'inherit' } />,\n\t},\n\tpopup: {\n\t\tlabel: __( 'Popup', 'elementor' ),\n\t\ticon: <PopupTemplateIcon fontSize={ 'inherit' } />,\n\t},\n\theader: {\n\t\tlabel: __( 'Header', 'elementor' ),\n\t\ticon: <HeaderTemplateIcon fontSize={ 'inherit' } />,\n\t},\n\tfooter: {\n\t\tlabel: __( 'Footer', 'elementor' ),\n\t\ticon: <FooterTemplateIcon fontSize={ 'inherit' } />,\n\t},\n};\n\nexport const CssClassUsagePopover = ( {\n\tcssClassID,\n\tonClose,\n}: {\n\tonClose: React.ComponentProps< typeof PopoverHeader >[ 'onClose' ];\n\tcssClassID: string;\n} ) => {\n\tconst { data: classUsage } = useCssClassUsageByID( cssClassID );\n\tconst onNavigate = useOpenDocumentInNewTab();\n\n\tconst cssClassUsageRecords: CssClassUsageRecord[] =\n\t\tclassUsage?.content.map(\n\t\t\t( { title, elements, pageId, type } ) =>\n\t\t\t\t( {\n\t\t\t\t\ttype: 'item',\n\t\t\t\t\tvalue: pageId,\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tsecondaryText: elements.length.toString(),\n\t\t\t\t\tdocType: type,\n\t\t\t\t} ) as CssClassUsageRecord\n\t\t) ?? [];\n\n\tconst handleSelect = ( value: string ) => {\n\t\tonNavigate( +value );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classUsageLocate',\n\t\t\tclassId: cssClassID,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PopoverHeader\n\t\t\t\ticon={ <CurrentLocationIcon fontSize={ 'tiny' } /> }\n\t\t\t\ttitle={\n\t\t\t\t\t<Stack flexDirection={ 'row' } gap={ 1 } alignItems={ 'center' }>\n\t\t\t\t\t\t<Box aria-label={ 'header-title' }>{ __( 'Locator', 'elementor' ) }</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Chip sx={ { lineHeight: 1 } } size={ 'tiny' } label={ classUsage.total } />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Stack>\n\t\t\t\t}\n\t\t\t\tonClose={ onClose }\n\t\t\t/>\n\t\t\t<Divider />\n\t\t\t<PopoverBody width={ 300 }>\n\t\t\t\t<PopoverMenuList\n\t\t\t\t\tonSelect={ handleSelect }\n\t\t\t\t\titems={ cssClassUsageRecords }\n\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\tmenuListTemplate={ StyledCssClassUsageItem }\n\t\t\t\t\tmenuItemContentTemplate={ ( cssClassUsageRecord ) => (\n\t\t\t\t\t\t<Stack flexDirection={ 'row' } flex={ 1 } alignItems={ 'center' }>\n\t\t\t\t\t\t\t<Box display={ 'flex' } sx={ { pr: 1 } }>\n\t\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\t\tdisableInteractive\n\t\t\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t\t\ticonMapper?.[ cssClassUsageRecord.docType as ContentType ]?.label ??\n\t\t\t\t\t\t\t\t\t\tcssClassUsageRecord.docType\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon fontSize={ 'small' }>\n\t\t\t\t\t\t\t\t\t\t{ iconMapper?.[ cssClassUsageRecord.docType as ContentType ]?.icon || (\n\t\t\t\t\t\t\t\t\t\t\t<PagesIcon fontSize={ 'inherit' } />\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</Icon>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box sx={ { pr: 0.5, maxWidth: '173px' } } display={ 'flex' }>\n\t\t\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\t\t\ttitle={ cssClassUsageRecord.label }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\tmaxWidth=\"173px\"\n\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<ExternalLinkIcon className={ 'hover-only-icon' } fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tml: 'auto',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t\t\tlabel={ cssClassUsageRecord.secondaryText }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</PopoverBody>\n\t\t</>\n\t);\n};\n\nconst StyledCssClassUsageItem = styled( MenuList )( ( { theme } ) => ( {\n\t'& > li': {\n\t\tdisplay: 'flex',\n\t\tcursor: 'pointer',\n\t\theight: 32,\n\t\twidth: '100%',\n\t},\n\t'& > [role=\"option\"]': {\n\t\t...theme.typography.caption,\n\t\tlineHeight: 'inherit',\n\t\tpadding: theme.spacing( 0.5, 1, 0.5, 2 ),\n\t\ttextOverflow: 'ellipsis',\n\t\tposition: 'absolute',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\topacity: 1,\n\t\t'.hover-only-icon': {\n\t\t\tcolor: theme.palette.text.disabled,\n\t\t\topacity: 0,\n\t\t},\n\t\t'&:hover': {\n\t\t\tborderRadius: theme.spacing( 0.5 ),\n\t\t\tbackgroundColor: theme.palette.action.hover,\n\t\t\t'.hover-only-icon': {\n\t\t\t\tcolor: theme.palette.text.disabled,\n\t\t\t\topacity: 1,\n\t\t\t},\n\t\t},\n\t},\n\twidth: '100%',\n\tposition: 'relative',\n} ) );\n","import { type EnhancedCssClassUsageContent } from '../components/css-class-usage/types';\nimport { useCssClassUsage } from './use-css-class-usage';\n\nconst EMPTY_CLASS_USAGE: EnhancedCssClassUsageContent = {\n\ttotal: 0,\n\tcontent: [],\n};\n\nexport const useCssClassUsageByID = (\n\tid: string\n): { data: EnhancedCssClassUsageContent; isLoading: boolean; isSuccess?: boolean } => {\n\tconst { data, ...rest } = useCssClassUsage();\n\tconst classData = data?.[ id ] ?? EMPTY_CLASS_USAGE;\n\treturn { ...rest, data: classData };\n};\n","import * as React from 'react';\nimport { type MouseEvent, type PropsWithChildren } from 'react';\nimport { InfoAlert } from '@elementor/editor-ui';\nimport { CurrentLocationIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tInfotip,\n\tPopover,\n\tstyled,\n\tTooltip,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../../hooks/use-css-class-usage-by-id';\nimport { trackGlobalClasses } from '../../../utils/tracking';\nimport { type CssClassID } from '../types';\nimport { CssClassUsagePopover } from './css-class-usage-popover';\n\nexport const CssClassUsageTrigger = ( { id, onClick }: { id: CssClassID; onClick: ( id: CssClassID ) => void } ) => {\n\tconst {\n\t\tdata: { total },\n\t\tisLoading,\n\t} = useCssClassUsageByID( id );\n\tconst cssClassUsagePopover = usePopupState( { variant: 'popover', popupId: 'css-class-usage-popover' } );\n\n\tif ( isLoading ) {\n\t\treturn null;\n\t}\n\n\tconst WrapperComponent = total !== 0 ? TooltipWrapper : InfoAlertMessage;\n\n\tconst handleMouseEnter = () => {\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classUsageHovered',\n\t\t\tclassId: id,\n\t\t\tusage: total,\n\t\t} );\n\t};\n\n\tconst handleClick = ( e: MouseEvent ) => {\n\t\tif ( total !== 0 ) {\n\t\t\tbindTrigger( cssClassUsagePopover ).onClick( e );\n\t\t\tonClick( id );\n\t\t\ttrackGlobalClasses( {\n\t\t\t\tevent: 'classUsageClicked',\n\t\t\t\tclassId: id,\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Box position={ 'relative' } onMouseEnter={ handleMouseEnter }>\n\t\t\t\t<WrapperComponent total={ total }>\n\t\t\t\t\t<CustomIconButton\n\t\t\t\t\t\tdisabled={ total === 0 }\n\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t{ ...bindTrigger( cssClassUsagePopover ) }\n\t\t\t\t\t\tonClick={ handleClick }\n\t\t\t\t\t>\n\t\t\t\t\t\t<CurrentLocationIcon fontSize={ 'tiny' } />\n\t\t\t\t\t</CustomIconButton>\n\t\t\t\t</WrapperComponent>\n\t\t\t</Box>\n\t\t\t<Box>\n\t\t\t\t<Popover\n\t\t\t\t\tanchorOrigin={ {\n\t\t\t\t\t\tvertical: 'center',\n\t\t\t\t\t\thorizontal: 'right',\n\t\t\t\t\t} }\n\t\t\t\t\ttransformOrigin={ {\n\t\t\t\t\t\tvertical: 15,\n\t\t\t\t\t\thorizontal: -50,\n\t\t\t\t\t} }\n\t\t\t\t\t{ ...bindPopover( cssClassUsagePopover ) }\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tbindPopover( cssClassUsagePopover ).onClose();\n\t\t\t\t\t\tonClick( '' );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<CssClassUsagePopover\n\t\t\t\t\t\tonClose={ cssClassUsagePopover.close }\n\t\t\t\t\t\taria-label=\"css-class-usage-popover\"\n\t\t\t\t\t\tcssClassID={ id }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t</Box>\n\t\t</>\n\t);\n};\n\nconst CustomIconButton = styled( IconButton )( ( { theme } ) => ( {\n\t'&.Mui-disabled': {\n\t\tpointerEvents: 'auto', // Enable hover\n\t\t'&:hover': {\n\t\t\tcolor: theme.palette.action.disabled, // optional\n\t\t},\n\t},\n\theight: '22px',\n\twidth: '22px',\n} ) );\n\nconst TooltipWrapper = ( { children, total }: PropsWithChildren< { total: number } > ) => (\n\t<Tooltip\n\t\tdisableInteractive\n\t\tplacement={ 'top' }\n\t\ttitle={ `${ __( 'Show {{number}} {{locations}}', 'elementor' )\n\t\t\t.replace( '{{number}}', total.toString() )\n\t\t\t.replace(\n\t\t\t\t'{{locations}}',\n\t\t\t\ttotal === 1 ? __( 'location', 'elementor' ) : __( 'locations', 'elementor' )\n\t\t\t) }` }\n\t>\n\t\t<span>{ children }</span>\n\t</Tooltip>\n);\n\nconst InfoAlertMessage = ( { children }: PropsWithChildren ) => (\n\t<Infotip\n\t\tdisableInteractive\n\t\tplacement={ 'top' }\n\t\tcolor={ 'secondary' }\n\t\tcontent={ <InfoAlert sx={ { mt: 1 } }>{ __( 'This class isn’t being used yet.', 'elementor' ) }</InfoAlert> }\n\t>\n\t\t<span>{ children }</span>\n\t</Infotip>\n);\n","import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { ConfirmationDialog } from '@elementor/editor-ui';\nimport { Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../hooks/use-css-class-usage-by-id';\nimport { deleteClass } from './delete-class';\n\ntype DeleteClassDialogProps = Pick< StyleDefinition, 'id' | 'label' >;\n\ntype DeleteConfirmationContext = {\n\topenDialog: ( props: DeleteClassDialogProps ) => void;\n\tcloseDialog: () => void;\n\tdialogProps: DeleteClassDialogProps | null;\n};\n\nconst context = createContext< DeleteConfirmationContext | null >( null );\n\nexport const DeleteConfirmationProvider = ( { children }: React.PropsWithChildren ) => {\n\tconst [ dialogProps, setDialogProps ] = useState< DeleteClassDialogProps | null >( null );\n\n\tconst openDialog = ( props: DeleteClassDialogProps ) => {\n\t\tsetDialogProps( props );\n\t};\n\n\tconst closeDialog = () => {\n\t\tsetDialogProps( null );\n\t};\n\n\treturn (\n\t\t<context.Provider value={ { openDialog, closeDialog, dialogProps } }>\n\t\t\t{ children }\n\t\t\t{ !! dialogProps && <DeleteClassDialog { ...dialogProps } /> }\n\t\t</context.Provider>\n\t);\n};\n\nconst DeleteClassDialog = ( { label, id }: DeleteClassDialogProps ) => {\n\tconst { closeDialog } = useDeleteConfirmation();\n\tconst {\n\t\tdata: { total, content },\n\t} = useCssClassUsageByID( id );\n\n\tconst handleConfirm = () => {\n\t\tcloseDialog();\n\t\tdeleteClass( id );\n\t};\n\n\t// translators: %1: total usage count, %2: number of pages\n\tconst text =\n\t\ttotal && content.length\n\t\t\t? __(\n\t\t\t\t\t'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.',\n\t\t\t\t\t'elementor'\n\t\t\t )\n\t\t\t\t\t.replace( '%1', total.toString() )\n\t\t\t\t\t.replace( '%2', content.length.toString() )\n\t\t\t: __(\n\t\t\t\t\t'Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.',\n\t\t\t\t\t'elementor'\n\t\t\t );\n\n\treturn (\n\t\t<ConfirmationDialog open onClose={ closeDialog }>\n\t\t\t<ConfirmationDialog.Title>{ __( 'Delete this class?', 'elementor' ) }</ConfirmationDialog.Title>\n\t\t\t<ConfirmationDialog.Content>\n\t\t\t\t<ConfirmationDialog.ContentText>\n\t\t\t\t\t{ __( 'Deleting', 'elementor' ) }\n\t\t\t\t\t<Typography variant=\"subtitle2\" component=\"span\">\n\t\t\t\t\t\t { label } \n\t\t\t\t\t</Typography>\n\t\t\t\t\t{ text }\n\t\t\t\t</ConfirmationDialog.ContentText>\n\t\t\t</ConfirmationDialog.Content>\n\t\t\t<ConfirmationDialog.Actions onClose={ closeDialog } onConfirm={ handleConfirm } />\n\t\t</ConfirmationDialog>\n\t);\n};\n\nexport const useDeleteConfirmation = () => {\n\tconst contextValue = useContext( context );\n\n\tif ( ! contextValue ) {\n\t\tthrow new Error( 'useDeleteConfirmation must be used within a DeleteConfirmationProvider' );\n\t}\n\n\treturn contextValue;\n};\n","import * as React from 'react';\nimport { GripVerticalIcon } from '@elementor/icons';\nimport {\n\tBox,\n\tstyled,\n\tUnstableSortableItem,\n\ttype UnstableSortableItemProps,\n\ttype UnstableSortableItemRenderProps,\n\tUnstableSortableProvider,\n\ttype UnstableSortableProviderProps,\n} from '@elementor/ui';\n\nexport const SortableProvider = < T extends string >( props: UnstableSortableProviderProps< T > ) => (\n\t<UnstableSortableProvider restrictAxis variant=\"static\" dragPlaceholderStyle={ { opacity: '1' } } { ...props } />\n);\n\nexport type SortableTriggerProps = React.HTMLAttributes< HTMLDivElement >;\n\nexport const SortableTrigger = ( props: SortableTriggerProps ) => (\n\t<StyledSortableTrigger { ...props } role=\"button\" className=\"class-item-sortable-trigger\" aria-label=\"sort\">\n\t\t<GripVerticalIcon fontSize=\"tiny\" />\n\t</StyledSortableTrigger>\n);\n\ntype SortableItemProps = {\n\tid: UnstableSortableItemProps[ 'id' ];\n\tchildren: ( props: Partial< UnstableSortableItemRenderProps > ) => React.ReactNode;\n};\n\nexport const SortableItem = ( { children, id, ...props }: SortableItemProps ) => {\n\treturn (\n\t\t<UnstableSortableItem\n\t\t\t{ ...props }\n\t\t\tid={ id }\n\t\t\trender={ ( {\n\t\t\t\titemProps,\n\t\t\t\tisDragged,\n\t\t\t\ttriggerProps,\n\t\t\t\titemStyle,\n\t\t\t\ttriggerStyle,\n\t\t\t\tdropIndicationStyle,\n\t\t\t\tshowDropIndication,\n\t\t\t\tisDragOverlay,\n\t\t\t\tisDragPlaceholder,\n\t\t\t}: UnstableSortableItemRenderProps ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Box\n\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\tstyle={ itemStyle }\n\t\t\t\t\t\tcomponent={ 'li' }\n\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tbackgroundColor: isDragOverlay ? 'background.paper' : undefined,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ children( {\n\t\t\t\t\t\t\titemProps,\n\t\t\t\t\t\t\tisDragged,\n\t\t\t\t\t\t\ttriggerProps,\n\t\t\t\t\t\t\titemStyle,\n\t\t\t\t\t\t\ttriggerStyle,\n\t\t\t\t\t\t\tisDragPlaceholder,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t{ showDropIndication && <SortableItemIndicator style={ dropIndicationStyle } /> }\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n};\n\nconst StyledSortableTrigger = styled( 'div' )( ( { theme } ) => ( {\n\tposition: 'absolute',\n\tleft: 0,\n\ttop: '50%',\n\ttransform: `translate( -${ theme.spacing( 1.5 ) }, -50% )`,\n\tcolor: theme.palette.action.active,\n} ) );\n\nconst SortableItemIndicator = styled( Box )`\n\twidth: 100%;\n\theight: 1px;\n\tbackground-color: ${ ( { theme } ) => theme.palette.text.primary };\n`;\n","import * as React from 'react';\nimport { type FC } from 'react';\nimport type { StyleDefinition } from '@elementor/editor-styles';\nimport { ColorSwatchIcon, PhotoIcon } from '@elementor/icons';\nimport { Box, Link, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearchAndFilters } from '../search-and-filter/context';\n\nexport const getNotFoundType = (\n\tsearchValue: string,\n\tfilters: string[] | null | undefined,\n\tfilteredClasses: StyleDefinition[]\n): NotFoundType | undefined => {\n\tconst searchNotFound = filteredClasses.length <= 0 && searchValue.length > 1;\n\tconst filterNotFound = filters && filters.length === 0;\n\tconst filterAndSearchNotFound = searchNotFound && filterNotFound;\n\n\tif ( filterAndSearchNotFound ) {\n\t\treturn 'filterAndSearch';\n\t}\n\tif ( searchNotFound ) {\n\t\treturn 'search';\n\t}\n\tif ( filterNotFound ) {\n\t\treturn 'filter';\n\t}\n\treturn undefined;\n};\n\nexport type NotFoundType = 'filter' | 'search' | 'filterAndSearch';\n\nconst notFound = {\n\tfilterAndSearch: {\n\t\tmainText: __( 'Sorry, nothing matched.', 'elementor' ),\n\t\tsceneryText: __( 'Try something else.', 'elementor' ),\n\t\ticon: <PhotoIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n\tsearch: {\n\t\tmainText: __( 'Sorry, nothing matched', 'elementor' ),\n\t\tsceneryText: __( 'Clear your input and try something else.', 'elementor' ),\n\t\ticon: <PhotoIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n\tfilter: {\n\t\tmainText: __( 'Sorry, nothing matched that search.', 'elementor' ),\n\t\tsceneryText: __( 'Clear the filters and try something else.', 'elementor' ),\n\t\ticon: <ColorSwatchIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n};\n\ntype GetNotFoundConfigProps = {\n\tnotFoundType: NotFoundType;\n};\n\nexport const NotFound = ( { notFoundType }: GetNotFoundConfigProps ): React.ReactElement => {\n\tconst {\n\t\tsearch: { onClearSearch, inputValue },\n\t\tfilters: { onClearFilter },\n\t} = useSearchAndFilters();\n\n\tswitch ( notFoundType ) {\n\t\tcase 'filter':\n\t\t\treturn <NotFoundLayout { ...notFound.filter } onClear={ onClearFilter } />;\n\t\tcase 'search':\n\t\t\treturn <NotFoundLayout { ...notFound.search } searchValue={ inputValue } onClear={ onClearSearch } />;\n\t\tcase 'filterAndSearch':\n\t\t\treturn (\n\t\t\t\t<NotFoundLayout\n\t\t\t\t\t{ ...notFound.filterAndSearch }\n\t\t\t\t\tonClear={ () => {\n\t\t\t\t\t\tonClearFilter();\n\t\t\t\t\t\tonClearSearch();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t);\n\t}\n};\n\ntype NotFoundLayoutProps = {\n\tsearchValue?: string;\n\tonClear: () => void;\n\tmainText: string;\n\tsceneryText: string;\n\ticon: React.ReactElement;\n};\n\nexport const NotFoundLayout: FC< NotFoundLayoutProps > = ( { onClear, searchValue, mainText, sceneryText, icon } ) => (\n\t<Stack\n\t\tcolor={ 'text.secondary' }\n\t\tpt={ 5 }\n\t\talignItems=\"center\"\n\t\tgap={ 1 }\n\t\toverflow={ 'hidden' }\n\t\tjustifySelf={ 'center' }\n\t>\n\t\t{ icon }\n\t\t<Box\n\t\t\tsx={ {\n\t\t\t\twidth: '100%',\n\t\t\t} }\n\t\t>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t{ mainText }\n\t\t\t</Typography>\n\t\t\t{ searchValue && (\n\t\t\t\t<Typography\n\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<span>“</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>”.</span>\n\t\t\t\t</Typography>\n\t\t\t) }\n\t\t</Box>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t{ sceneryText }\n\t\t</Typography>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ onClear }>\n\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t</Link>\n\t\t</Typography>\n\t</Stack>\n);\n","type ExtendedWindow = Window & {\n\t$e?: {\n\t\tcomponents?: {\n\t\t\tget?: ( name: 'panel' ) =>\n\t\t\t\t| {\n\t\t\t\t\t\tblockUserInteractions?: () => void;\n\t\t\t\t\t\tunblockUserInteractions?: () => void;\n\t\t\t\t }\n\t\t\t\t| undefined;\n\t\t};\n\t};\n};\n\nexport function blockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.blockUserInteractions?.();\n}\n\nexport function unblockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.unblockUserInteractions?.();\n}\n","import * as React from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Divider } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\nimport { trackGlobalClasses } from '../utils/tracking';\n\ntype OwnProps = {\n\tsuccessCallback: ( _: string ) => void;\n\tstyleDef: StyleDefinition | null;\n\tcanConvert: boolean;\n};\n\nexport const ConvertLocalClassToGlobalClass = ( props: OwnProps ) => {\n\tconst localStyleData = props.styleDef;\n\n\tconst handleConversion = () => {\n\t\tconst newClassName = createClassName( `converted-class-` );\n\n\t\tif ( ! localStyleData ) {\n\t\t\tthrow new Error( 'Style definition is required for converting local class to global class.' );\n\t\t}\n\n\t\tconst newId = globalClassesStylesProvider.actions.create?.( newClassName, localStyleData.variants );\n\t\tif ( newId ) {\n\t\t\tprops.successCallback( newId );\n\t\t\ttrackGlobalClasses( {\n\t\t\t\tclassId: newId,\n\t\t\t\tevent: 'classCreated',\n\t\t\t\tsource: 'converted',\n\t\t\t\tclassTitle: newClassName,\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<MenuListItem\n\t\t\t\tdisabled={ ! props.canConvert }\n\t\t\t\tonClick={ handleConversion }\n\t\t\t\tdense\n\t\t\t\tsx={ {\n\t\t\t\t\t'&.Mui-focusVisible': {\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tboxShadow: 'none !important',\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Convert to global class', 'elementor' ) }\n\t\t\t</MenuListItem>\n\t\t\t<Divider />\n\t\t</>\n\t);\n};\n\nfunction createClassName( prefix: string ): string {\n\tlet i = 1;\n\tlet newClassName = `${ prefix }${ i }`;\n\n\twhile ( ! validateStyleLabel( newClassName, 'create' ).isValid ) {\n\t\tnewClassName = `${ prefix }${ ++i }`;\n\t}\n\n\treturn newClassName;\n}\n","import { useEffect } from 'react';\nimport { __useDispatch as useDispatch } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { slice } from '../store';\n\nexport function PopulateStore() {\n\tconst dispatch = useDispatch();\n\n\tuseEffect( () => {\n\t\tPromise.all( [ apiClient.all( 'preview' ), apiClient.all( 'frontend' ) ] ).then(\n\t\t\t( [ previewRes, frontendRes ] ) => {\n\t\t\t\tconst { data: previewData } = previewRes;\n\t\t\t\tconst { data: frontendData } = frontendRes;\n\n\t\t\t\tdispatch(\n\t\t\t\t\tslice.actions.load( {\n\t\t\t\t\t\tpreview: {\n\t\t\t\t\t\t\titems: previewData.data,\n\t\t\t\t\t\t\torder: previewData.meta.order,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfrontend: {\n\t\t\t\t\t\t\titems: frontendData.data,\n\t\t\t\t\t\t\torder: frontendData.meta.order,\n\t\t\t\t\t\t},\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}, [ dispatch ] );\n\n\treturn null;\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { initClassesResource } from './classes-resource';\nimport initMcpApplyUnapplyGlobalClasses from './mcp-apply-unapply-global-classes';\nimport { initCreateGlobalClass } from './mcp-create-global-class';\nimport initMcpApplyGetGlobalClassUsages from './mcp-get-global-class-usages';\nimport { initModifyGlobalClass } from './mcp-modify-global-class';\n\nexport const initMcpIntegration = () => {\n\tconst reg = getMCPByDomain( 'canvas' );\n\tinitMcpApplyUnapplyGlobalClasses( reg );\n\tinitMcpApplyGetGlobalClassUsages( reg );\n\tinitCreateGlobalClass( reg );\n\tinitModifyGlobalClass( reg );\n\tinitClassesResource();\n};\n","import { doApplyClasses, doGetAppliedClasses, doUnapplyClass } from '@elementor/editor-editing-panel';\nimport { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nexport default function initMcpApplyUnapplyGlobalClasses( server: MCPRegistryEntry ) {\n\tserver.addTool( {\n\t\tschema: {\n\t\t\tclassId: z.string().describe( 'The ID of the class to apply' ),\n\t\t\telementId: z.string().describe( 'The ID of the element to which the class will be applied' ),\n\t\t},\n\t\toutputSchema: {\n\t\t\tresult: z.string().describe( 'Result message indicating the success of the apply operation' ),\n\t\t},\n\t\tname: 'apply-global-class',\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.7,\n\t\t\tspeedPriority: 0.8,\n\t\t},\n\t\tdescription: `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.\n List available at always up-to-date resource 'elementor://global-classes'.\n- Make sure you have the correct class ID that you want to apply.`,\n\t\thandler: async ( params ) => {\n\t\t\tconst { classId, elementId } = params;\n\t\t\tconst appliedClasses = doGetAppliedClasses( elementId );\n\t\t\tdoApplyClasses( elementId, [ ...appliedClasses, classId ] );\n\t\t\treturn {\n\t\t\t\tllm_instructions:\n\t\t\t\t\t'Please check the element-configuration, find DUPLICATES in the style schema that are in the class, and remove them',\n\t\t\t\tresult: `Class ${ classId } applied to element ${ elementId } successfully.`,\n\t\t\t};\n\t\t},\n\t} );\n\n\tserver.addTool( {\n\t\tname: 'unapply-global-class',\n\t\tschema: {\n\t\t\tclassId: z.string().describe( 'The ID of the class to unapply' ),\n\t\t\telementId: z.string().describe( 'The ID of the element from which the class will be unapplied' ),\n\t\t},\n\t\toutputSchema: {\n\t\t\tresult: z.string().describe( 'Result message indicating the success of the unapply operation' ),\n\t\t},\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.7,\n\t\t\tspeedPriority: 0.8,\n\t\t},\n\t\tdescription: `Unapply a (global) class from the current element\n\n## When to use this tool:\n- When a user requests to unapply a global class or a class from an element in the Elementor editor.\n- When you need to remove a specific class from an element's applied classes.\n\n## Prerequisites:\n- Ensure you have the most up-to-date list of classes applied to the element to avoid errors.\n The list is available at always up-to-date resource 'elementor://global-classes'.\n- Make sure you have the correct class ID that you want to unapply.\n\n<note>\nIf the user want to unapply a class by it's name and not ID, retreive the id from the list, available at uri elementor://global-classes\n</note>\n`,\n\t\thandler: async ( params ) => {\n\t\t\tconst { classId, elementId } = params;\n\t\t\tconst ok = doUnapplyClass( elementId, classId );\n\t\t\tif ( ! ok ) {\n\t\t\t\tthrow new Error( `Class ${ classId } is not applied to element ${ elementId }, cannot unapply it.` );\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tresult: `Class ${ classId } unapplied from element ${ elementId } successfully.`,\n\t\t\t};\n\t\t},\n\t} );\n}\n","import { STYLE_SCHEMA_URI } from '@elementor/editor-canvas';\nimport { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { Schema } from '@elementor/editor-props';\nimport { getStylesSchema } from '@elementor/editor-styles';\nimport { Utils } from '@elementor/editor-variables';\nimport { z } from '@elementor/schema';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\nimport { saveGlobalClasses } from '../save-global-classes';\nimport { GLOBAL_CLASSES_URI } from './classes-resource';\n\nexport const inputSchema = {\n\tglobalClassName: z.string().describe( 'The name of the global class to be created' ),\n\tprops: z\n\t\t.record( z.any() )\n\t\t.describe(\n\t\t\t'key-value of style-schema PropValues applied to the global class. Available properties at dynamic resource \"elementor://styles/schema/{property-name}\"'\n\t\t)\n\t\t.default( {} ),\n\tcustomCss: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Additional CSS styles associated with the global class. Use only if you fail to use the schema, specifically backgrounds'\n\t\t),\n\tbreakpoint: z\n\t\t.nullable(\n\t\t\tz\n\t\t\t\t.enum( [ 'desktop', 'tablet', 'mobile', 'laptop', 'widescreen', 'tablet_extra', 'mobile_extra' ] )\n\t\t\t\t.describe( 'The responsive breakpoint name for which the global class styles should be applied' )\n\t\t)\n\t\t.default( null )\n\t\t.describe( 'The responsive breakpoint name for which the global class styles should be applied' ),\n};\n\nconst outputSchema = {\n\tclassId: z.string().describe( 'The unique identifier of the newly created global class' ),\n};\n\ntype InputSchema = z.infer< ReturnType< typeof z.object< typeof inputSchema > > >;\ntype OutputSchema = z.infer< ReturnType< typeof z.object< typeof outputSchema > > >;\n\nexport const handler = async ( input: InputSchema ): Promise< OutputSchema > => {\n\tconst customCss = input.customCss ? { raw: btoa( input.customCss ) } : null;\n\tconst { delete: deleteClass, create } = globalClassesStylesProvider.actions;\n\tif ( ! create || ! deleteClass ) {\n\t\tthrow new Error( 'Create action is not available' );\n\t}\n\tconst errors: string[] = [];\n\tconst stylesSchema = getStylesSchema();\n\tconst validProps = Object.keys( stylesSchema );\n\n\tObject.keys( input.props ).forEach( ( key ) => {\n\t\tconst propType = getStylesSchema()[ key ];\n\t\tif ( ! propType ) {\n\t\t\terrors.push( `Property \"${ key }\" does not exist in styles schema.` );\n\t\t\treturn;\n\t\t}\n\t\tconst { valid, jsonSchema } = Schema.validatePropValue( propType, input.props[ key ] );\n\t\tif ( ! valid ) {\n\t\t\terrors.push(\n\t\t\t\t`- Property \"${ key }\" has invalid value\\n Exact schema: \\`\\`\\`json\\n${ jsonSchema }\\`\\`\\`\\n`\n\t\t\t);\n\t\t}\n\t} );\n\tif ( errors.length > 0 ) {\n\t\tthrow new Error(\n\t\t\t`Errors:\\n${ errors.join( '\\n' ) }\\nAvailable Properties: ${ validProps.join(\n\t\t\t\t', '\n\t\t\t) }\\nNow that you have this information, update your input and try again`\n\t\t);\n\t}\n\tObject.keys( input.props ).forEach( ( key ) => {\n\t\tinput.props[ key ] = Schema.adjustLlmPropValueSchema( input.props[ key ], {\n\t\t\ttransformers: Utils.globalVariablesLLMResolvers,\n\t\t} );\n\t} );\n\tconst classId = create( input.globalClassName, [\n\t\t{\n\t\t\tmeta: {\n\t\t\t\tbreakpoint: input.breakpoint === null ? 'desktop' : input.breakpoint,\n\t\t\t\tstate: null,\n\t\t\t},\n\t\t\tcustom_css: customCss,\n\t\t\tprops: input.props,\n\t\t},\n\t] );\n\ttry {\n\t\tawait saveGlobalClasses( { context: 'frontend' } );\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t} catch ( err ) {\n\t\tdeleteClass( classId );\n\t\tawait saveGlobalClasses( { context: 'frontend' } );\n\t\tthrow new Error( `Failed to create global class, probably invalid schema values.` );\n\t}\n\treturn {\n\t\tclassId,\n\t};\n};\n\nexport const initCreateGlobalClass = ( reg: MCPRegistryEntry ) => {\n\tconst { addTool } = reg;\n\n\taddTool( {\n\t\trequiredResources: [\n\t\t\t{ uri: GLOBAL_CLASSES_URI, description: 'Global classes list' },\n\t\t\t{ uri: STYLE_SCHEMA_URI, description: 'Style schema resources' },\n\t\t],\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.85,\n\t\t\tspeedPriority: 0.6,\n\t\t},\n\t\tdescription: `Create a new global class within the Elementor editor, allowing users to define reusable styles and properties for consistent design across their website.\n \n# Prequisites: CRITICAL\n- Read the style schema at [elementor://styles/schema/{category}] to understand the valid properties and values that can be assigned to the global class.\n- Available style properties can be found in the styles schema dynamic resources available from 'canvas' mcp. List the resources to see all available properties.\n- YOU MUST USE THE STYLE SCHEMA TO BUILD THE \"props\" PARAMETER CORRECTLY, OTHERWISE THE GLOBAL CLASS CREATION WILL FAIL.\n- Ensure that the global class name provided does not already exist to avoid duplication.\n- Read the styles schema resource available from 'canvas' mcp to understand the valid properties and values that can be assigned to the global class.\n\n## Parameters:\n- \\`globalClassName\\` (string, required): The name of the global class to be created.\n- \\`props\\` (object, required): A key-value map of style-schema PropValues that define the styles for the global class.\n- \\`breakpoint\\` (string | null, optional): The responsive breakpoint for which the styles should be applied. If null, styles apply to all breakpoints.\n\n## Example usage:\n\\`\\`\\`json\n{\n \"globalClassName\": \"my-new-class\",\n \"props\": {\n \"color\": {\n \"$$type\": \"color\",\n \"value\": \"#ff0000\"\n },\n \"fontSize\": {\n \"$$type\": \"size\",\n \"value\": {\n \"size\": {\n \"$$type\": \"number\",\n \"value\": 2.5\n },\n \"unit\": {\n \"$$type\": \"string\",\n \"value\": \"em\"\n }\n }\n }\n },\n \"breakpoint\": \"desktop\"\n}\n\n# Next steps:\nIf failed, read the error message carefully, it includes the exact schema that caused the failure for each invalid property.\nNow that you have this information, update your input and try again.\n\n\\`\\`\\`\n`,\n\t\tname: 'create-global-class',\n\t\tschema: inputSchema,\n\t\toutputSchema,\n\t\thandler,\n\t} );\n};\n","import { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { type CssClassUsageContent, type EnhancedCssClassUsageContent } from '../components/css-class-usage/types';\n\nexport default function initMcpApplyGetGlobalClassUsages( reg: MCPRegistryEntry ) {\n\tconst { addTool } = reg;\n\tconst globalClassesUsageSchema = {\n\t\tusages: z.array(\n\t\t\tz.object( {\n\t\t\t\tclassId: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The ID of the class, not visible to the user. To retreive the name of the class, use the \"list-global-classes\" tool'\n\t\t\t\t\t),\n\t\t\t\tusages: z.array(\n\t\t\t\t\tz.object( {\n\t\t\t\t\t\tpageId: z.string().describe( 'The ID of the page where the class is used' ),\n\t\t\t\t\t\ttitle: z.string().describe( 'The title of the page where the class is used' ),\n\t\t\t\t\t\ttotal: z.number().describe( 'The number of times the class is used on this page' ),\n\t\t\t\t\t\telements: z.array( z.string() ).describe( 'List of element IDs using this class on the page' ),\n\t\t\t\t\t} )\n\t\t\t\t),\n\t\t\t} )\n\t\t),\n\t};\n\n\taddTool( {\n\t\tname: 'get-global-class-usages',\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.6,\n\t\t\tspeedPriority: 0.8,\n\t\t},\n\t\tdescription: `Retreive the usages of global-classes ACCROSS PAGES designed by Elementor editor.\n\n## Prequisites: CRITICAL\n- The list of global classes and their applid values is available at resource uri elementor://global-classes\n\n## When to use this tool:\n- When a user requests to see where a specific global class is being used accross the site.\n- When you need to manage or clean up unused global classes.\n- Before deleting a global class, to ensure it is not in use in any other pages.\n\n## When NOT to use this tool:\n- For getting the list of global classes, refer to the resource at uri elementor://global-classes\n`,\n\t\toutputSchema: globalClassesUsageSchema,\n\t\thandler: async () => {\n\t\t\tconst data = await fetchCssClassUsage();\n\t\t\tconst result = {\n\t\t\t\tusages: [] as z.infer< ( typeof globalClassesUsageSchema )[ 'usages' ] >,\n\t\t\t};\n\n\t\t\tObject.entries( data as unknown as EnhancedCssClassUsageContent ).forEach(\n\t\t\t\t( [ classId, usageDetails ] ) => {\n\t\t\t\t\tconst newEntry: ( typeof result )[ 'usages' ][ 0 ] = {\n\t\t\t\t\t\tclassId,\n\t\t\t\t\t\tusages: [],\n\t\t\t\t\t};\n\t\t\t\t\tif ( typeof usageDetails !== 'number' ) {\n\t\t\t\t\t\tconst { content } = usageDetails as unknown as { content: CssClassUsageContent[] };\n\t\t\t\t\t\tcontent.forEach( ( detail ) => {\n\t\t\t\t\t\t\tnewEntry.usages.push( {\n\t\t\t\t\t\t\t\tpageId: String( detail.pageId ),\n\t\t\t\t\t\t\t\ttitle: detail.title,\n\t\t\t\t\t\t\t\ttotal: detail.total,\n\t\t\t\t\t\t\t\telements: detail.elements,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tresult.usages.push( newEntry );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn result;\n\t\t},\n\t} );\n}\n","import { BREAKPOINTS_SCHEMA_URI } from '@elementor/editor-canvas';\nimport { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { Schema } from '@elementor/editor-props';\nimport { type BreakpointId } from '@elementor/editor-responsive';\nimport { getStylesSchema } from '@elementor/editor-styles';\nimport { Utils } from '@elementor/editor-variables';\nimport { z } from '@elementor/schema';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\nimport { saveGlobalClasses } from '../save-global-classes';\nimport { GLOBAL_CLASSES_URI } from './classes-resource';\n\nconst schema = {\n\tclassId: z.string().describe( 'The ID of the global class to modify' ),\n\tprops: z\n\t\t.record( z.any() )\n\t\t.describe(\n\t\t\t'key-value of style-schema PropValues to update the global class with. Available properties at dynamic resource \"elementor://styles/schema/{property-name}\"'\n\t\t),\n\tbreakpoint: z\n\t\t.nullable( z.string() )\n\t\t.default( null )\n\t\t.describe( 'The responsive breakpoint name for which the global class styles should be applied' ),\n\tcustomCss: z.string().optional().describe( 'The CSS styles associated with the global class.' ),\n};\n\nconst handler = async ( params: z.infer< ReturnType< typeof z.object< typeof schema > > > ) => {\n\tconst { classId, props } = params;\n\tconst customCss = params.customCss ? { raw: btoa( params.customCss ) } : null;\n\tconst { update, delete: deleteClass } = globalClassesStylesProvider.actions;\n\tif ( ! update || ! deleteClass ) {\n\t\tthrow new Error( 'Update action is not available' );\n\t}\n\tconst errors: string[] = [];\n\tconst validProps = Object.keys( getStylesSchema() );\n\tObject.keys( props ).forEach( ( key ) => {\n\t\tconst propType = getStylesSchema()[ key ];\n\t\tif ( ! propType ) {\n\t\t\terrors.push( `Property \"${ key }\" does not exist in styles schema.` );\n\t\t\treturn;\n\t\t}\n\t\tconst { valid, jsonSchema } = Schema.validatePropValue( propType, props[ key ] );\n\t\tif ( ! valid ) {\n\t\t\terrors.push( `- Property \"${ key }\" has invalid value:\\n expected Schema: ${ jsonSchema }\\n` );\n\t\t}\n\t} );\n\tif ( errors.length > 0 ) {\n\t\tthrow new Error(\n\t\t\t`Errors:\\n${ errors.join( '\\n' ) }\\nAvailable Properties: ${ validProps.join(\n\t\t\t\t', '\n\t\t\t) }\\nNow that you have this information, update your input and try again`\n\t\t);\n\t}\n\tObject.keys( props ).forEach( ( key ) => {\n\t\tprops[ key ] = Schema.adjustLlmPropValueSchema( props[ key ], {\n\t\t\ttransformers: Utils.globalVariablesLLMResolvers,\n\t\t} );\n\t} );\n\tconst snapshot = structuredClone( globalClassesStylesProvider.actions.all() );\n\ttry {\n\t\tupdate( {\n\t\t\tid: classId,\n\t\t\tvariants: [\n\t\t\t\t{\n\t\t\t\t\tcustom_css: customCss,\n\t\t\t\t\tprops,\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tbreakpoint: params.breakpoint === null ? 'desktop' : ( params.breakpoint as BreakpointId ),\n\t\t\t\t\t\tstate: null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t} );\n\t\tawait saveGlobalClasses( { context: 'frontend' } );\n\t} catch ( error ) {\n\t\tsnapshot.forEach( ( style ) => {\n\t\t\tupdate( {\n\t\t\t\tid: style.id,\n\t\t\t\tvariants: style.variants,\n\t\t\t} );\n\t\t} );\n\t\tawait saveGlobalClasses( { context: 'frontend' } );\n\t\tthrow new Error( `Failed to modify global class: ${ ( error as Error ).message }` );\n\t}\n\treturn 'ok';\n};\n\nexport const initModifyGlobalClass = ( reg: MCPRegistryEntry ) => {\n\tconst { addTool } = reg;\n\n\taddTool( {\n\t\tname: 'modify-global-class',\n\t\trequiredResources: [\n\t\t\t{\n\t\t\t\tdescription: 'Breakpoints list',\n\t\t\t\turi: BREAKPOINTS_SCHEMA_URI,\n\t\t\t},\n\t\t\t{\n\t\t\t\tdescription: 'Global classes list',\n\t\t\t\turi: GLOBAL_CLASSES_URI,\n\t\t\t},\n\t\t],\n\t\tmodelPreferences: {\n\t\t\thints: [ { name: 'claude-sonnet-4-5' } ],\n\t\t\tintelligencePriority: 0.85,\n\t\t\tspeedPriority: 0.6,\n\t\t},\n\t\tdescription: `Modify an existing global class within the Elementor editor, allowing users to update styles and properties for consistent design across their website.\n# CRITICAL Prequisites:\n- Read the style schema at [elementor://styles/schema/{category}] to understand the valid properties and values that can be assigned to the global class.\n- Ensure that the global class ID provided exists.\n- Prefer style schema over custom_css\n\n## Parameters:\n- \\`classId\\` (string, required): The ID of the global class to be modified.\n- \\`props\\` (object, required): A key-value map of style-schema PropValues that define the new styles for the global class.\n- \\`customCss\\` (string, optional): The CSS styles associated with the global class.\n\n## Example usage:\n\\`\\`\\`json\n{\n \"classId\": \"existing-class-id\",\n \"props\": {\n \"color\": {\n \"$$type\": \"color\",\n \"value\": \"#00ff00\"\n },\n }\n}\\`\\`\\`\n`,\n\t\tschema,\n\t\thandler,\n\t} );\n};\n","import { useEffect } from 'react';\nimport { __privateListenTo as listenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';\n\nimport { usePanelActions } from './components/class-manager/class-manager-panel';\nimport { syncWithDocumentSave } from './sync-with-document-save';\n\nexport function SyncWithDocumentSave() {\n\tconst panelActions = usePanelActions();\n\n\tuseEffect( () => {\n\t\tlistenTo( v1ReadyEvent(), () => {\n\t\t\tsyncWithDocumentSave( panelActions );\n\t\t} );\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [] );\n\n\treturn null;\n}\n","import { getCurrentUser } from '@elementor/editor-current-user';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { UPDATE_CLASS_CAPABILITY_KEY } from './capabilities';\nimport { saveGlobalClasses } from './save-global-classes';\nimport { selectIsDirty } from './store';\n\nexport function syncWithDocumentSave( panelActions?: { open: () => void } ) {\n\tconst unsubscribe = syncDirtyState();\n\n\tbindSaveAction( panelActions );\n\n\treturn unsubscribe;\n}\n\nfunction syncDirtyState() {\n\treturn subscribeWithSelector( selectIsDirty, () => {\n\t\tif ( ! isDirty() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetDocumentModifiedStatus( true );\n\t} );\n}\n\nfunction bindSaveAction( panelActions?: { open: () => void } ) {\n\tregisterDataHook( 'dependency', 'document/save/save', ( args ) => {\n\t\tconst user = getCurrentUser();\n\n\t\tconst canEdit = user?.capabilities.includes( UPDATE_CLASS_CAPABILITY_KEY );\n\n\t\tif ( ! canEdit ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tsaveGlobalClasses( {\n\t\t\tcontext: args.status === 'publish' ? 'frontend' : 'preview',\n\t\t\tonApprove: panelActions?.open,\n\t\t} );\n\n\t\treturn true;\n\t} );\n}\n\nfunction isDirty() {\n\treturn selectIsDirty( getState() );\n}\n"],"mappings":"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","names":["import_editor_styles","import_store","createSlice","id","context","createSelector","import_store","context","getState","getState","id","dispatch","subscribeWithSelector","import_editor_editing_panel","import_editor_panels","import_editor_styles_repository","import_store","React","import_editor_documents","import_editor_styles_repository","import_editor_ui","import_ui","import_i18n","React","import_react","import_editor_documents","import_editor_ui","import_editor_v1_adapters","import_icons","import_query","import_store","import_ui","import_i18n","import_store","useSelector","import_store","useSelector","import_react","import_utils","context","import_react","import_query","import_store","useActiveDocument","id","React","import_editor_ui","import_store","import_utils","React","import_i18n","context","getState","dispatch","id","React","import_ui","import_i18n","React","import_icons","import_ui","React","import_ui","import_i18n","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_ui","import_i18n","import_editor_documents","import_editor_v1_adapters","import_store","id","dispatch","runCommand","React","import_icons","React","import_react","import_store","import_ui","import_i18n","import_store","useSelector","React","import_react","import_editor_styles_repository","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_documents","import_editor_ui","import_icons","import_ui","import_i18n","id","useOpenDocumentInNewTab","React","import_editor_ui","import_icons","import_ui","import_i18n","id","CustomIconButton","React","import_react","import_editor_ui","import_ui","import_i18n","openDialog","closeDialog","id","React","import_icons","import_ui","id","id","openDialog","React","import_icons","import_ui","import_i18n","dispatch","useDispatch","handler","id","createPanel","isDirty","dispatch","useActiveDocument","useActiveDocumentActions","React","import_editor_styles_repository","import_editor_ui","import_ui","import_i18n","import_react","import_store","dispatch","useDispatch","import_editor_mcp","import_editor_styles","import_schema","deleteClass","import_schema","import_editor_canvas","import_editor_props","import_editor_styles","import_editor_variables","import_schema","handler","deleteClass","import_react","import_editor_v1_adapters","import_editor_current_user","import_editor_documents","import_editor_v1_adapters","import_store","subscribeWithSelector","getState","listenTo","registerSlice","registerPanel"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/mcp-integration/classes-resource.ts","../src/global-classes-styles-provider.ts","../src/capabilities.ts","../src/errors.ts","../src/store.ts","../src/utils/snapshot-history.ts","../src/utils/tracking.ts","../src/api.ts","../src/components/css-class-usage/utils.ts","../service/css-class-usage-service.ts","../src/init.ts","../src/components/class-manager/class-manager-button.tsx","../src/hooks/use-prefetch-css-class-usage.ts","../src/components/css-class-usage/types.ts","../src/components/class-manager/class-manager-panel.tsx","../src/hooks/use-classes-order.ts","../src/hooks/use-dirty-state.ts","../src/hooks/use-filters.ts","../src/components/search-and-filter/context.tsx","../src/hooks/use-filtered-css-class-usage.tsx","../src/hooks/use-css-class-usage.ts","../src/hooks/use-empty-css-class.ts","../src/save-global-classes.tsx","../src/components/class-manager/duplicate-label-dialog.tsx","../src/components/search-and-filter/components/filter/active-filters.tsx","../src/components/search-and-filter/components/filter/clear-icon-button.tsx","../src/components/search-and-filter/components/filter/filter-list.tsx","../src/components/search-and-filter/components/filter/css-class-filter.tsx","../src/components/search-and-filter/components/search/class-manager-search.tsx","../src/components/class-manager/class-manager-introduction.tsx","../src/components/class-manager/delete-class.ts","../src/components/class-manager/flipped-color-swatch-icon.tsx","../src/components/class-manager/global-classes-list.tsx","../src/hooks/use-ordered-classes.ts","../src/components/class-manager/class-item.tsx","../src/components/css-class-usage/components/css-class-usage-popover.tsx","../src/hooks/use-css-class-usage-by-id.ts","../src/components/css-class-usage/components/css-class-usage-trigger.tsx","../src/components/class-manager/delete-confirmation-dialog.tsx","../src/components/class-manager/sortable.tsx","../src/components/class-manager/not-found.tsx","../src/components/class-manager/panel-interactions.ts","../src/components/convert-local-class-to-global-class.tsx","../src/components/populate-store.tsx","../src/mcp-integration/index.ts","../src/mcp-integration/mcp-apply-unapply-global-classes.ts","../src/mcp-integration/mcp-get-global-class-usages.ts","../src/mcp-integration/mcp-manage-global-classes.ts","../src/sync-with-document.tsx","../src/sync-with-document-save.ts"],"sourcesContent":["export { GLOBAL_CLASSES_URI } from './mcp-integration/classes-resource';\n\nexport { init } from './init';\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\n\nexport const GLOBAL_CLASSES_URI = 'elementor://global-classes';\n\nexport const initClassesResource = () => {\n\tconst canvasMcpEntry = getMCPByDomain( 'canvas' );\n\tconst classesMcpEntry = getMCPByDomain( 'classes' );\n\n\t[ canvasMcpEntry, classesMcpEntry ].forEach( ( entry ) => {\n\t\tconst { mcpServer, resource, waitForReady } = entry;\n\t\tresource(\n\t\t\t'global-classes',\n\t\t\tGLOBAL_CLASSES_URI,\n\t\t\t{\n\t\t\t\tdescription: 'Global classes list.',\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\treturn {\n\t\t\t\t\tcontents: [ { uri: GLOBAL_CLASSES_URI, text: localStorage[ 'elementor-global-classes' ] ?? '{}' } ],\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\t\twaitForReady().then( () => {\n\t\t\tglobalClassesStylesProvider.subscribe( () => {\n\t\t\t\tmcpServer.sendResourceListChanged();\n\t\t\t} );\n\t\t} );\n\t} );\n};\n","import { generateId, type StyleDefinition, type StyleDefinitionVariant } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\nimport {\n\t__dispatch as dispatch,\n\t__getState as getState,\n\t__subscribeWithSelector as subscribeWithSelector,\n} from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { getCapabilities } from './capabilities';\nimport { GlobalClassLabelAlreadyExistsError, GlobalClassTrackingError } from './errors';\nimport {\n\tselectClass,\n\tselectData,\n\tselectGlobalClasses,\n\tselectOrderedClasses,\n\tslice,\n\ttype StateWithGlobalClasses,\n} from './store';\nimport { trackGlobalClasses, type TrackingEvent } from './utils/tracking';\n\nconst MAX_CLASSES = 100;\n\nexport const GLOBAL_CLASSES_PROVIDER_KEY = 'global-classes';\n\nexport const globalClassesStylesProvider = createStylesProvider( {\n\tkey: GLOBAL_CLASSES_PROVIDER_KEY,\n\tpriority: 30,\n\tlimit: MAX_CLASSES,\n\tlabels: {\n\t\tsingular: __( 'class', 'elementor' ),\n\t\tplural: __( 'classes', 'elementor' ),\n\t},\n\tsubscribe: ( cb ) => subscribeWithStates( cb ),\n\tcapabilities: getCapabilities(),\n\tactions: {\n\t\tall: () => {\n\t\t\tconst selectAllClasses = selectOrderedClasses( getState() );\n\t\t\tlocalStorage.setItem( 'elementor-global-classes', JSON.stringify( selectAllClasses ) );\n\t\t\treturn selectAllClasses;\n\t\t},\n\t\tget: ( id ) => selectClass( getState(), id ),\n\t\tresolveCssName: ( id: string ) => {\n\t\t\treturn selectClass( getState(), id )?.label ?? id;\n\t\t},\n\t\tcreate: ( label, variants: StyleDefinitionVariant[] = [] ) => {\n\t\t\tconst classes = selectGlobalClasses( getState() );\n\n\t\t\tconst existingLabels = Object.values( classes ).map( ( style ) => style.label );\n\n\t\t\tif ( existingLabels.includes( label ) ) {\n\t\t\t\tthrow new GlobalClassLabelAlreadyExistsError( { context: { label } } );\n\t\t\t}\n\n\t\t\tconst existingIds = Object.keys( classes );\n\t\t\tconst id = generateId( 'g-', existingIds );\n\n\t\t\tdispatch(\n\t\t\t\tslice.actions.add( {\n\t\t\t\t\tid,\n\t\t\t\t\ttype: 'class',\n\t\t\t\t\tlabel,\n\t\t\t\t\tvariants,\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\treturn id;\n\t\t},\n\t\tupdate: ( payload ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.update( {\n\t\t\t\t\tstyle: payload,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tdelete: ( id ) => {\n\t\t\tdispatch( slice.actions.delete( id ) );\n\t\t},\n\t\tupdateProps: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tprops: args.props,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tupdateCustomCss: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tcustom_css: args.custom_css,\n\t\t\t\t\tprops: {},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\ttracking: ( data: { event: string; [ key: string ]: unknown } ) => {\n\t\t\ttrackGlobalClasses( data as TrackingEvent ).catch( ( error ) => {\n\t\t\t\tthrow new GlobalClassTrackingError( { cause: error } );\n\t\t\t} );\n\t\t},\n\t},\n} );\n\nconst subscribeWithStates = (\n\tcb: ( previous: Record< string, StyleDefinition >, current: Record< string, StyleDefinition > ) => void\n) => {\n\tlet previousState = selectData( getState() );\n\n\treturn subscribeWithSelector(\n\t\t( state: StateWithGlobalClasses ) => state.globalClasses,\n\t\t( currentState ) => {\n\t\t\tcb( previousState.items, currentState.data.items );\n\t\t\tpreviousState = currentState.data;\n\t\t}\n\t);\n};\n","import { type UserCapabilities } from '@elementor/editor-styles-repository';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nconst EXPERIMENT_KEY = 'global_classes_should_enforce_capabilities';\nexport const UPDATE_CLASS_CAPABILITY_KEY = 'elementor_global_classes_update_class';\n\nexport const getCapabilities = (): UserCapabilities | undefined => {\n\tconst shouldEnforceCapabilities = isExperimentActive( EXPERIMENT_KEY );\n\n\tif ( shouldEnforceCapabilities ) {\n\t\treturn {\n\t\t\tupdate: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tcreate: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tdelete: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tupdateProps: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t};\n\t}\n};\n","import { createError } from '@elementor/utils';\n\nexport const GlobalClassNotFoundError = createError< { styleId: string } >( {\n\tcode: 'global_class_not_found',\n\tmessage: 'Global class not found.',\n} );\n\nexport const GlobalClassLabelAlreadyExistsError = createError< { label: string } >( {\n\tcode: 'global_class_label_already_exists',\n\tmessage: 'Class with this name already exists.',\n} );\n\nexport const GlobalClassTrackingError = createError< { cause: string } >( {\n\tcode: 'global_class_tracking_error',\n\tmessage: 'Error tracking global classes event.',\n} );\n","import { type Props } from '@elementor/editor-props';\nimport {\n\ttype CustomCss,\n\tgetVariantByMeta,\n\ttype StyleDefinition,\n\ttype StyleDefinitionID,\n\ttype StyleDefinitionVariant,\n} from '@elementor/editor-styles';\nimport { type UpdateActionPayload } from '@elementor/editor-styles-repository';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport type { ApiContext } from './api';\nimport { GlobalClassNotFoundError } from './errors';\nimport { SnapshotHistory } from './utils/snapshot-history';\n\nexport type GlobalClasses = {\n\titems: Record< StyleDefinitionID, StyleDefinition >;\n\torder: StyleDefinitionID[];\n};\n\ntype GlobalClassesState = {\n\tdata: GlobalClasses;\n\tinitialData: {\n\t\tfrontend: GlobalClasses;\n\t\tpreview: GlobalClasses;\n\t};\n\tisDirty: boolean;\n};\n\nexport type ModifiedLabels = {\n\t[ id: string ]: {\n\t\toriginal: string;\n\t\tmodified: string;\n\t};\n};\n\nconst localHistory = SnapshotHistory.get< GlobalClasses >( 'global-classes' );\n\nconst initialState: GlobalClassesState = {\n\tdata: { items: {}, order: [] },\n\tinitialData: {\n\t\tfrontend: { items: {}, order: [] },\n\t\tpreview: { items: {}, order: [] },\n\t},\n\tisDirty: false,\n};\n\nexport type StateWithGlobalClasses = SliceState< typeof slice >;\n\n// Slice\nconst SLICE_NAME = 'globalClasses';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tload(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload: { frontend, preview },\n\t\t\t}: PayloadAction< {\n\t\t\t\tfrontend: GlobalClasses;\n\t\t\t\tpreview: GlobalClasses;\n\t\t\t} >\n\t\t) {\n\t\t\tstate.initialData.frontend = frontend;\n\t\t\tstate.initialData.preview = preview;\n\t\t\tstate.data = preview;\n\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tadd( state, { payload }: PayloadAction< StyleDefinition > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tstate.data.items[ payload.id ] = payload;\n\t\t\tstate.data.order.unshift( payload.id );\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tdelete( state, { payload }: PayloadAction< StyleDefinitionID > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tstate.data.items = Object.fromEntries(\n\t\t\t\tObject.entries( state.data.items ).filter( ( [ id ] ) => id !== payload )\n\t\t\t);\n\n\t\t\tstate.data.order = state.data.order.filter( ( id ) => id !== payload );\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tsetOrder( state, { payload }: PayloadAction< StyleDefinitionID[] > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tstate.data.order = payload;\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tupdate( state, { payload }: PayloadAction< { style: UpdateActionPayload } > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tconst style = state.data.items[ payload.style.id ];\n\n\t\t\tconst mergedData = {\n\t\t\t\t...style,\n\t\t\t\t...payload.style,\n\t\t\t};\n\n\t\t\tstate.data.items[ payload.style.id ] = mergedData;\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tupdateMultiple( state, { payload }: PayloadAction< ModifiedLabels > ) {\n\t\t\tlocalHistory.next( state.data );\n\t\t\tObject.entries( payload ).forEach( ( [ id, { modified } ] ) => {\n\t\t\t\tstate.data.items[ id ].label = modified;\n\t\t\t} );\n\n\t\t\tstate.isDirty = false;\n\t\t},\n\t\tupdateProps(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload,\n\t\t\t}: PayloadAction< {\n\t\t\t\tid: StyleDefinitionID;\n\t\t\t\tmeta: StyleDefinitionVariant[ 'meta' ];\n\t\t\t\tprops: Props;\n\t\t\t\tcustom_css?: CustomCss | null;\n\t\t\t} >\n\t\t) {\n\t\t\tconst style = state.data.items[ payload.id ];\n\n\t\t\tif ( ! style ) {\n\t\t\t\tthrow new GlobalClassNotFoundError( { context: { styleId: payload.id } } );\n\t\t\t}\n\n\t\t\tlocalHistory.next( state.data );\n\n\t\t\tconst variant = getVariantByMeta( style, payload.meta );\n\t\t\tlet customCss = ( 'custom_css' in payload ? payload.custom_css : variant?.custom_css ) ?? null;\n\t\t\tcustomCss = customCss?.raw ? customCss : null;\n\n\t\t\tif ( variant ) {\n\t\t\t\t// mergeProps fails with Proxy objects from store, manually re-create clones\n\t\t\t\tconst variantProps = JSON.parse( JSON.stringify( variant.props ) ) as Props;\n\t\t\t\tconst payloadProps = JSON.parse( JSON.stringify( payload.props ) ) as Props;\n\t\t\t\tvariant.props = mergeProps( variantProps, payloadProps );\n\t\t\t\tvariant.custom_css = customCss;\n\n\t\t\t\tstyle.variants = getNonEmptyVariants( style );\n\t\t\t} else {\n\t\t\t\tstyle.variants.push( { meta: payload.meta, props: payload.props, custom_css: customCss } );\n\t\t\t}\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\treset( state, { payload: { context } }: PayloadAction< { context: ApiContext } > ) {\n\t\t\tif ( context === 'frontend' ) {\n\t\t\t\tlocalHistory.reset();\n\t\t\t\tstate.initialData.frontend = state.data;\n\n\t\t\t\tstate.isDirty = false;\n\t\t\t}\n\n\t\t\tstate.initialData.preview = state.data;\n\t\t},\n\n\t\tundo( state ) {\n\t\t\tif ( localHistory.isLast() ) {\n\t\t\t\tlocalHistory.next( state.data ); // store current before undo\n\t\t\t}\n\t\t\tconst data = localHistory.prev();\n\t\t\tif ( data ) {\n\t\t\t\tstate.data = data;\n\t\t\t\tstate.isDirty = true;\n\t\t\t} else {\n\t\t\t\tstate.data = state.initialData.preview;\n\t\t\t}\n\t\t},\n\n\t\tresetToInitialState( state, { payload: { context } }: PayloadAction< { context: ApiContext } > ) {\n\t\t\tlocalHistory.reset();\n\t\t\tstate.data = state.initialData[ context ];\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tredo( state ) {\n\t\t\tconst data = localHistory.next();\n\t\t\tif ( localHistory.isLast() ) {\n\t\t\t\tlocalHistory.prev();\n\t\t\t}\n\t\t\tif ( data ) {\n\t\t\t\tstate.data = data;\n\t\t\t\tstate.isDirty = true;\n\t\t\t}\n\t\t},\n\t},\n} );\n\nconst mergeProps = ( current: Props, updates: Props ): Props => {\n\t// edge case, the server returns an array instead of an object when empty props because of PHP array / object conversion\n\tconst props = Array.isArray( current ) ? {} : current;\n\n\tObject.entries( updates ).forEach( ( [ key, value ] ) => {\n\t\tif ( value === null || value === undefined ) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\tdelete props[ key ];\n\t\t} else {\n\t\t\tprops[ key ] = value;\n\t\t}\n\t} );\n\n\treturn props;\n};\n\nconst getNonEmptyVariants = ( style: StyleDefinition ) => {\n\treturn style.variants.filter(\n\t\t( { props, custom_css: customCss }: StyleDefinitionVariant ) => Object.keys( props ).length || customCss?.raw\n\t);\n};\n\n// Selectors\nexport const selectData = ( state: SliceState< typeof slice > ) => state[ SLICE_NAME ].data;\n\nexport const selectFrontendInitialData = ( state: SliceState< typeof slice > ) =>\n\tstate[ SLICE_NAME ].initialData.frontend;\n\nexport const selectPreviewInitialData = ( state: SliceState< typeof slice > ) =>\n\tstate[ SLICE_NAME ].initialData.preview;\n\nexport const selectOrder = createSelector( selectData, ( { order } ) => order );\n\nexport const selectGlobalClasses = createSelector( selectData, ( { items } ) => items );\n\nexport const selectIsDirty = ( state: SliceState< typeof slice > ) => state[ SLICE_NAME ].isDirty;\n\nexport const selectOrderedClasses = createSelector( selectGlobalClasses, selectOrder, ( items, order ) =>\n\torder.map( ( id ) => items[ id ] )\n);\n\nexport const selectClass = ( state: SliceState< typeof slice >, id: StyleDefinitionID ) =>\n\tstate[ SLICE_NAME ].data.items[ id ] ?? null;\n\nexport const selectEmptyCssClass = createSelector( selectData, ( { items } ) =>\n\tObject.values( items ).filter( ( cssClass ) => cssClass.variants.length === 0 )\n);\n","type Link< T > = {\n\tprev: Link< T > | null;\n\tnext: Link< T > | null;\n\tvalue: T;\n};\n\nfunction createLink< T >( { value, next, prev }: { value: T; prev?: Link< T >; next?: Link< T > } ): Link< T > {\n\treturn {\n\t\tvalue,\n\t\tprev: prev || null,\n\t\tnext: next || null,\n\t};\n}\n\nexport class SnapshotHistory< T > {\n\tprivate static registry: Record< string, SnapshotHistory< unknown > > = {};\n\n\tpublic static get< K >( namespace: string ): SnapshotHistory< K > {\n\t\tif ( ! SnapshotHistory.registry[ namespace ] ) {\n\t\t\tSnapshotHistory.registry[ namespace ] = new SnapshotHistory( namespace );\n\t\t}\n\t\treturn SnapshotHistory.registry[ namespace ] as SnapshotHistory< K >;\n\t}\n\n\tprivate first: Link< T > | null = null;\n\tprivate current: Link< T > | null = null;\n\n\tprivate constructor( public readonly namespace: string ) {}\n\n\tprivate transform( item: T ): T {\n\t\treturn JSON.parse( JSON.stringify( item ) );\n\t}\n\n\tpublic reset(): void {\n\t\tthis.first = this.current = null;\n\t}\n\n\tpublic prev(): T | null {\n\t\tif ( ! this.current || this.current === this.first ) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.current = this.current.prev;\n\t\treturn this.current?.value || null;\n\t}\n\n\tpublic isLast(): boolean {\n\t\treturn ! this.current || ! this.current.next;\n\t}\n\n\tpublic next( value?: T ): T | null {\n\t\tif ( value ) {\n\t\t\tif ( ! this.current ) {\n\t\t\t\tthis.first = createLink( { value: this.transform( value ) } );\n\t\t\t\tthis.current = this.first;\n\t\t\t\treturn this.current.value;\n\t\t\t}\n\t\t\tconst nextLink = createLink( {\n\t\t\t\tvalue: this.transform( value ),\n\t\t\t\tprev: this.current,\n\t\t\t} );\n\t\t\tthis.current.next = nextLink;\n\t\t\tthis.current = nextLink;\n\t\t\treturn this.current.value;\n\t\t}\n\n\t\t// No value skip to next without setting any\n\t\tif ( ! this.current || ! this.current.next ) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.current = this.current.next;\n\t\treturn this.current.value;\n\t}\n}\n","import { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { getMixpanel } from '@elementor/mixpanel';\nimport { __getState as getState } from '@elementor/store';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { GlobalClassTrackingError } from '../errors';\nimport { type FilterKey } from '../hooks/use-filtered-css-class-usage';\nimport { selectClass } from '../store';\n\ntype EventMap = {\n\tclassCreated: {\n\t\tsource?: 'created' | 'converted';\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle?: string;\n\t};\n\tclassDeleted: {\n\t\tclassId: StyleDefinitionID;\n\t\trunAction?: () => void;\n\t};\n\tclassRenamed: {\n\t\tclassId: StyleDefinitionID;\n\t\toldValue: string;\n\t\tnewValue: string;\n\t\tsource: 'class-manager' | 'style-tab';\n\t};\n\tclassApplied: {\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle: string;\n\t\ttotalInstancesAfterApply: number;\n\t};\n\tclassRemoved: {\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle: string;\n\t};\n\tclassStyled: {\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle: string;\n\t\tclassType: 'global' | 'local';\n\t};\n\tclassManagerOpened: {\n\t\tsource: 'style-panel';\n\t};\n\tclassManagerSearched: Record< string, never >;\n\tclassManagerFiltersOpened: Record< string, never >;\n\tclassManagerFilterUsed: {\n\t\taction: 'apply' | 'remove';\n\t\ttype: FilterKey;\n\t\ttrigger: 'menu' | 'header';\n\t};\n\tclassManagerFilterCleared: {\n\t\ttrigger: 'menu' | 'header';\n\t};\n\tclassManagerReorder: {\n\t\tclassId: StyleDefinitionID;\n\t\tclassTitle: string;\n\t};\n\tclassPublishConflict: {\n\t\tnumOfConflicts: number;\n\t};\n\tclassUsageHovered: {\n\t\tclassId: string;\n\t\tusage: number;\n\t};\n\tclassUsageClicked: {\n\t\tclassId: StyleDefinitionID;\n\t};\n\tclassUsageLocate: {\n\t\tclassId: StyleDefinitionID;\n\t};\n\tclassStateClicked: {\n\t\tclassId: StyleDefinitionID | null;\n\t\ttype: string;\n\t\tsource: 'global' | 'local';\n\t};\n};\n\nexport type TrackingEvent = {\n\t[ K in keyof EventMap ]: { event: K } & EventMap[ K ];\n}[ keyof EventMap ];\n\ntype TrackingEventWithComputed = TrackingEvent & {\n\tclassTitle?: string;\n\ttotalInstancesAfterApply?: number;\n\ttotalInstances?: number;\n};\n\nexport const trackGlobalClasses = async ( payload: TrackingEvent ) => {\n\tconst { runAction } = payload as TrackingEventWithComputed & { runAction?: () => void };\n\tconst data = await getSanitizedData( payload );\n\tif ( data ) {\n\t\ttrack( data );\n\t\tif ( data.event === 'classCreated' && 'classId' in data ) {\n\t\t\tfireClassApplied( data.classId as StyleDefinitionID );\n\t\t}\n\t}\n\trunAction?.();\n};\n\nconst fireClassApplied = async ( classId: StyleDefinitionID ) => {\n\tconst appliedInfo = await getAppliedInfo( classId );\n\ttrack( {\n\t\tevent: 'classApplied',\n\t\tclassId,\n\t\t...appliedInfo,\n\t\ttotalInstancesAfterApply: 1,\n\t} );\n};\n\nconst getSanitizedData = async ( payload: TrackingEvent ): Promise< Record< string, unknown > | undefined > => {\n\tswitch ( payload.event ) {\n\t\tcase 'classApplied':\n\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\tconst appliedInfo = await getAppliedInfo( payload.classId );\n\t\t\t\treturn { ...payload, ...appliedInfo };\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'classRemoved':\n\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\tconst deleteInfo = getRemovedInfo( payload.classId );\n\t\t\t\treturn { ...payload, ...deleteInfo };\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'classDeleted':\n\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\tconst deleteInfo = await trackDeleteClass( payload.classId );\n\t\t\t\treturn { ...payload, ...deleteInfo };\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'classCreated':\n\t\t\tif ( 'source' in payload && payload.source !== 'created' ) {\n\t\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\t\treturn { ...payload, classTitle: getCssClass( payload.classId ).label };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn payload;\n\t\tcase 'classStateClicked':\n\t\t\tif ( 'classId' in payload && payload.classId ) {\n\t\t\t\treturn { ...payload, classTitle: getCssClass( payload.classId ).label };\n\t\t\t}\n\t\t\tbreak;\n\t\tdefault:\n\t\t\treturn payload;\n\t}\n};\n\nconst track = ( data: Record< string, unknown > ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.global_classes?.[ data.event as keyof EventMap ] ) {\n\t\t// eslint-disable-next-line no-console\n\t\tconsole.error( 'Global class tracking event not found', { event: data.event } );\n\t\treturn;\n\t}\n\n\tconst name = config.names.global_classes[ data.event as keyof EventMap ];\n\tconst { event, ...eventData } = data;\n\n\ttry {\n\t\tdispatchEvent?.( name, {\n\t\t\tevent,\n\t\t\t...eventData,\n\t\t} );\n\t} catch ( error ) {\n\t\tthrow new GlobalClassTrackingError( { cause: error } );\n\t}\n};\n\nconst extractCssClassData = ( classId: StyleDefinitionID ) => {\n\tconst cssClass: StyleDefinition = getCssClass( classId );\n\tconst classTitle = cssClass.label;\n\n\treturn { classTitle };\n};\n\nconst getCssClass = ( classId: StyleDefinitionID ) => {\n\tconst cssClass = selectClass( getState(), classId );\n\tif ( ! cssClass ) {\n\t\tthrow new Error( `CSS class with ID ${ classId } not found` );\n\t}\n\treturn cssClass;\n};\n\nconst trackDeleteClass = async ( classId: StyleDefinitionID ) => {\n\tconst totalInstances = await getTotalInstancesByCssClassID( classId );\n\tconst classTitle = getCssClass( classId ).label;\n\treturn { totalInstances, classTitle };\n};\n\nconst getTotalInstancesByCssClassID = async ( classId: StyleDefinitionID ) => {\n\tconst cssClassUsage = await fetchCssClassUsage();\n\treturn cssClassUsage[ classId ]?.total ?? 1;\n};\n\nconst getAppliedInfo = async ( classId: StyleDefinitionID ) => {\n\tconst { classTitle } = extractCssClassData( classId );\n\tconst totalInstancesAfterApply = ( await getTotalInstancesByCssClassID( classId ) ) + 1;\n\treturn { classTitle, totalInstancesAfterApply };\n};\n\nconst getRemovedInfo = ( classId: StyleDefinitionID ) => {\n\tconst { classTitle } = extractCssClassData( classId );\n\treturn {\n\t\tclassTitle,\n\t};\n};\n","import { type StyleDefinition, type StyleDefinitionID, type StyleDefinitionsMap } from '@elementor/editor-styles';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type CssClassUsage } from './components/css-class-usage/types';\nimport { type GlobalClasses } from './store';\n\nconst RESOURCE_URL = '/global-classes';\nconst BASE_URL = 'elementor/v1';\nconst RESOURCE_USAGE_URL = `${ RESOURCE_URL }/usage`;\n\ntype GlobalClassesUsageResponse = HttpResponse< CssClassUsage >;\n\nexport type GlobalClassesGetAllResponse = HttpResponse<\n\tStyleDefinitionsMap,\n\t{\n\t\torder: StyleDefinition[ 'id' ][];\n\t}\n>;\n\ntype UpdatePayload = GlobalClasses & {\n\tchanges: {\n\t\tadded: StyleDefinitionID[];\n\t\tdeleted: StyleDefinitionID[];\n\t\tmodified: StyleDefinitionID[];\n\t};\n};\n\nexport type ApiContext = 'preview' | 'frontend';\n\nexport const apiClient = {\n\tusage: () => httpService().get< GlobalClassesUsageResponse >( `${ BASE_URL }${ RESOURCE_USAGE_URL }` ),\n\n\tall: ( context: ApiContext = 'preview' ) =>\n\t\thttpService().get< GlobalClassesGetAllResponse >( `${ BASE_URL }${ RESOURCE_URL }`, {\n\t\t\tparams: { context },\n\t\t} ),\n\n\tpublish: ( payload: UpdatePayload ) =>\n\t\thttpService().put( 'elementor/v1' + RESOURCE_URL, payload, {\n\t\t\tparams: {\n\t\t\t\tcontext: 'frontend' satisfies ApiContext,\n\t\t\t},\n\t\t} ),\n\n\tsaveDraft: ( payload: UpdatePayload ) =>\n\t\thttpService().put( 'elementor/v1' + RESOURCE_URL, payload, {\n\t\t\tparams: {\n\t\t\t\tcontext: 'preview' satisfies ApiContext,\n\t\t\t},\n\t\t} ),\n};\n\nexport const API_ERROR_CODES = {\n\tDUPLICATED_LABEL: 'DUPLICATED_LABEL',\n};\n","import type { CssClassUsage, EnhancedCssClassUsage } from './types';\n\nexport const transformData = ( data: CssClassUsage ): EnhancedCssClassUsage =>\n\tObject.entries( data ).reduce< EnhancedCssClassUsage >( ( acc, [ key, value ] ) => {\n\t\tacc[ key ] = {\n\t\t\tcontent: value || [],\n\t\t\ttotal: value.reduce( ( total, val ) => total + ( val?.total || 0 ), 0 ),\n\t\t};\n\t\treturn acc;\n\t}, {} );\n","import { apiClient } from '../src/api';\nimport type { EnhancedCssClassUsage } from '../src/components/css-class-usage/types';\nimport { transformData } from '../src/components/css-class-usage/utils';\n\nexport const fetchCssClassUsage = async (): Promise< EnhancedCssClassUsage > => {\n\tconst response = await apiClient.usage();\n\treturn transformData( response?.data?.data || {} );\n};\n","import { injectIntoLogic } from '@elementor/editor';\nimport {\n\tinjectIntoClassSelectorActions,\n\tinjectIntoCssClassConvert,\n\tregisterStyleProviderToColors,\n} from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __registerSlice as registerSlice } from '@elementor/store';\n\nimport { ClassManagerButton } from './components/class-manager/class-manager-button';\nimport { panel } from './components/class-manager/class-manager-panel';\nimport { ConvertLocalClassToGlobalClass } from './components/convert-local-class-to-global-class';\nimport { PopulateStore } from './components/populate-store';\nimport { GLOBAL_CLASSES_PROVIDER_KEY, globalClassesStylesProvider } from './global-classes-styles-provider';\nimport { PrefetchCssClassUsage } from './hooks/use-prefetch-css-class-usage';\nimport { initMcpIntegration } from './mcp-integration';\nimport { slice } from './store';\nimport { SyncWithDocumentSave } from './sync-with-document';\n\nexport function init() {\n\tregisterSlice( slice );\n\tregisterPanel( panel );\n\n\tstylesRepository.register( globalClassesStylesProvider );\n\n\tinjectIntoLogic( {\n\t\tid: 'global-classes-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'global-classes-sync-with-document',\n\t\tcomponent: SyncWithDocumentSave,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'global-classes-prefetch-css-class-usage',\n\t\tcomponent: PrefetchCssClassUsage,\n\t} );\n\n\tinjectIntoCssClassConvert( {\n\t\tid: 'global-classes-convert-from-local-class',\n\t\tcomponent: ConvertLocalClassToGlobalClass,\n\t} );\n\n\tinjectIntoClassSelectorActions( {\n\t\tid: 'global-classes-manager-button',\n\t\tcomponent: ClassManagerButton,\n\t} );\n\n\tregisterStyleProviderToColors( GLOBAL_CLASSES_PROVIDER_KEY, {\n\t\tname: 'global',\n\t\tgetThemeColor: ( theme ) => theme.palette.global.dark,\n\t} );\n\n\tinitMcpIntegration();\n}\n","import * as React from 'react';\nimport {\n\t__useActiveDocument as useActiveDocument,\n\t__useActiveDocumentActions as useActiveDocumentActions,\n} from '@elementor/editor-documents';\nimport { useUserStylesCapability } from '@elementor/editor-styles-repository';\nimport { SaveChangesDialog, useDialog } from '@elementor/editor-ui';\nimport { IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { globalClassesStylesProvider } from '../../global-classes-styles-provider';\nimport { usePrefetchCssClassUsage } from '../../hooks/use-prefetch-css-class-usage';\nimport { trackGlobalClasses } from '../../utils/tracking';\nimport { usePanelActions } from './class-manager-panel';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\n\nconst trackGlobalClassesButton = () => {\n\ttrackGlobalClasses( {\n\t\tevent: 'classManagerOpened',\n\t\tsource: 'style-panel',\n\t} );\n};\n\nexport const ClassManagerButton = () => {\n\tconst document = useActiveDocument();\n\tconst { open: openPanel } = usePanelActions();\n\tconst { save: saveDocument } = useActiveDocumentActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\tconst { prefetchClassesUsage } = usePrefetchCssClassUsage();\n\n\tconst { userCan } = useUserStylesCapability();\n\n\tconst isUserAllowedToUpdateClass = userCan( globalClassesStylesProvider.getKey() ).update;\n\n\tif ( ! isUserAllowedToUpdateClass ) {\n\t\treturn null;\n\t}\n\n\tconst handleOpenPanel = () => {\n\t\tif ( document?.isDirty ) {\n\t\t\topenSaveChangesDialog();\n\t\t\treturn;\n\t\t}\n\n\t\topenPanel();\n\t\ttrackGlobalClassesButton();\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classManagerOpened',\n\t\t\tsource: 'style-panel',\n\t\t} );\n\t\tprefetchClassesUsage();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip title={ __( 'Class Manager', 'elementor' ) } placement=\"top\">\n\t\t\t\t<IconButton size=\"tiny\" onClick={ handleOpenPanel } sx={ { marginInlineEnd: -0.75 } }>\n\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<SaveChangesDialog.Title>{ __( 'You have unsaved changes', 'elementor' ) }</SaveChangesDialog.Title>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText sx={ { mb: 2 } }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\"To open the Class Manager, save your page first. You can't continue without saving.\",\n\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tcancel: {\n\t\t\t\t\t\t\t\tlabel: __( 'Stay here', 'elementor' ),\n\t\t\t\t\t\t\t\taction: closeSaveChangesDialog,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tawait saveDocument();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\topenPanel();\n\t\t\t\t\t\t\t\t\ttrackGlobalClassesButton();\n\t\t\t\t\t\t\t\t\tprefetchClassesUsage();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</>\n\t);\n};\n","import { useQueryClient } from '@elementor/query';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { QUERY_KEY } from '../components/css-class-usage/types';\n\nexport function usePrefetchCssClassUsage() {\n\tconst queryClient = useQueryClient();\n\n\tconst prefetchClassesUsage = () =>\n\t\tqueryClient.prefetchQuery( {\n\t\t\tqueryKey: [ QUERY_KEY ],\n\t\t\tqueryFn: fetchCssClassUsage,\n\t\t} );\n\n\treturn { prefetchClassesUsage };\n}\n\nexport const PrefetchCssClassUsage = () => {\n\tconst { prefetchClassesUsage } = usePrefetchCssClassUsage();\n\tprefetchClassesUsage();\n\treturn null;\n};\n","export const QUERY_KEY = 'css-classes-usage';\n\nexport type CssClassID = string;\n\nexport type ContentType = 'header' | 'footer' | 'wp-page' | 'wp-post' | 'popup';\n\nexport type CssClassUsageContent = {\n\telements: string[];\n\tpageId: string;\n\ttotal: number;\n\ttitle: string;\n\ttype: ContentType;\n};\n\nexport type CssClassUsage = Record< CssClassID, Array< CssClassUsageContent > >;\n\nexport type EnhancedCssClassUsageContent = { content: Array< CssClassUsageContent >; total: number };\n\nexport type EnhancedCssClassUsage = Record< CssClassID, EnhancedCssClassUsageContent >;\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport {\n\t__createPanel as createPanel,\n\tPanel,\n\tPanelBody,\n\tPanelFooter,\n\tPanelHeader,\n\tPanelHeaderTitle,\n} from '@elementor/editor-panels';\nimport { SaveChangesDialog, ThemeProvider, useDialog } from '@elementor/editor-ui';\nimport { changeEditMode } from '@elementor/editor-v1-adapters';\nimport { XIcon } from '@elementor/icons';\nimport { useMutation } from '@elementor/query';\nimport { __dispatch as dispatch } from '@elementor/store';\nimport {\n\tAlert,\n\tBox,\n\tButton,\n\tChip,\n\tDialogHeader,\n\tDivider,\n\tErrorBoundary,\n\tIconButton,\n\ttype IconButtonProps,\n\tStack,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useDirtyState } from '../../hooks/use-dirty-state';\nimport { useFilters } from '../../hooks/use-filters';\nimport { saveGlobalClasses } from '../../save-global-classes';\nimport { slice } from '../../store';\nimport { ActiveFilters } from '../search-and-filter/components/filter/active-filters';\nimport { CssClassFilter } from '../search-and-filter/components/filter/css-class-filter';\nimport { ClassManagerSearch } from '../search-and-filter/components/search/class-manager-search';\nimport { SearchAndFilterProvider } from '../search-and-filter/context';\nimport { ClassManagerIntroduction } from './class-manager-introduction';\nimport { hasDeletedItems, onDelete } from './delete-class';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { GlobalClassesList } from './global-classes-list';\nimport { blockPanelInteractions, unblockPanelInteractions } from './panel-interactions';\n\nconst id = 'global-classes-manager';\n\n// We need to disable the app-bar buttons, and the elements overlays when opening the classes manager panel.\n// The buttons and overlays are enabled only in edit mode, so we're creating a custom new edit mode that\n// will force them to be disabled. We can't use the `preview` edit mode in this case since it'll force\n// the panel to be closed.\nexport const { panel, usePanelActions } = createPanel( {\n\tid,\n\tcomponent: ClassManagerPanel,\n\tallowedEditModes: [ 'edit', id ],\n\tonOpen: () => {\n\t\tchangeEditMode( id );\n\n\t\tblockPanelInteractions();\n\t},\n\tonClose: () => {\n\t\tchangeEditMode( 'edit' );\n\n\t\tunblockPanelInteractions();\n\t},\n\tisOpenPreviousElement: true,\n} );\n\nexport function ClassManagerPanel() {\n\tconst isDirty = useDirtyState();\n\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst { mutateAsync: publish, isPending: isPublishing } = usePublish();\n\n\tconst resetAndClosePanel = () => {\n\t\tdispatch( slice.actions.resetToInitialState( { context: 'frontend' } ) );\n\t\tcloseSaveChangesDialog();\n\t};\n\n\tusePreventUnload();\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<ErrorBoundary fallback={ <ErrorBoundaryFallback /> }>\n\t\t\t\t<Panel>\n\t\t\t\t\t<SearchAndFilterProvider>\n\t\t\t\t\t\t<PanelHeader>\n\t\t\t\t\t\t\t<Stack p={ 1 } pl={ 2 } width=\"100%\" direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t\t\t<Stack width=\"100%\" direction=\"row\" gap={ 1 }>\n\t\t\t\t\t\t\t\t\t<PanelHeaderTitle sx={ { display: 'flex', alignItems: 'center', gap: 0.5 } }>\n\t\t\t\t\t\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Class Manager', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t\t\t<TotalCssClassCounter />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\t\tdisabled={ isPublishing }\n\t\t\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\t\t\tif ( isDirty ) {\n\t\t\t\t\t\t\t\t\t\t\topenSaveChangesDialog();\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</PanelHeader>\n\t\t\t\t\t\t<PanelBody\n\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Box px={ 2 } pb={ 1 }>\n\t\t\t\t\t\t\t\t<Stack direction=\"row\" justifyContent=\"spaceBetween\" gap={ 0.5 } sx={ { pb: 0.5 } }>\n\t\t\t\t\t\t\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t\t\t\t\t\t\t<ClassManagerSearch />\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t<CssClassFilter />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<ActiveFilters />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Divider />\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tpx={ 2 }\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GlobalClassesList disabled={ isPublishing } />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</PanelBody>\n\n\t\t\t\t\t\t<PanelFooter>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\t\tonClick={ publish }\n\t\t\t\t\t\t\t\tdisabled={ ! isDirty }\n\t\t\t\t\t\t\t\tloading={ isPublishing }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</PanelFooter>\n\t\t\t\t\t</SearchAndFilterProvider>\n\t\t\t\t</Panel>\n\t\t\t</ErrorBoundary>\n\t\t\t<ClassManagerIntroduction />\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<DialogHeader onClose={ closeSaveChangesDialog } logo={ false }>\n\t\t\t\t\t\t<SaveChangesDialog.Title>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.Title>\n\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes in the Class Manager.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'To avoid losing your updates, save your changes before leaving.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tdiscard: {\n\t\t\t\t\t\t\t\tlabel: __( 'Discard', 'elementor' ),\n\t\t\t\t\t\t\t\taction: () => {\n\t\t\t\t\t\t\t\t\tresetAndClosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tawait publish();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</ThemeProvider>\n\t);\n}\n\nconst CloseButton = ( { onClose, ...props }: IconButtonProps & { onClose: () => void } ) => (\n\t<IconButton size=\"small\" color=\"secondary\" onClick={ onClose } aria-label=\"Close\" { ...props }>\n\t\t<XIcon fontSize=\"small\" />\n\t</IconButton>\n);\n\nconst ErrorBoundaryFallback = () => (\n\t<Box role=\"alert\" sx={ { minHeight: '100%', p: 2 } }>\n\t\t<Alert severity=\"error\" sx={ { mb: 2, maxWidth: 400, textAlign: 'center' } }>\n\t\t\t<strong>{ __( 'Something went wrong', 'elementor' ) }</strong>\n\t\t</Alert>\n\t</Box>\n);\n\nconst usePreventUnload = () => {\n\tconst isDirty = useDirtyState();\n\n\tuseEffect( () => {\n\t\tconst handleBeforeUnload = ( event: BeforeUnloadEvent ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener( 'beforeunload', handleBeforeUnload );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'beforeunload', handleBeforeUnload );\n\t\t};\n\t}, [ isDirty ] );\n};\n\nconst usePublish = () => {\n\treturn useMutation( {\n\t\tmutationFn: () => saveGlobalClasses( { context: 'frontend' } ),\n\t\tonSuccess: async () => {\n\t\t\tsetDocumentModifiedStatus( false );\n\n\t\t\tif ( hasDeletedItems() ) {\n\t\t\t\tawait onDelete();\n\t\t\t}\n\t\t},\n\t} );\n};\n\nconst TotalCssClassCounter = () => {\n\tconst filters = useFilters();\n\tconst cssClasses = useClassesOrder();\n\n\treturn (\n\t\t<Chip\n\t\t\tsize={ 'small' }\n\t\t\tlabel={ filters ? `${ filters.length } / ${ cssClasses?.length }` : cssClasses?.length }\n\t\t/>\n\t);\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectOrder } from '../store';\n\nexport const useClassesOrder = () => {\n\treturn useSelector( selectOrder );\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectIsDirty } from '../store';\n\nexport const useDirtyState = () => {\n\treturn useSelector( selectIsDirty );\n};\n","import { useMemo } from 'react';\n\nimport { useSearchAndFilters } from '../components/search-and-filter/context';\nimport { type FilterKey, useFilteredCssClassUsage } from './use-filtered-css-class-usage';\n\nexport const useFilters = () => {\n\tconst {\n\t\tfilters: { filters },\n\t} = useSearchAndFilters();\n\tconst allFilters = useFilteredCssClassUsage();\n\n\treturn useMemo( () => {\n\t\tconst activeEntries = Object.entries( filters ).filter( ( [ , isActive ] ) => isActive ) as [\n\t\t\tFilterKey,\n\t\t\ttrue,\n\t\t][];\n\n\t\tif ( activeEntries.length === 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn activeEntries.reduce< string[] >( ( acc, [ key ], index ) => {\n\t\t\tconst current = allFilters[ key ] || [];\n\t\t\tif ( index === 0 ) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn acc.filter( ( val ) => current.includes( val ) );\n\t\t}, [] );\n\t}, [ filters, allFilters ] );\n};\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { useDebounceState } from '@elementor/utils';\n\nexport type CheckedFilters = {\n\tempty: boolean;\n\tonThisPage: boolean;\n\tunused: boolean;\n};\n\ntype SearchContextType = {\n\tdebouncedValue: string;\n\tinputValue: string;\n\thandleChange: ( value: string ) => void;\n\tonClearSearch: () => void;\n};\ntype FilterAndSortContextType = {\n\tfilters: CheckedFilters;\n\tsetFilters: React.Dispatch< React.SetStateAction< CheckedFilters > >;\n\tonClearFilter: ( type?: 'menu' | 'header' ) => void;\n};\n\nexport type SearchAndFilterContextType = {\n\tsearch: SearchContextType;\n\tfilters: FilterAndSortContextType;\n};\n\nconst SearchAndFilterContext = createContext< SearchAndFilterContextType | undefined >( undefined );\n\nconst INIT_CHECKED_FILTERS: CheckedFilters = {\n\tempty: false,\n\tonThisPage: false,\n\tunused: false,\n};\n\nexport const SearchAndFilterProvider = ( { children }: React.PropsWithChildren ) => {\n\tconst [ filters, setFilters ] = React.useState< CheckedFilters >( INIT_CHECKED_FILTERS );\n\n\tconst getInitialSearchValue = () => {\n\t\tconst storedValue = localStorage.getItem( 'elementor-global-classes-search' );\n\t\tif ( storedValue ) {\n\t\t\tlocalStorage.removeItem( 'elementor-global-classes-search' );\n\t\t\treturn storedValue;\n\t\t}\n\t\treturn '';\n\t};\n\n\tconst { debouncedValue, inputValue, handleChange } = useDebounceState( {\n\t\tdelay: 300,\n\t\tinitialValue: getInitialSearchValue(),\n\t} );\n\n\tconst onClearSearch = () => {\n\t\thandleChange( '' );\n\t};\n\n\tconst onClearFilter = () => {\n\t\tsetFilters( INIT_CHECKED_FILTERS );\n\t};\n\n\treturn (\n\t\t<SearchAndFilterContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tsearch: {\n\t\t\t\t\tdebouncedValue,\n\t\t\t\t\tinputValue,\n\t\t\t\t\thandleChange,\n\t\t\t\t\tonClearSearch,\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\tfilters,\n\t\t\t\t\tsetFilters,\n\t\t\t\t\tonClearFilter,\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</SearchAndFilterContext.Provider>\n\t);\n};\n\nexport const useSearchAndFilters = () => {\n\tconst context = useContext( SearchAndFilterContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useSearchContext must be used within a SearchContextProvider' );\n\t}\n\treturn context;\n};\n","import { useMemo } from 'react';\nimport { __useActiveDocument as useActiveDocument } from '@elementor/editor-documents';\n\nimport { type CssClassUsageContent, type EnhancedCssClassUsage } from '../components/css-class-usage/types';\nimport { useCssClassUsage } from './use-css-class-usage';\nimport { useAllCssClassesIDs, useEmptyCssClass } from './use-empty-css-class';\n\nexport type FilterKey = 'empty' | 'onThisPage' | 'unused';\n\ntype FilteredCssClassUsage = Record< FilterKey, string[] >;\n\nconst findCssClassKeysByPageID = ( data: EnhancedCssClassUsage, pageId: number ) => {\n\tconst result: string[] = [];\n\tfor ( const key in data ) {\n\t\tdata[ key ].content.forEach( ( content: CssClassUsageContent ) => {\n\t\t\tif ( +content.pageId === pageId ) {\n\t\t\t\tresult.push( key );\n\t\t\t}\n\t\t} );\n\t}\n\treturn result;\n};\n\nconst getUnusedClasses = ( usedCssClass: string[], potentialUnused: string[] ): string[] => {\n\tconst set = new Set( usedCssClass );\n\treturn potentialUnused.filter( ( cssClass: string ) => ! set.has( cssClass ) );\n};\n\nconst EMPTY_FILTERED_CSS_CLASS_RESPONSE: FilteredCssClassUsage = {\n\tempty: [],\n\tonThisPage: [],\n\tunused: [],\n};\n\nexport const useFilteredCssClassUsage = (): FilteredCssClassUsage => {\n\tconst document = useActiveDocument();\n\tconst emptyCssClasses = useEmptyCssClass();\n\tconst { data, isLoading } = useCssClassUsage();\n\tconst listOfCssClasses = useAllCssClassesIDs();\n\n\tconst emptyCssClassesIDs = useMemo( () => emptyCssClasses.map( ( { id } ) => id ), [ emptyCssClasses ] );\n\n\tconst onThisPage = useMemo( () => {\n\t\tif ( ! data || ! document ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn findCssClassKeysByPageID( data, document.id );\n\t}, [ data, document ] );\n\n\tconst unused = useMemo( () => {\n\t\tif ( ! data ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn getUnusedClasses( Object.keys( data ), listOfCssClasses );\n\t}, [ data, listOfCssClasses ] );\n\n\tif ( isLoading || ! data || ! document ) {\n\t\treturn EMPTY_FILTERED_CSS_CLASS_RESPONSE;\n\t}\n\n\treturn {\n\t\tonThisPage,\n\t\tunused,\n\t\tempty: emptyCssClassesIDs,\n\t};\n};\n","import { useQuery, type UseQueryResult } from '@elementor/query';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { type EnhancedCssClassUsage, QUERY_KEY } from '../components/css-class-usage/types';\n\nexport const useCssClassUsage = (): UseQueryResult< EnhancedCssClassUsage > => {\n\treturn useQuery( {\n\t\tqueryKey: [ QUERY_KEY ],\n\t\tqueryFn: fetchCssClassUsage,\n\t\trefetchOnMount: false,\n\t\trefetchOnWindowFocus: true,\n\t} );\n};\n","import { __useSelector } from '@elementor/store';\n\nimport { selectEmptyCssClass, selectGlobalClasses } from '../store';\n\nexport const useEmptyCssClass = () => {\n\treturn __useSelector( selectEmptyCssClass );\n};\n\nexport const useAllCssClassesIDs = () => {\n\tconst cssClasses = __useSelector( selectGlobalClasses );\n\treturn Object.keys( cssClasses );\n};\n","import * as React from 'react';\nimport { openDialog } from '@elementor/editor-ui';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { hash } from '@elementor/utils';\n\nimport { API_ERROR_CODES, apiClient, type ApiContext } from './api';\nimport { DuplicateLabelDialog } from './components/class-manager/duplicate-label-dialog';\nimport { type GlobalClasses, selectData, selectFrontendInitialData, selectPreviewInitialData, slice } from './store';\nimport { trackGlobalClasses } from './utils/tracking';\n\ntype Options = {\n\tcontext: ApiContext;\n\tonApprove?: () => void;\n};\n\nexport async function saveGlobalClasses( { context, onApprove }: Options ) {\n\tconst state = selectData( getState() );\n\tconst apiAction = context === 'preview' ? apiClient.saveDraft : apiClient.publish;\n\tconst currentContext = context === 'preview' ? selectPreviewInitialData : selectFrontendInitialData;\n\tconst response = await apiAction( {\n\t\titems: state.items,\n\t\torder: state.order,\n\t\tchanges: calculateChanges( state, currentContext( getState() ) ),\n\t} );\n\n\tdispatch( slice.actions.reset( { context } ) );\n\tif ( response?.data?.data?.code === API_ERROR_CODES.DUPLICATED_LABEL ) {\n\t\tdispatch( slice.actions.updateMultiple( response.data.data.modifiedLabels ) );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classPublishConflict',\n\t\t\tnumOfConflicts: Object.keys( response.data.data.modifiedLabels ).length,\n\t\t} );\n\t\topenDialog( {\n\t\t\tcomponent: (\n\t\t\t\t<DuplicateLabelDialog\n\t\t\t\t\tmodifiedLabels={ response.data.data.modifiedLabels || [] }\n\t\t\t\t\tonApprove={ onApprove }\n\t\t\t\t/>\n\t\t\t),\n\t\t} );\n\t}\n}\n\nfunction calculateChanges( state: GlobalClasses, initialData: GlobalClasses ) {\n\tconst stateIds = Object.keys( state.items );\n\tconst initialDataIds = Object.keys( initialData.items );\n\n\treturn {\n\t\tadded: stateIds.filter( ( id ) => ! initialDataIds.includes( id ) ),\n\t\tdeleted: initialDataIds.filter( ( id ) => ! stateIds.includes( id ) ),\n\t\tmodified: stateIds.filter( ( id ) => {\n\t\t\treturn id in initialData.items && hash( state.items[ id ] ) !== hash( initialData.items[ id ] );\n\t\t} ),\n\t};\n}\n","import * as React from 'react';\nimport { closeDialog, EllipsisWithTooltip } from '@elementor/editor-ui';\nimport { InfoCircleFilledIcon } from '@elementor/icons';\nimport {\n\tAlert,\n\tBox,\n\tButton,\n\tDialogActions,\n\tDialogContent,\n\tDialogHeader,\n\tDivider,\n\tIcon,\n\tStack,\n\tTypography,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type ModifiedLabels } from '../../store';\n\nconst DUP_PREFIX = 'DUP_';\n\nexport const DuplicateLabelDialog = ( {\n\tmodifiedLabels,\n\tonApprove,\n}: {\n\tmodifiedLabels: ModifiedLabels;\n\tonApprove?: () => void;\n} ) => {\n\tconst handleButtonClick = () => {\n\t\tlocalStorage.setItem( 'elementor-global-classes-search', DUP_PREFIX );\n\t\tonApprove?.();\n\t\tcloseDialog();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<DialogHeader logo={ false }>\n\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t\t<Icon color=\"secondary\">\n\t\t\t\t\t\t<InfoCircleFilledIcon fontSize=\"medium\" />\n\t\t\t\t\t</Icon>\n\t\t\t\t\t<Typography variant=\"subtitle1\">\n\t\t\t\t\t\t{ __( \"We've published your page and updated class names.\", 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t</DialogHeader>\n\t\t\t<DialogContent>\n\t\t\t\t<Stack spacing={ 2 } direction=\"column\">\n\t\t\t\t\t<Typography variant=\"body2\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'Some new classes used the same names as existing ones. To prevent conflicts, we added the prefix',\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<strong> { DUP_PREFIX }</strong>\n\t\t\t\t\t</Typography>\n\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t\tflexShrink: 1,\n\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Before', 'elementor' ) }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tminWidth: '200px',\n\t\t\t\t\t\t\t\t\tfontWeight: 'bold',\n\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\tflexGrow: 0,\n\t\t\t\t\t\t\t\t\twidth: '200px',\n\t\t\t\t\t\t\t\t\tmaxWidth: '200px',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'After', 'elementor' ) }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Divider sx={ { mt: 0.5, mb: 0.5 } } />\n\t\t\t\t\t\t<Stack direction=\"column\" gap={ 0.5 } sx={ { pb: 2 } }>\n\t\t\t\t\t\t\t{ Object.values( modifiedLabels ).map( ( { original, modified }, index ) => (\n\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\t\tgap: 2,\n\t\t\t\t\t\t\t\t\t\talignItems: 'flex-start',\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t\t\t\tflexShrink: 1,\n\t\t\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<EllipsisWithTooltip title={ original }>\n\t\t\t\t\t\t\t\t\t\t\t<Typography variant=\"body2\" sx={ { color: 'text.secondary' } }>\n\t\t\t\t\t\t\t\t\t\t\t\t{ original }\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t</EllipsisWithTooltip>\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\tminWidth: '200px',\n\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\tflexGrow: 0,\n\t\t\t\t\t\t\t\t\t\t\twidth: '200px',\n\t\t\t\t\t\t\t\t\t\t\tmaxWidth: '200px',\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<EllipsisWithTooltip title={ modified }>\n\t\t\t\t\t\t\t\t\t\t\t<Typography variant=\"body2\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t\t\t\t\t\t\t{ modified }\n\t\t\t\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t\t\t</EllipsisWithTooltip>\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Alert severity=\"info\" size=\"small\" color=\"secondary\">\n\t\t\t\t\t\t\t\t<strong>{ __( 'Your designs and classes are safe.', 'elementor' ) }</strong>\n\t\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\t'Only the prefixes were added. Find them in Class Manager by searching',\n\t\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t<strong>{ DUP_PREFIX }</strong>\n\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Box>\n\t\t\t\t</Stack>\n\t\t\t</DialogContent>\n\t\t\t<DialogActions>\n\t\t\t\t<Button color=\"secondary\" variant=\"text\" onClick={ handleButtonClick }>\n\t\t\t\t\t{ __( 'Go to Class Manager', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button color=\"secondary\" variant=\"contained\" onClick={ closeDialog }>\n\t\t\t\t\t{ __( 'Done', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</DialogActions>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { Chip, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { FilterKey } from '../../../../hooks/use-filtered-css-class-usage';\nimport { trackGlobalClasses } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\nimport { ClearIconButton } from './clear-icon-button';\nimport { filterConfig } from './filter-list';\n\nexport const ActiveFilters = () => {\n\tconst {\n\t\tfilters: { filters, setFilters },\n\t} = useSearchAndFilters();\n\n\tconst handleRemove = ( key: FilterKey ) => {\n\t\tsetFilters( ( prev ) => ( { ...prev, [ key ]: false } ) );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classManagerFilterUsed',\n\t\t\taction: 'remove',\n\t\t\ttype: key,\n\t\t\ttrigger: 'header',\n\t\t} );\n\t};\n\n\tconst activeKeys = Object.keys( filters ).filter( ( key ): key is FilterKey => filters[ key as FilterKey ] );\n\n\tconst showClearIcon = activeKeys.length > 0;\n\n\treturn (\n\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n\t\t\t<Stack direction=\"row\" gap={ 0.5 } alignItems=\"center\" flexWrap=\"wrap\">\n\t\t\t\t{ activeKeys.map( ( key ) => (\n\t\t\t\t\t<Chip\n\t\t\t\t\t\tkey={ key }\n\t\t\t\t\t\tlabel={ filterConfig[ key ] }\n\t\t\t\t\t\tonDelete={ () => handleRemove( key ) }\n\t\t\t\t\t\tsx={ chipSx }\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</Stack>\n\t\t\t{ showClearIcon && (\n\t\t\t\t<ClearIconButton\n\t\t\t\t\ttrigger=\"header\"\n\t\t\t\t\ttooltipText={ __( 'Clear Filters', 'elementor' ) }\n\t\t\t\t\tsx={ { margin: '0 0 auto auto' } }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Stack>\n\t);\n};\n\nconst chipSx = {\n\t'& .MuiChip-deleteIcon': {\n\t\tdisplay: 'none',\n\t\ttransition: 'opacity 0.2s',\n\t},\n\t'&:hover .MuiChip-deleteIcon': {\n\t\tdisplay: 'block',\n\t},\n};\n","import * as React from 'react';\nimport { BrushBigIcon } from '@elementor/icons';\nimport { Box, IconButton, styled, type SxProps, type Theme, Tooltip } from '@elementor/ui';\n\nimport { trackGlobalClasses } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\n\ntype ClearIconButtonProps = { tooltipText: React.ReactNode; sx?: SxProps< Theme >; trigger: 'menu' | 'header' };\n\nexport const ClearIconButton = ( { tooltipText, sx, trigger }: ClearIconButtonProps ) => {\n\tconst {\n\t\tfilters: { onClearFilter },\n\t} = useSearchAndFilters();\n\n\tconst handleClearFilters = () => {\n\t\tonClearFilter( trigger );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classManagerFilterCleared',\n\t\t\ttrigger,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Tooltip title={ tooltipText } placement=\"top\" disableInteractive>\n\t\t\t<Box>\n\t\t\t\t<CustomIconButton aria-label={ tooltipText } size=\"tiny\" onClick={ handleClearFilters } sx={ sx }>\n\t\t\t\t\t<BrushBigIcon fontSize=\"tiny\" />\n\t\t\t\t</CustomIconButton>\n\t\t\t</Box>\n\t\t</Tooltip>\n\t);\n};\nconst CustomIconButton = styled( IconButton )( ( { theme } ) => ( {\n\t'&.Mui-disabled': {\n\t\tpointerEvents: 'auto',\n\t\t'&:hover': {\n\t\t\tcolor: theme.palette.action.disabled,\n\t\t},\n\t},\n} ) );\n","import * as React from 'react';\nimport { Checkbox, Chip, MenuItem, MenuList, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FilterKey, useFilteredCssClassUsage } from '../../../../hooks/use-filtered-css-class-usage';\nimport { trackGlobalClasses } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\n\nexport const filterConfig: Record< FilterKey, string > = {\n\tunused: __( 'Unused', 'elementor' ),\n\tempty: __( 'Empty', 'elementor' ),\n\tonThisPage: __( 'On this page', 'elementor' ),\n};\n\nexport const FilterList = () => {\n\tconst {\n\t\tfilters: { filters, setFilters },\n\t} = useSearchAndFilters();\n\tconst filteredCssClass = useFilteredCssClassUsage();\n\n\tconst handleOnClick = ( value: FilterKey ) => {\n\t\tsetFilters( ( prev ) => ( { ...prev, [ value ]: ! prev[ value ] } ) );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classManagerFilterUsed',\n\t\t\taction: filters[ value ] ? 'remove' : 'apply',\n\t\t\ttype: value,\n\t\t\ttrigger: 'menu',\n\t\t} );\n\t};\n\n\treturn (\n\t\t<MenuList>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'unused' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.unused }\n\t\t\t\t\tchecked={ filters.unused }\n\t\t\t\t\tsuffix={ <Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.unused.length } /> }\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'empty' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.empty }\n\t\t\t\t\tchecked={ filters.empty }\n\t\t\t\t\tsuffix={ <Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.empty.length } /> }\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'onThisPage' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.onThisPage }\n\t\t\t\t\tchecked={ filters.onThisPage }\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.onThisPage.length } />\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t</MenuList>\n\t);\n};\n\ntype LabeledCheckboxProps = {\n\tlabel: string;\n\tsuffix?: React.ReactNode;\n\tchecked: boolean;\n};\n\nconst LabeledCheckbox = ( { label, suffix, checked }: LabeledCheckboxProps ) => (\n\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 } flex={ 1 }>\n\t\t<Checkbox\n\t\t\tsize={ 'small' }\n\t\t\tchecked={ checked }\n\t\t\tsx={ {\n\t\t\t\tpadding: 0,\n\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t'&.Mui-checked': {\n\t\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t},\n\t\t\t} }\n\t\t/>\n\t\t<Typography variant=\"caption\" sx={ { color: 'text.secondary' } }>\n\t\t\t{ label }\n\t\t</Typography>\n\t\t{ suffix }\n\t</Stack>\n);\n","import * as React from 'react';\nimport { PopoverBody, PopoverHeader } from '@elementor/editor-ui';\nimport { FilterIcon } from '@elementor/icons';\nimport { bindPopover, bindToggle, Divider, Popover, ToggleButton, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { trackGlobalClasses, type TrackingEvent } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\nimport { ClearIconButton } from './clear-icon-button';\nimport { FilterList } from './filter-list';\n\nexport const CssClassFilter = () => {\n\tconst {\n\t\tfilters: { filters },\n\t} = useSearchAndFilters();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tReact.useEffect( () => {\n\t\tif ( popupState.isOpen ) {\n\t\t\ttrackGlobalClasses( {\n\t\t\t\tevent: 'classManagerFiltersOpened',\n\t\t\t} as TrackingEvent );\n\t\t}\n\t}, [ popupState.isOpen ] );\n\n\tconst showCleanIcon = Object.values( filters ).some( ( value ) => value );\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip title={ __( 'Filters', 'elementor' ) } placement=\"top\">\n\t\t\t\t<ToggleButton\n\t\t\t\t\tvalue=\"filter\"\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tselected={ popupState.isOpen }\n\t\t\t\t\t{ ...bindToggle( popupState ) }\n\t\t\t\t>\n\t\t\t\t\t<FilterIcon fontSize=\"tiny\" />\n\t\t\t\t</ToggleButton>\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tsx={ {\n\t\t\t\t\tmaxWidth: '344px',\n\t\t\t\t} }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: -21,\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t>\n\t\t\t\t<PopoverHeader\n\t\t\t\t\tactions={\n\t\t\t\t\t\tshowCleanIcon\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t<ClearIconButton\n\t\t\t\t\t\t\t\t\t\ttrigger=\"menu\"\n\t\t\t\t\t\t\t\t\t\tkey=\"clear-all-button\"\n\t\t\t\t\t\t\t\t\t\ttooltipText={ __( 'Clear all', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t/>,\n\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t}\n\t\t\t\t\tonClose={ popupState.close }\n\t\t\t\t\ttitle={ __( 'Filters', 'elementor' ) }\n\t\t\t\t\ticon={ <FilterIcon fontSize={ 'tiny' } /> }\n\t\t\t\t/>\n\t\t\t\t<Divider\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tborderWidth: '1px 0 0 0',\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<PopoverBody width={ 344 } height={ 125 }>\n\t\t\t\t\t<FilterList />\n\t\t\t\t</PopoverBody>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { SearchIcon } from '@elementor/icons';\nimport { Box, InputAdornment, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { trackGlobalClasses, type TrackingEvent } from '../../../../utils/tracking';\nimport { useSearchAndFilters } from '../../context';\n\nexport const ClassManagerSearch = () => {\n\tconst {\n\t\tsearch: { inputValue, handleChange },\n\t} = useSearchAndFilters();\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={ 0.5 } sx={ { width: '100%' } }>\n\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t<TextField\n\t\t\t\t\trole={ 'search' }\n\t\t\t\t\tfullWidth\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tonFocus={ () => {\n\t\t\t\t\t\ttrackGlobalClasses( {\n\t\t\t\t\t\t\tevent: 'classManagerSearched',\n\t\t\t\t\t\t} as TrackingEvent );\n\t\t\t\t\t} }\n\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t<SearchIcon fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useSuppressedMessage } from '@elementor/editor-current-user';\nimport { IntroductionModal } from '@elementor/editor-ui';\nimport { Box, Image, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst MESSAGE_KEY = 'global-class-manager';\n\nexport const ClassManagerIntroduction = () => {\n\tconst [ isMessageSuppressed, suppressMessage ] = useSuppressedMessage( MESSAGE_KEY );\n\tconst [ shouldShowIntroduction, setShouldShowIntroduction ] = useState( ! isMessageSuppressed );\n\n\treturn (\n\t\t<IntroductionModal\n\t\t\topen={ shouldShowIntroduction }\n\t\t\ttitle={ __( 'Class Manager', 'elementor' ) }\n\t\t\thandleClose={ ( shouldShowAgain ) => {\n\t\t\t\tif ( ! shouldShowAgain ) {\n\t\t\t\t\tsuppressMessage();\n\t\t\t\t}\n\n\t\t\t\tsetShouldShowIntroduction( false );\n\t\t\t} }\n\t\t>\n\t\t\t<Image\n\t\t\t\tsx={ { width: '100%', aspectRatio: '16 / 9' } }\n\t\t\t\tsrc={ 'https://assets.elementor.com/packages/v1/images/class-manager-intro.svg' }\n\t\t\t\talt={ '' }\n\t\t\t/>\n\t\t\t<IntroductionContent />\n\t\t</IntroductionModal>\n\t);\n};\n\nconst IntroductionContent = () => {\n\treturn (\n\t\t<Box p={ 3 }>\n\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t{ __(\n\t\t\t\t\t\"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.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<br />\n\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t{ __(\n\t\t\t\t\t'Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t</Box>\n\t);\n};\n","import { getCurrentDocument, getV1DocumentsManager } from '@elementor/editor-documents';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { slice } from '../../store';\nimport { trackGlobalClasses } from '../../utils/tracking';\n\nlet isDeleted = false;\n\nexport const deleteClass = ( id: string ) => {\n\ttrackGlobalClasses( {\n\t\tevent: 'classDeleted',\n\t\tclassId: id,\n\t\trunAction: () => {\n\t\t\tdispatch( slice.actions.delete( id ) );\n\t\t\tisDeleted = true;\n\t\t},\n\t} );\n};\n\nexport const onDelete = async () => {\n\tawait reloadDocument();\n\n\tisDeleted = false;\n};\n\nexport const hasDeletedItems = () => isDeleted;\n\n// When deleting a class, we remove it from all the documents that have it applied.\n// In order to reflect the changes in the active document, we need to reload it.\nconst reloadDocument = () => {\n\tconst currentDocument = getCurrentDocument();\n\tconst documentsManager = getV1DocumentsManager();\n\n\tdocumentsManager.invalidateCache();\n\n\treturn runCommand( 'editor/documents/switch', {\n\t\tid: currentDocument?.id,\n\t\tshouldScroll: false,\n\t\tshouldNavigateToDefaultRoute: false,\n\t} );\n};\n","import * as React from 'react';\nimport { ColorSwatchIcon } from '@elementor/icons';\nimport { type SvgIconProps } from '@elementor/ui';\n\nexport const FlippedColorSwatchIcon = ( { sx, ...props }: SvgIconProps ) => (\n\t<ColorSwatchIcon sx={ { transform: 'rotate(90deg)', ...sx } } { ...props } />\n);\n","import * as React from 'react';\nimport { useEffect, useMemo } from 'react';\nimport { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { __useDispatch as useDispatch } from '@elementor/store';\nimport { List, Stack, styled, Typography, type TypographyProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useFilters } from '../../hooks/use-filters';\nimport { useOrderedClasses } from '../../hooks/use-ordered-classes';\nimport { slice } from '../../store';\nimport { trackGlobalClasses } from '../../utils/tracking';\nimport { useSearchAndFilters } from '../search-and-filter/context';\nimport { ClassItem } from './class-item';\nimport { DeleteConfirmationProvider } from './delete-confirmation-dialog';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { getNotFoundType, NotFound } from './not-found';\nimport { SortableItem, SortableProvider } from './sortable';\n\ntype GlobalClassesListProps = {\n\tdisabled?: boolean;\n};\n\nexport const GlobalClassesList = ( { disabled }: GlobalClassesListProps ) => {\n\tconst {\n\t\tsearch: { debouncedValue: searchValue },\n\t} = useSearchAndFilters();\n\tconst cssClasses = useOrderedClasses();\n\tconst dispatch = useDispatch();\n\tconst filters = useFilters();\n\tconst [ draggedItemId, setDraggedItemId ] = React.useState< StyleDefinitionID | null >( null );\n\tconst draggedItemLabel = cssClasses.find( ( cssClass ) => cssClass.id === draggedItemId )?.label ?? '';\n\tconst [ classesOrder, reorderClasses ] = useReorder( draggedItemId, setDraggedItemId, draggedItemLabel ?? '' );\n\tconst filteredCssClasses = useFilteredCssClasses();\n\n\tuseEffect( () => {\n\t\tconst handler = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'z' && ( event.ctrlKey || event.metaKey ) ) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( event.shiftKey ) {\n\t\t\t\t\tdispatch( slice.actions.redo() );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdispatch( slice.actions.undo() );\n\t\t\t}\n\t\t};\n\t\twindow.addEventListener( 'keydown', handler, {\n\t\t\tcapture: true,\n\t\t} );\n\t\treturn () => window.removeEventListener( 'keydown', handler );\n\t}, [ dispatch ] );\n\n\tif ( ! cssClasses?.length ) {\n\t\treturn <EmptyState />;\n\t}\n\n\tconst notFoundType = getNotFoundType( searchValue, filters, filteredCssClasses );\n\n\tif ( notFoundType ) {\n\t\treturn <NotFound notFoundType={ notFoundType } />;\n\t}\n\n\tconst isFiltersApplied = filters?.length || searchValue;\n\n\tconst allowSorting = filteredCssClasses.length > 1 && ! isFiltersApplied;\n\n\treturn (\n\t\t<DeleteConfirmationProvider>\n\t\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 0.5 } }>\n\t\t\t\t<SortableProvider\n\t\t\t\t\tvalue={ classesOrder }\n\t\t\t\t\tonChange={ reorderClasses }\n\t\t\t\t\tdisableDragOverlay={ ! allowSorting }\n\t\t\t\t>\n\t\t\t\t\t{ filteredCssClasses?.map( ( { id, label } ) => (\n\t\t\t\t\t\t<SortableItem key={ id } id={ id }>\n\t\t\t\t\t\t\t{ ( { isDragged, isDragPlaceholder, triggerProps, triggerStyle } ) => {\n\t\t\t\t\t\t\t\tif ( isDragged && ! draggedItemId ) {\n\t\t\t\t\t\t\t\t\tsetDraggedItemId( id );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<ClassItem\n\t\t\t\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\t\t\t\trenameClass={ ( newLabel: string ) => {\n\t\t\t\t\t\t\t\t\t\t\ttrackGlobalClasses( {\n\t\t\t\t\t\t\t\t\t\t\t\tevent: 'classRenamed',\n\t\t\t\t\t\t\t\t\t\t\t\tclassId: id,\n\t\t\t\t\t\t\t\t\t\t\t\toldValue: label,\n\t\t\t\t\t\t\t\t\t\t\t\tnewValue: newLabel,\n\t\t\t\t\t\t\t\t\t\t\t\tsource: 'class-manager',\n\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\t\t\t\t\t\tslice.actions.update( {\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\tselected={ isDragged }\n\t\t\t\t\t\t\t\t\t\tdisabled={ disabled || isDragPlaceholder }\n\t\t\t\t\t\t\t\t\t\tsortableTriggerProps={ {\n\t\t\t\t\t\t\t\t\t\t\t...triggerProps,\n\t\t\t\t\t\t\t\t\t\t\tstyle: triggerStyle,\n\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\tshowSortIndicator={ allowSorting }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t) ) }\n\t\t\t\t</SortableProvider>\n\t\t\t</List>\n\t\t</DeleteConfirmationProvider>\n\t);\n};\n\nconst EmptyState = () => (\n\t<Stack alignItems=\"center\" gap={ 1.5 } pt={ 10 } px={ 0.5 } maxWidth=\"260px\" margin=\"auto\">\n\t\t<FlippedColorSwatchIcon fontSize=\"large\" />\n\t\t<StyledHeader variant=\"subtitle2\" component=\"h2\" color=\"text.secondary\">\n\t\t\t{ __( 'There are no global classes yet.', 'elementor' ) }\n\t\t</StyledHeader>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t{ __(\n\t\t\t\t'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.',\n\t\t\t\t'elementor'\n\t\t\t) }\n\t\t</Typography>\n\t</Stack>\n);\n\n// Override panel reset styles.\nconst StyledHeader = styled( Typography )< TypographyProps >( ( { theme, variant } ) => ( {\n\t'&.MuiTypography-root': {\n\t\t...( theme.typography[ variant as keyof typeof theme.typography ] as React.CSSProperties ),\n\t},\n} ) );\n\nconst useReorder = (\n\tdraggedItemId: StyleDefinitionID | null,\n\tsetDraggedItemId: React.Dispatch< React.SetStateAction< StyleDefinitionID | null > >,\n\tdraggedItemLabel: string\n) => {\n\tconst dispatch = useDispatch();\n\tconst order = useClassesOrder();\n\n\tconst reorder = ( newIds: StyleDefinitionID[] ) => {\n\t\tdispatch( slice.actions.setOrder( newIds ) );\n\n\t\tif ( draggedItemId ) {\n\t\t\ttrackGlobalClasses( {\n\t\t\t\tevent: 'classManagerReorder',\n\t\t\t\tclassId: draggedItemId,\n\t\t\t\tclassTitle: draggedItemLabel,\n\t\t\t} );\n\t\t\tsetDraggedItemId( null ); // Reset after tracking\n\t\t}\n\t};\n\n\treturn [ order, reorder ] as const;\n};\n\nconst useFilteredCssClasses = (): StyleDefinition[] => {\n\tconst cssClasses = useOrderedClasses();\n\tconst {\n\t\tsearch: { debouncedValue: searchValue },\n\t} = useSearchAndFilters();\n\tconst filters = useFilters();\n\n\tconst lowercaseLabels = useMemo(\n\t\t() =>\n\t\t\tcssClasses.map( ( cssClass ) => ( {\n\t\t\t\t...cssClass,\n\t\t\t\tlowerLabel: cssClass.label.toLowerCase(),\n\t\t\t} ) ),\n\t\t[ cssClasses ]\n\t);\n\n\tconst filteredClasses = useMemo( () => {\n\t\tif ( searchValue.length > 1 ) {\n\t\t\treturn lowercaseLabels.filter( ( cssClass ) => cssClass.lowerLabel.includes( searchValue.toLowerCase() ) );\n\t\t}\n\t\treturn cssClasses;\n\t}, [ searchValue, cssClasses, lowercaseLabels ] );\n\n\treturn useMemo( () => {\n\t\tif ( filters && filters.length > 0 ) {\n\t\t\treturn filteredClasses.filter( ( cssClass ) => filters.includes( cssClass.id ) );\n\t\t}\n\t\treturn filteredClasses;\n\t}, [ filteredClasses, filters ] );\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectOrderedClasses } from '../store';\n\nexport const useOrderedClasses = () => {\n\treturn useSelector( selectOrderedClasses );\n};\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { EditableField, EllipsisWithTooltip, MenuListItem, useEditable, WarningInfotip } from '@elementor/editor-ui';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tListItemButton,\n\ttype ListItemButtonProps,\n\tMenu,\n\tStack,\n\tstyled,\n\ttype Theme,\n\tTooltip,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { CssClassUsageTrigger } from '../css-class-usage/components';\nimport { useDeleteConfirmation } from './delete-confirmation-dialog';\nimport { SortableTrigger, type SortableTriggerProps } from './sortable';\n\ntype ClassItemProps = React.PropsWithChildren< {\n\tid: string;\n\tlabel: string;\n\trenameClass: ( newLabel: string ) => void;\n\tselected?: boolean;\n\tdisabled?: boolean;\n\tsortableTriggerProps: SortableTriggerProps;\n\tshowSortIndicator?: boolean;\n} >;\n\nexport const ClassItem = ( {\n\tid,\n\tlabel,\n\trenameClass,\n\tselected,\n\tdisabled,\n\tsortableTriggerProps,\n\tshowSortIndicator,\n}: ClassItemProps ) => {\n\tconst itemRef = useRef< HTMLElement >( null );\n\tconst {\n\t\tref: editableRef,\n\t\topenEditMode,\n\t\tisEditing,\n\t\terror,\n\t\tgetProps: getEditableProps,\n\t} = useEditable( {\n\t\tvalue: label,\n\t\tonSubmit: renameClass,\n\t\tvalidation: validateLabel,\n\t} );\n\tconst [ selectedCssUsage, setSelectedCssUsage ] = useState( '' );\n\tconst { openDialog } = useDeleteConfirmation();\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst isSelected = ( selectedCssUsage === id || selected || popupState.isOpen ) && ! disabled;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack p={ 0 }>\n\t\t\t\t<WarningInfotip\n\t\t\t\t\topen={ Boolean( error ) }\n\t\t\t\t\ttext={ error ?? '' }\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\twidth={ itemRef.current?.getBoundingClientRect().width }\n\t\t\t\t\toffset={ [ 0, -15 ] }\n\t\t\t\t>\n\t\t\t\t\t<StyledListItemButton\n\t\t\t\t\t\tref={ itemRef }\n\t\t\t\t\t\tdense\n\t\t\t\t\t\tdisableGutters\n\t\t\t\t\t\tshowSortIndicator={ showSortIndicator }\n\t\t\t\t\t\tshowActions={ isSelected || isEditing }\n\t\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t\t\tonDoubleClick={ openEditMode }\n\t\t\t\t\t\tselected={ isSelected }\n\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t\tfocusVisibleClassName=\"visible-class-item\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<SortableTrigger { ...sortableTriggerProps } />\n\t\t\t\t\t\t<Indicator isActive={ isEditing } isError={ !! error }>\n\t\t\t\t\t\t\t{ isEditing ? (\n\t\t\t\t\t\t\t\t<EditableField\n\t\t\t\t\t\t\t\t\tref={ editableRef }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\t{ ...getEditableProps() }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<EllipsisWithTooltip title={ label } as={ Typography } variant=\"caption\" />\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Indicator>\n\t\t\t\t\t\t<Box className={ 'class-item-locator' }>\n\t\t\t\t\t\t\t<CssClassUsageTrigger id={ id } onClick={ setSelectedCssUsage } />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\tclassName={ 'class-item-more-actions' }\n\t\t\t\t\t\t\ttitle={ __( 'More actions', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconButton size=\"tiny\" { ...bindTrigger( popupState ) } aria-label=\"More actions\">\n\t\t\t\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t</StyledListItemButton>\n\t\t\t\t</WarningInfotip>\n\t\t\t</Stack>\n\t\t\t<Menu\n\t\t\t\t{ ...bindMenu( popupState ) }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<MenuListItem\n\t\t\t\t\tsx={ { minWidth: '160px' } }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tpopupState.close();\n\t\t\t\t\t\topenEditMode();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t{ __( 'Rename', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t\t<MenuListItem\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tpopupState.close();\n\t\t\t\t\t\topenDialog( { id, label } );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'error.light' } }>\n\t\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n\nconst StyledListItemButton = styled( ListItemButton, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'showActions', 'showSortIndicator' ].includes( prop ),\n} )< ListItemButtonProps & { showActions: boolean; showSortIndicator: boolean } >(\n\t( { showActions, showSortIndicator } ) => `\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: ${ showSortIndicator && showActions ? 'visible' : 'hidden' };\n }\n\n &:hover:not(:disabled) {\n .class-item-locator {\n visibility: visible;\n }\n\n .class-item-sortable-trigger {\n visibility: ${ showSortIndicator ? 'visible' : 'hidden' };\n }\n }\n `\n);\n\nconst Indicator = styled( Box, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'isActive', 'isError' ].includes( prop ),\n} )< { isActive: boolean; isError: boolean } >( ( { theme, isActive, isError } ) => ( {\n\tdisplay: 'flex',\n\twidth: '100%',\n\tflexGrow: 1,\n\tborderRadius: theme.spacing( 0.5 ),\n\tborder: getIndicatorBorder( { isActive, isError, theme } ),\n\tpadding: `0 ${ theme.spacing( 1 ) }`,\n\tmarginLeft: isActive ? theme.spacing( 1 ) : 0,\n\tminWidth: 0,\n} ) );\n\nconst getIndicatorBorder = ( { isActive, isError, theme }: { isActive: boolean; isError: boolean; theme: Theme } ) => {\n\tif ( isError ) {\n\t\treturn `2px solid ${ theme.palette.error.main }`;\n\t}\n\n\tif ( isActive ) {\n\t\treturn `2px solid ${ theme.palette.secondary.main }`;\n\t}\n\n\treturn 'none';\n};\n\nconst validateLabel = ( newLabel: string ) => {\n\tconst result = validateStyleLabel( newLabel, 'rename' );\n\n\tif ( result.isValid ) {\n\t\treturn null;\n\t}\n\n\treturn result.errorMessage;\n};\n","import * as React from 'react';\nimport { __useOpenDocumentInNewTab as useOpenDocumentInNewTab } from '@elementor/editor-documents';\nimport {\n\tEllipsisWithTooltip,\n\tPopoverBody,\n\tPopoverHeader,\n\tPopoverMenuList,\n\ttype VirtualizedItem,\n} from '@elementor/editor-ui';\nimport {\n\tCurrentLocationIcon,\n\tExternalLinkIcon,\n\tFooterTemplateIcon,\n\tHeaderTemplateIcon,\n\tPagesIcon,\n\tPopupTemplateIcon,\n\tPostTypeIcon,\n} from '@elementor/icons';\nimport { Box, Chip, Divider, Icon, MenuList, Stack, styled, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../../hooks/use-css-class-usage-by-id';\nimport { trackGlobalClasses } from '../../../utils/tracking';\nimport { type ContentType } from '../types';\n\ntype CssClassUsageRecord = VirtualizedItem< 'item', string > & { docType: ContentType };\n\nconst iconMapper: Record< ContentType, { label: string; icon: React.ReactElement } > = {\n\t'wp-post': {\n\t\tlabel: __( 'Post', 'elementor' ),\n\t\ticon: <PostTypeIcon fontSize={ 'inherit' } />,\n\t},\n\t'wp-page': {\n\t\tlabel: __( 'Page', 'elementor' ),\n\t\ticon: <PagesIcon fontSize={ 'inherit' } />,\n\t},\n\tpopup: {\n\t\tlabel: __( 'Popup', 'elementor' ),\n\t\ticon: <PopupTemplateIcon fontSize={ 'inherit' } />,\n\t},\n\theader: {\n\t\tlabel: __( 'Header', 'elementor' ),\n\t\ticon: <HeaderTemplateIcon fontSize={ 'inherit' } />,\n\t},\n\tfooter: {\n\t\tlabel: __( 'Footer', 'elementor' ),\n\t\ticon: <FooterTemplateIcon fontSize={ 'inherit' } />,\n\t},\n};\n\nexport const CssClassUsagePopover = ( {\n\tcssClassID,\n\tonClose,\n}: {\n\tonClose: React.ComponentProps< typeof PopoverHeader >[ 'onClose' ];\n\tcssClassID: string;\n} ) => {\n\tconst { data: classUsage } = useCssClassUsageByID( cssClassID );\n\tconst onNavigate = useOpenDocumentInNewTab();\n\n\tconst cssClassUsageRecords: CssClassUsageRecord[] =\n\t\tclassUsage?.content.map(\n\t\t\t( { title, elements, pageId, type } ) =>\n\t\t\t\t( {\n\t\t\t\t\ttype: 'item',\n\t\t\t\t\tvalue: pageId,\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tsecondaryText: elements.length.toString(),\n\t\t\t\t\tdocType: type,\n\t\t\t\t} ) as CssClassUsageRecord\n\t\t) ?? [];\n\n\tconst handleSelect = ( value: string ) => {\n\t\tonNavigate( +value );\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classUsageLocate',\n\t\t\tclassId: cssClassID,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PopoverHeader\n\t\t\t\ticon={ <CurrentLocationIcon fontSize={ 'tiny' } /> }\n\t\t\t\ttitle={\n\t\t\t\t\t<Stack flexDirection={ 'row' } gap={ 1 } alignItems={ 'center' }>\n\t\t\t\t\t\t<Box aria-label={ 'header-title' }>{ __( 'Locator', 'elementor' ) }</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Chip sx={ { lineHeight: 1 } } size={ 'tiny' } label={ classUsage.total } />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Stack>\n\t\t\t\t}\n\t\t\t\tonClose={ onClose }\n\t\t\t/>\n\t\t\t<Divider />\n\t\t\t<PopoverBody width={ 300 }>\n\t\t\t\t<PopoverMenuList\n\t\t\t\t\tonSelect={ handleSelect }\n\t\t\t\t\titems={ cssClassUsageRecords }\n\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\tmenuListTemplate={ StyledCssClassUsageItem }\n\t\t\t\t\tmenuItemContentTemplate={ ( cssClassUsageRecord ) => (\n\t\t\t\t\t\t<Stack flexDirection={ 'row' } flex={ 1 } alignItems={ 'center' }>\n\t\t\t\t\t\t\t<Box display={ 'flex' } sx={ { pr: 1 } }>\n\t\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\t\tdisableInteractive\n\t\t\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t\t\ticonMapper?.[ cssClassUsageRecord.docType as ContentType ]?.label ??\n\t\t\t\t\t\t\t\t\t\tcssClassUsageRecord.docType\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon fontSize={ 'small' }>\n\t\t\t\t\t\t\t\t\t\t{ iconMapper?.[ cssClassUsageRecord.docType as ContentType ]?.icon || (\n\t\t\t\t\t\t\t\t\t\t\t<PagesIcon fontSize={ 'inherit' } />\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</Icon>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box sx={ { pr: 0.5, maxWidth: '173px' } } display={ 'flex' }>\n\t\t\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\t\t\ttitle={ cssClassUsageRecord.label }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\tmaxWidth=\"173px\"\n\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<ExternalLinkIcon className={ 'hover-only-icon' } fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tml: 'auto',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t\t\tlabel={ cssClassUsageRecord.secondaryText }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</PopoverBody>\n\t\t</>\n\t);\n};\n\nconst StyledCssClassUsageItem = styled( MenuList )( ( { theme } ) => ( {\n\t'& > li': {\n\t\tdisplay: 'flex',\n\t\tcursor: 'pointer',\n\t\theight: 32,\n\t\twidth: '100%',\n\t},\n\t'& > [role=\"option\"]': {\n\t\t...theme.typography.caption,\n\t\tlineHeight: 'inherit',\n\t\tpadding: theme.spacing( 0.5, 1, 0.5, 2 ),\n\t\ttextOverflow: 'ellipsis',\n\t\tposition: 'absolute',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\topacity: 1,\n\t\t'.hover-only-icon': {\n\t\t\tcolor: theme.palette.text.disabled,\n\t\t\topacity: 0,\n\t\t},\n\t\t'&:hover': {\n\t\t\tborderRadius: theme.spacing( 0.5 ),\n\t\t\tbackgroundColor: theme.palette.action.hover,\n\t\t\t'.hover-only-icon': {\n\t\t\t\tcolor: theme.palette.text.disabled,\n\t\t\t\topacity: 1,\n\t\t\t},\n\t\t},\n\t},\n\twidth: '100%',\n\tposition: 'relative',\n} ) );\n","import { type EnhancedCssClassUsageContent } from '../components/css-class-usage/types';\nimport { useCssClassUsage } from './use-css-class-usage';\n\nconst EMPTY_CLASS_USAGE: EnhancedCssClassUsageContent = {\n\ttotal: 0,\n\tcontent: [],\n};\n\nexport const useCssClassUsageByID = (\n\tid: string\n): { data: EnhancedCssClassUsageContent; isLoading: boolean; isSuccess?: boolean } => {\n\tconst { data, ...rest } = useCssClassUsage();\n\tconst classData = data?.[ id ] ?? EMPTY_CLASS_USAGE;\n\treturn { ...rest, data: classData };\n};\n","import * as React from 'react';\nimport { type MouseEvent, type PropsWithChildren } from 'react';\nimport { InfoAlert } from '@elementor/editor-ui';\nimport { CurrentLocationIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tInfotip,\n\tPopover,\n\tstyled,\n\tTooltip,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../../hooks/use-css-class-usage-by-id';\nimport { trackGlobalClasses } from '../../../utils/tracking';\nimport { type CssClassID } from '../types';\nimport { CssClassUsagePopover } from './css-class-usage-popover';\n\nexport const CssClassUsageTrigger = ( { id, onClick }: { id: CssClassID; onClick: ( id: CssClassID ) => void } ) => {\n\tconst {\n\t\tdata: { total },\n\t\tisLoading,\n\t} = useCssClassUsageByID( id );\n\tconst cssClassUsagePopover = usePopupState( { variant: 'popover', popupId: 'css-class-usage-popover' } );\n\n\tif ( isLoading ) {\n\t\treturn null;\n\t}\n\n\tconst WrapperComponent = total !== 0 ? TooltipWrapper : InfoAlertMessage;\n\n\tconst handleMouseEnter = () => {\n\t\ttrackGlobalClasses( {\n\t\t\tevent: 'classUsageHovered',\n\t\t\tclassId: id,\n\t\t\tusage: total,\n\t\t} );\n\t};\n\n\tconst handleClick = ( e: MouseEvent ) => {\n\t\tif ( total !== 0 ) {\n\t\t\tbindTrigger( cssClassUsagePopover ).onClick( e );\n\t\t\tonClick( id );\n\t\t\ttrackGlobalClasses( {\n\t\t\t\tevent: 'classUsageClicked',\n\t\t\t\tclassId: id,\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Box position={ 'relative' } onMouseEnter={ handleMouseEnter }>\n\t\t\t\t<WrapperComponent total={ total }>\n\t\t\t\t\t<CustomIconButton\n\t\t\t\t\t\tdisabled={ total === 0 }\n\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t{ ...bindTrigger( cssClassUsagePopover ) }\n\t\t\t\t\t\tonClick={ handleClick }\n\t\t\t\t\t>\n\t\t\t\t\t\t<CurrentLocationIcon fontSize={ 'tiny' } />\n\t\t\t\t\t</CustomIconButton>\n\t\t\t\t</WrapperComponent>\n\t\t\t</Box>\n\t\t\t<Box>\n\t\t\t\t<Popover\n\t\t\t\t\tanchorOrigin={ {\n\t\t\t\t\t\tvertical: 'center',\n\t\t\t\t\t\thorizontal: 'right',\n\t\t\t\t\t} }\n\t\t\t\t\ttransformOrigin={ {\n\t\t\t\t\t\tvertical: 15,\n\t\t\t\t\t\thorizontal: -50,\n\t\t\t\t\t} }\n\t\t\t\t\t{ ...bindPopover( cssClassUsagePopover ) }\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tbindPopover( cssClassUsagePopover ).onClose();\n\t\t\t\t\t\tonClick( '' );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<CssClassUsagePopover\n\t\t\t\t\t\tonClose={ cssClassUsagePopover.close }\n\t\t\t\t\t\taria-label=\"css-class-usage-popover\"\n\t\t\t\t\t\tcssClassID={ id }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t</Box>\n\t\t</>\n\t);\n};\n\nconst CustomIconButton = styled( IconButton )( ( { theme } ) => ( {\n\t'&.Mui-disabled': {\n\t\tpointerEvents: 'auto', // Enable hover\n\t\t'&:hover': {\n\t\t\tcolor: theme.palette.action.disabled, // optional\n\t\t},\n\t},\n\theight: '22px',\n\twidth: '22px',\n} ) );\n\nconst TooltipWrapper = ( { children, total }: PropsWithChildren< { total: number } > ) => (\n\t<Tooltip\n\t\tdisableInteractive\n\t\tplacement={ 'top' }\n\t\ttitle={ `${ __( 'Show {{number}} {{locations}}', 'elementor' )\n\t\t\t.replace( '{{number}}', total.toString() )\n\t\t\t.replace(\n\t\t\t\t'{{locations}}',\n\t\t\t\ttotal === 1 ? __( 'location', 'elementor' ) : __( 'locations', 'elementor' )\n\t\t\t) }` }\n\t>\n\t\t<span>{ children }</span>\n\t</Tooltip>\n);\n\nconst InfoAlertMessage = ( { children }: PropsWithChildren ) => (\n\t<Infotip\n\t\tdisableInteractive\n\t\tplacement={ 'top' }\n\t\tcolor={ 'secondary' }\n\t\tcontent={ <InfoAlert sx={ { mt: 1 } }>{ __( 'This class isn’t being used yet.', 'elementor' ) }</InfoAlert> }\n\t>\n\t\t<span>{ children }</span>\n\t</Infotip>\n);\n","import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { ConfirmationDialog } from '@elementor/editor-ui';\nimport { Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../hooks/use-css-class-usage-by-id';\nimport { deleteClass } from './delete-class';\n\ntype DeleteClassDialogProps = Pick< StyleDefinition, 'id' | 'label' >;\n\ntype DeleteConfirmationContext = {\n\topenDialog: ( props: DeleteClassDialogProps ) => void;\n\tcloseDialog: () => void;\n\tdialogProps: DeleteClassDialogProps | null;\n};\n\nconst context = createContext< DeleteConfirmationContext | null >( null );\n\nexport const DeleteConfirmationProvider = ( { children }: React.PropsWithChildren ) => {\n\tconst [ dialogProps, setDialogProps ] = useState< DeleteClassDialogProps | null >( null );\n\n\tconst openDialog = ( props: DeleteClassDialogProps ) => {\n\t\tsetDialogProps( props );\n\t};\n\n\tconst closeDialog = () => {\n\t\tsetDialogProps( null );\n\t};\n\n\treturn (\n\t\t<context.Provider value={ { openDialog, closeDialog, dialogProps } }>\n\t\t\t{ children }\n\t\t\t{ !! dialogProps && <DeleteClassDialog { ...dialogProps } /> }\n\t\t</context.Provider>\n\t);\n};\n\nconst DeleteClassDialog = ( { label, id }: DeleteClassDialogProps ) => {\n\tconst { closeDialog } = useDeleteConfirmation();\n\tconst {\n\t\tdata: { total, content },\n\t} = useCssClassUsageByID( id );\n\n\tconst handleConfirm = () => {\n\t\tcloseDialog();\n\t\tdeleteClass( id );\n\t};\n\n\t// translators: %1: total usage count, %2: number of pages\n\tconst text =\n\t\ttotal && content.length\n\t\t\t? __(\n\t\t\t\t\t'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.',\n\t\t\t\t\t'elementor'\n\t\t\t )\n\t\t\t\t\t.replace( '%1', total.toString() )\n\t\t\t\t\t.replace( '%2', content.length.toString() )\n\t\t\t: __(\n\t\t\t\t\t'Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.',\n\t\t\t\t\t'elementor'\n\t\t\t );\n\n\treturn (\n\t\t<ConfirmationDialog open onClose={ closeDialog }>\n\t\t\t<ConfirmationDialog.Title>{ __( 'Delete this class?', 'elementor' ) }</ConfirmationDialog.Title>\n\t\t\t<ConfirmationDialog.Content>\n\t\t\t\t<ConfirmationDialog.ContentText>\n\t\t\t\t\t{ __( 'Deleting', 'elementor' ) }\n\t\t\t\t\t<Typography variant=\"subtitle2\" component=\"span\">\n\t\t\t\t\t\t { label } \n\t\t\t\t\t</Typography>\n\t\t\t\t\t{ text }\n\t\t\t\t</ConfirmationDialog.ContentText>\n\t\t\t</ConfirmationDialog.Content>\n\t\t\t<ConfirmationDialog.Actions onClose={ closeDialog } onConfirm={ handleConfirm } />\n\t\t</ConfirmationDialog>\n\t);\n};\n\nexport const useDeleteConfirmation = () => {\n\tconst contextValue = useContext( context );\n\n\tif ( ! contextValue ) {\n\t\tthrow new Error( 'useDeleteConfirmation must be used within a DeleteConfirmationProvider' );\n\t}\n\n\treturn contextValue;\n};\n","import * as React from 'react';\nimport { GripVerticalIcon } from '@elementor/icons';\nimport {\n\tBox,\n\tstyled,\n\tUnstableSortableItem,\n\ttype UnstableSortableItemProps,\n\ttype UnstableSortableItemRenderProps,\n\tUnstableSortableProvider,\n\ttype UnstableSortableProviderProps,\n} from '@elementor/ui';\n\nexport const SortableProvider = < T extends string >( props: UnstableSortableProviderProps< T > ) => (\n\t<UnstableSortableProvider restrictAxis variant=\"static\" dragPlaceholderStyle={ { opacity: '1' } } { ...props } />\n);\n\nexport type SortableTriggerProps = React.HTMLAttributes< HTMLDivElement >;\n\nexport const SortableTrigger = ( props: SortableTriggerProps ) => (\n\t<StyledSortableTrigger { ...props } role=\"button\" className=\"class-item-sortable-trigger\" aria-label=\"sort\">\n\t\t<GripVerticalIcon fontSize=\"tiny\" />\n\t</StyledSortableTrigger>\n);\n\ntype SortableItemProps = {\n\tid: UnstableSortableItemProps[ 'id' ];\n\tchildren: ( props: Partial< UnstableSortableItemRenderProps > ) => React.ReactNode;\n};\n\nexport const SortableItem = ( { children, id, ...props }: SortableItemProps ) => {\n\treturn (\n\t\t<UnstableSortableItem\n\t\t\t{ ...props }\n\t\t\tid={ id }\n\t\t\trender={ ( {\n\t\t\t\titemProps,\n\t\t\t\tisDragged,\n\t\t\t\ttriggerProps,\n\t\t\t\titemStyle,\n\t\t\t\ttriggerStyle,\n\t\t\t\tdropIndicationStyle,\n\t\t\t\tshowDropIndication,\n\t\t\t\tisDragOverlay,\n\t\t\t\tisDragPlaceholder,\n\t\t\t}: UnstableSortableItemRenderProps ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Box\n\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\tstyle={ itemStyle }\n\t\t\t\t\t\tcomponent={ 'li' }\n\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tbackgroundColor: isDragOverlay ? 'background.paper' : undefined,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ children( {\n\t\t\t\t\t\t\titemProps,\n\t\t\t\t\t\t\tisDragged,\n\t\t\t\t\t\t\ttriggerProps,\n\t\t\t\t\t\t\titemStyle,\n\t\t\t\t\t\t\ttriggerStyle,\n\t\t\t\t\t\t\tisDragPlaceholder,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t{ showDropIndication && <SortableItemIndicator style={ dropIndicationStyle } /> }\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n};\n\nconst StyledSortableTrigger = styled( 'div' )( ( { theme } ) => ( {\n\tposition: 'absolute',\n\tleft: 0,\n\ttop: '50%',\n\ttransform: `translate( -${ theme.spacing( 1.5 ) }, -50% )`,\n\tcolor: theme.palette.action.active,\n} ) );\n\nconst SortableItemIndicator = styled( Box )`\n\twidth: 100%;\n\theight: 1px;\n\tbackground-color: ${ ( { theme } ) => theme.palette.text.primary };\n`;\n","import * as React from 'react';\nimport { type FC } from 'react';\nimport type { StyleDefinition } from '@elementor/editor-styles';\nimport { ColorSwatchIcon, PhotoIcon } from '@elementor/icons';\nimport { Box, Link, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearchAndFilters } from '../search-and-filter/context';\n\nexport const getNotFoundType = (\n\tsearchValue: string,\n\tfilters: string[] | null | undefined,\n\tfilteredClasses: StyleDefinition[]\n): NotFoundType | undefined => {\n\tconst searchNotFound = filteredClasses.length <= 0 && searchValue.length > 1;\n\tconst filterNotFound = filters && filters.length === 0;\n\tconst filterAndSearchNotFound = searchNotFound && filterNotFound;\n\n\tif ( filterAndSearchNotFound ) {\n\t\treturn 'filterAndSearch';\n\t}\n\tif ( searchNotFound ) {\n\t\treturn 'search';\n\t}\n\tif ( filterNotFound ) {\n\t\treturn 'filter';\n\t}\n\treturn undefined;\n};\n\nexport type NotFoundType = 'filter' | 'search' | 'filterAndSearch';\n\nconst notFound = {\n\tfilterAndSearch: {\n\t\tmainText: __( 'Sorry, nothing matched.', 'elementor' ),\n\t\tsceneryText: __( 'Try something else.', 'elementor' ),\n\t\ticon: <PhotoIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n\tsearch: {\n\t\tmainText: __( 'Sorry, nothing matched', 'elementor' ),\n\t\tsceneryText: __( 'Clear your input and try something else.', 'elementor' ),\n\t\ticon: <PhotoIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n\tfilter: {\n\t\tmainText: __( 'Sorry, nothing matched that search.', 'elementor' ),\n\t\tsceneryText: __( 'Clear the filters and try something else.', 'elementor' ),\n\t\ticon: <ColorSwatchIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n};\n\ntype GetNotFoundConfigProps = {\n\tnotFoundType: NotFoundType;\n};\n\nexport const NotFound = ( { notFoundType }: GetNotFoundConfigProps ): React.ReactElement => {\n\tconst {\n\t\tsearch: { onClearSearch, inputValue },\n\t\tfilters: { onClearFilter },\n\t} = useSearchAndFilters();\n\n\tswitch ( notFoundType ) {\n\t\tcase 'filter':\n\t\t\treturn <NotFoundLayout { ...notFound.filter } onClear={ onClearFilter } />;\n\t\tcase 'search':\n\t\t\treturn <NotFoundLayout { ...notFound.search } searchValue={ inputValue } onClear={ onClearSearch } />;\n\t\tcase 'filterAndSearch':\n\t\t\treturn (\n\t\t\t\t<NotFoundLayout\n\t\t\t\t\t{ ...notFound.filterAndSearch }\n\t\t\t\t\tonClear={ () => {\n\t\t\t\t\t\tonClearFilter();\n\t\t\t\t\t\tonClearSearch();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t);\n\t}\n};\n\ntype NotFoundLayoutProps = {\n\tsearchValue?: string;\n\tonClear: () => void;\n\tmainText: string;\n\tsceneryText: string;\n\ticon: React.ReactElement;\n};\n\nexport const NotFoundLayout: FC< NotFoundLayoutProps > = ( { onClear, searchValue, mainText, sceneryText, icon } ) => (\n\t<Stack\n\t\tcolor={ 'text.secondary' }\n\t\tpt={ 5 }\n\t\talignItems=\"center\"\n\t\tgap={ 1 }\n\t\toverflow={ 'hidden' }\n\t\tjustifySelf={ 'center' }\n\t>\n\t\t{ icon }\n\t\t<Box\n\t\t\tsx={ {\n\t\t\t\twidth: '100%',\n\t\t\t} }\n\t\t>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t{ mainText }\n\t\t\t</Typography>\n\t\t\t{ searchValue && (\n\t\t\t\t<Typography\n\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<span>“</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>”.</span>\n\t\t\t\t</Typography>\n\t\t\t) }\n\t\t</Box>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t{ sceneryText }\n\t\t</Typography>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ onClear }>\n\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t</Link>\n\t\t</Typography>\n\t</Stack>\n);\n","type ExtendedWindow = Window & {\n\t$e?: {\n\t\tcomponents?: {\n\t\t\tget?: ( name: 'panel' ) =>\n\t\t\t\t| {\n\t\t\t\t\t\tblockUserInteractions?: () => void;\n\t\t\t\t\t\tunblockUserInteractions?: () => void;\n\t\t\t\t }\n\t\t\t\t| undefined;\n\t\t};\n\t};\n};\n\nexport function blockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.blockUserInteractions?.();\n}\n\nexport function unblockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.unblockUserInteractions?.();\n}\n","import * as React from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Divider } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\nimport { trackGlobalClasses } from '../utils/tracking';\n\ntype OwnProps = {\n\tsuccessCallback: ( _: string ) => void;\n\tstyleDef: StyleDefinition | null;\n\tcanConvert: boolean;\n};\n\nexport const ConvertLocalClassToGlobalClass = ( props: OwnProps ) => {\n\tconst localStyleData = props.styleDef;\n\n\tconst handleConversion = () => {\n\t\tconst newClassName = createClassName( `converted-class-` );\n\n\t\tif ( ! localStyleData ) {\n\t\t\tthrow new Error( 'Style definition is required for converting local class to global class.' );\n\t\t}\n\n\t\tconst newId = globalClassesStylesProvider.actions.create?.( newClassName, localStyleData.variants );\n\t\tif ( newId ) {\n\t\t\tprops.successCallback( newId );\n\t\t\ttrackGlobalClasses( {\n\t\t\t\tclassId: newId,\n\t\t\t\tevent: 'classCreated',\n\t\t\t\tsource: 'converted',\n\t\t\t\tclassTitle: newClassName,\n\t\t\t} );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<MenuListItem\n\t\t\t\tdisabled={ ! props.canConvert }\n\t\t\t\tonClick={ handleConversion }\n\t\t\t\tdense\n\t\t\t\tsx={ {\n\t\t\t\t\t'&.Mui-focusVisible': {\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tboxShadow: 'none !important',\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Convert to global class', 'elementor' ) }\n\t\t\t</MenuListItem>\n\t\t\t<Divider />\n\t\t</>\n\t);\n};\n\nfunction createClassName( prefix: string ): string {\n\tlet i = 1;\n\tlet newClassName = `${ prefix }${ i }`;\n\n\twhile ( ! validateStyleLabel( newClassName, 'create' ).isValid ) {\n\t\tnewClassName = `${ prefix }${ ++i }`;\n\t}\n\n\treturn newClassName;\n}\n","import { useEffect } from 'react';\nimport { __useDispatch as useDispatch } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { slice } from '../store';\n\nexport function PopulateStore() {\n\tconst dispatch = useDispatch();\n\n\tuseEffect( () => {\n\t\tPromise.all( [ apiClient.all( 'preview' ), apiClient.all( 'frontend' ) ] ).then(\n\t\t\t( [ previewRes, frontendRes ] ) => {\n\t\t\t\tconst { data: previewData } = previewRes;\n\t\t\t\tconst { data: frontendData } = frontendRes;\n\n\t\t\t\tdispatch(\n\t\t\t\t\tslice.actions.load( {\n\t\t\t\t\t\tpreview: {\n\t\t\t\t\t\t\titems: previewData.data,\n\t\t\t\t\t\t\torder: previewData.meta.order,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfrontend: {\n\t\t\t\t\t\t\titems: frontendData.data,\n\t\t\t\t\t\t\torder: frontendData.meta.order,\n\t\t\t\t\t\t},\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}, [ dispatch ] );\n\n\treturn null;\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { initClassesResource } from './classes-resource';\nimport initMcpApplyUnapplyGlobalClasses from './mcp-apply-unapply-global-classes';\nimport initMcpApplyGetGlobalClassUsages from './mcp-get-global-class-usages';\nimport { initManageGlobalClasses } from './mcp-manage-global-classes';\n\nexport const initMcpIntegration = () => {\n\tconst reg = getMCPByDomain( 'classes', {\n\t\tinstructions: 'MCP server for management of Elementor global classes',\n\t} );\n\tinitMcpApplyUnapplyGlobalClasses( reg );\n\tinitMcpApplyGetGlobalClassUsages( reg );\n\tinitManageGlobalClasses( reg );\n\tinitClassesResource();\n};\n","import { doApplyClasses, doGetAppliedClasses, doUnapplyClass } from '@elementor/editor-editing-panel';\nimport { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nexport default function initMcpApplyUnapplyGlobalClasses( server: MCPRegistryEntry ) {\n\tserver.addTool( {\n\t\tschema: {\n\t\t\tclassId: z.string().describe( 'The ID of the class to apply' ),\n\t\t\telementId: z.string().describe( 'The ID of the element to which the class will be applied' ),\n\t\t},\n\t\toutputSchema: {\n\t\t\tresult: z.string().describe( 'Result message indicating the success of the apply operation' ),\n\t\t},\n\t\tname: 'apply-global-class',\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.7,\n\t\t\tspeedPriority: 0.8,\n\t\t},\n\t\tdescription: `Apply a global class to an element, enabling consistent styling through your design system.\n\n## When to use this tool:\n**ALWAYS use this IMMEDIATELY AFTER building compositions** to apply the global classes you created beforehand:\n- After using \"build-compositions\" tool, apply semantic classes to the created elements\n- When applying consistent typography styles (heading-primary, text-body, etc.)\n- When applying theme colors or brand styles (bg-brand, button-cta, etc.)\n- When ensuring spacing consistency (spacing-section-large, etc.)\n\n**DO NOT use this tool** for:\n- Elements that don't share styles with other elements (use inline styles instead)\n- Layout-specific properties (those should remain inline in stylesConfig)\n\n## Prerequisites:\n- **REQUIRED**: Get the list of available global classes from 'elementor://global-classes' resource\n- **REQUIRED**: Get element IDs from the composition XML returned by \"build-compositions\" tool\n- Ensure you have the most up-to-date list of classes applied to the element to avoid duplicates\n- Make sure you have the correct class ID that you want to apply\n\n## Best Practices:\n1. Apply multiple classes to a single element if needed (typography + color + spacing)\n2. After applying, the tool will remind you to remove duplicate inline styles from elementConfig\n3. Classes should describe purpose, not implementation (e.g., \"heading-primary\" not \"big-red-text\")`,\n\t\thandler: async ( params ) => {\n\t\t\tconst { classId, elementId } = params;\n\t\t\tconst appliedClasses = doGetAppliedClasses( elementId );\n\t\t\tdoApplyClasses( elementId, [ ...appliedClasses, classId ] );\n\t\t\treturn {\n\t\t\t\tllm_instructions:\n\t\t\t\t\t'Please check the element-configuration, find DUPLICATES in the style schema that are in the class, and remove them',\n\t\t\t\tresult: `Class ${ classId } applied to element ${ elementId } successfully.`,\n\t\t\t};\n\t\t},\n\t} );\n\n\tserver.addTool( {\n\t\tname: 'unapply-global-class',\n\t\tschema: {\n\t\t\tclassId: z.string().describe( 'The ID of the class to unapply' ),\n\t\t\telementId: z.string().describe( 'The ID of the element from which the class will be unapplied' ),\n\t\t},\n\t\toutputSchema: {\n\t\t\tresult: z.string().describe( 'Result message indicating the success of the unapply operation' ),\n\t\t},\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.7,\n\t\t\tspeedPriority: 0.8,\n\t\t},\n\t\tdescription: `Unapply a (global) class from the current element\n\n## When to use this tool:\n- When a user requests to unapply a global class or a class from an element in the Elementor editor.\n- When you need to remove a specific class from an element's applied classes.\n\n## Prerequisites:\n- Ensure you have the most up-to-date list of classes applied to the element to avoid errors.\n The list is available at always up-to-date resource 'elementor://global-classes'.\n- Make sure you have the correct class ID that you want to unapply.\n\n<note>\nIf the user want to unapply a class by it's name and not ID, retreive the id from the list, available at uri elementor://global-classes\n</note>\n`,\n\t\thandler: async ( params ) => {\n\t\t\tconst { classId, elementId } = params;\n\t\t\tconst ok = doUnapplyClass( elementId, classId );\n\t\t\tif ( ! ok ) {\n\t\t\t\tthrow new Error( `Class ${ classId } is not applied to element ${ elementId }, cannot unapply it.` );\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tresult: `Class ${ classId } unapplied from element ${ elementId } successfully.`,\n\t\t\t};\n\t\t},\n\t} );\n}\n","import { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { type CssClassUsageContent, type EnhancedCssClassUsageContent } from '../components/css-class-usage/types';\n\nexport default function initMcpApplyGetGlobalClassUsages( reg: MCPRegistryEntry ) {\n\tconst { addTool } = reg;\n\tconst globalClassesUsageSchema = {\n\t\tusages: z.array(\n\t\t\tz.object( {\n\t\t\t\tclassId: z\n\t\t\t\t\t.string()\n\t\t\t\t\t.describe(\n\t\t\t\t\t\t'The ID of the class, not visible to the user. To retreive the name of the class, use the \"list-global-classes\" tool'\n\t\t\t\t\t),\n\t\t\t\tusages: z.array(\n\t\t\t\t\tz.object( {\n\t\t\t\t\t\tpageId: z.string().describe( 'The ID of the page where the class is used' ),\n\t\t\t\t\t\ttitle: z.string().describe( 'The title of the page where the class is used' ),\n\t\t\t\t\t\ttotal: z.number().describe( 'The number of times the class is used on this page' ),\n\t\t\t\t\t\telements: z.array( z.string() ).describe( 'List of element IDs using this class on the page' ),\n\t\t\t\t\t} )\n\t\t\t\t),\n\t\t\t} )\n\t\t),\n\t};\n\n\taddTool( {\n\t\tname: 'get-global-class-usages',\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.6,\n\t\t\tspeedPriority: 0.8,\n\t\t},\n\t\tdescription: `Retreive the usages of global-classes ACCROSS PAGES designed by Elementor editor.\n\n## Prequisites: CRITICAL\n- The list of global classes and their applid values is available at resource uri elementor://global-classes\n\n## When to use this tool:\n- When a user requests to see where a specific global class is being used accross the site.\n- When you need to manage or clean up unused global classes.\n- Before deleting a global class, to ensure it is not in use in any other pages.\n\n## When NOT to use this tool:\n- For getting the list of global classes, refer to the resource at uri elementor://global-classes\n`,\n\t\toutputSchema: globalClassesUsageSchema,\n\t\thandler: async () => {\n\t\t\tconst data = await fetchCssClassUsage();\n\t\t\tconst result = {\n\t\t\t\tusages: [] as z.infer< ( typeof globalClassesUsageSchema )[ 'usages' ] >,\n\t\t\t};\n\n\t\t\tObject.entries( data as unknown as EnhancedCssClassUsageContent ).forEach(\n\t\t\t\t( [ classId, usageDetails ] ) => {\n\t\t\t\t\tconst newEntry: ( typeof result )[ 'usages' ][ 0 ] = {\n\t\t\t\t\t\tclassId,\n\t\t\t\t\t\tusages: [],\n\t\t\t\t\t};\n\t\t\t\t\tif ( typeof usageDetails !== 'number' ) {\n\t\t\t\t\t\tconst { content } = usageDetails as unknown as { content: CssClassUsageContent[] };\n\t\t\t\t\t\tcontent.forEach( ( detail ) => {\n\t\t\t\t\t\t\tnewEntry.usages.push( {\n\t\t\t\t\t\t\t\tpageId: String( detail.pageId ),\n\t\t\t\t\t\t\t\ttitle: detail.title,\n\t\t\t\t\t\t\t\ttotal: detail.total,\n\t\t\t\t\t\t\t\telements: detail.elements,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tresult.usages.push( newEntry );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\n\t\t\treturn result;\n\t\t},\n\t} );\n}\n","import { BREAKPOINTS_SCHEMA_URI, STYLE_SCHEMA_URI } from '@elementor/editor-canvas';\nimport { type MCPRegistryEntry } from '@elementor/editor-mcp';\nimport { type Props, Schema } from '@elementor/editor-props';\nimport { type BreakpointId } from '@elementor/editor-responsive';\nimport { getStylesSchema } from '@elementor/editor-styles';\nimport { type StylesProvider } from '@elementor/editor-styles-repository';\nimport { type Utils as IUtils } from '@elementor/editor-variables';\nimport { z } from '@elementor/schema';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\nimport { saveGlobalClasses } from '../save-global-classes';\nimport { GLOBAL_CLASSES_URI } from './classes-resource';\n\n// TODO: see https://elementor.atlassian.net/browse/ED-22513 for better cross-module access\ntype XElementor = z.infer< z.ZodAny >;\n\nconst schema = {\n\taction: z.enum( [ 'create', 'modify', 'delete' ] ).describe( 'Operation to perform' ),\n\tclassId: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe( 'Global class ID (required for modify). Get from elementor://global-classes resource.' ),\n\tglobalClassName: z.string().optional().describe( 'Global class name (required for create)' ),\n\tprops: z\n\t\t.record( z.any() )\n\t\t.describe(\n\t\t\t'key-value of style-schema PropValues. Available properties at dynamic resource \"elementor://styles/schema/{property-name}\"'\n\t\t),\n\tbreakpoint: z\n\t\t.nullable( z.string().describe( 'Responsive breakpoint name for styles. Defaults to desktop (null).' ) )\n\t\t.default( null )\n\t\t.describe( 'Responsive breakpoint name for styles. Defaults to desktop (null).' ),\n};\n\nconst outputSchema = {\n\tstatus: z.enum( [ 'ok', 'error' ] ).describe( 'Operation status' ),\n\tclassId: z.string().optional().describe( 'Class ID (returned on create success)' ),\n\tmessage: z.string().optional().describe( 'Error details if status is error' ),\n};\n\ntype InputSchema = z.infer< ReturnType< typeof z.object< typeof schema > > >;\ntype OutputSchema = z.infer< ReturnType< typeof z.object< typeof outputSchema > > >;\n\nconst handler = async ( input: InputSchema ): Promise< OutputSchema > => {\n\tconst { action, classId, globalClassName, props, breakpoint } = input;\n\n\tif ( action === 'create' && ! globalClassName ) {\n\t\treturn {\n\t\t\tstatus: 'error',\n\t\t\tmessage: 'Create requires globalClassName',\n\t\t};\n\t}\n\n\tif ( action === 'modify' && ! classId ) {\n\t\treturn {\n\t\t\tstatus: 'error',\n\t\t\tmessage: 'Modify requires classId',\n\t\t};\n\t}\n\n\tif ( action === 'delete' && ! classId ) {\n\t\treturn {\n\t\t\tstatus: 'error',\n\t\t\tmessage: 'Delete requires classId',\n\t\t};\n\t}\n\n\tconst { create, update, delete: deleteClass } = globalClassesStylesProvider.actions;\n\tif ( ! create || ! update || ! deleteClass ) {\n\t\treturn {\n\t\t\tstatus: 'error',\n\t\t\tmessage: 'Required actions not available',\n\t\t};\n\t}\n\n\tconst errors: string[] = [];\n\tconst stylesSchema = getStylesSchema();\n\tconst validProps = Object.keys( stylesSchema );\n\n\tObject.keys( props ).forEach( ( key ) => {\n\t\tconst propType = stylesSchema[ key ];\n\t\tif ( ! propType ) {\n\t\t\terrors.push( `Property \"${ key }\" does not exist in styles schema.` );\n\t\t\treturn;\n\t\t}\n\t\tconst { valid, jsonSchema } = Schema.validatePropValue( propType, props[ key ] );\n\t\tif ( ! valid ) {\n\t\t\terrors.push( `- Property \"${ key }\" has invalid value\\n Expected schema: ${ jsonSchema }\\n` );\n\t\t}\n\t} );\n\n\tif ( errors.length > 0 ) {\n\t\treturn {\n\t\t\tstatus: 'error',\n\t\t\tmessage: `Validation errors:\\n${ errors.join( '\\n' ) }\\nAvailable Properties: ${ validProps.join(\n\t\t\t\t', '\n\t\t\t) }\\nUpdate your input and try again.`,\n\t\t};\n\t}\n\n\t// TODO: see https://elementor.atlassian.net/browse/ED-22513 for better cross-module access\n\tconst Utils = ( ( ( window as XElementor ).elementorV2 as XElementor ).editorVariables as XElementor )\n\t\t.Utils as typeof IUtils;\n\tObject.keys( props ).forEach( ( key ) => {\n\t\tprops[ key ] = Schema.adjustLlmPropValueSchema( props[ key ], {\n\t\t\ttransformers: Utils.globalVariablesLLMResolvers,\n\t\t} );\n\t} );\n\n\tconst breakpointValue = breakpoint ?? 'desktop';\n\n\ttry {\n\t\tswitch ( action ) {\n\t\t\tcase 'create':\n\t\t\t\tconst newClassId = await attemptCreate( {\n\t\t\t\t\tprops,\n\t\t\t\t\tclassName: globalClassName,\n\t\t\t\t\tstylesProvider: globalClassesStylesProvider,\n\t\t\t\t\tbreakpoint: breakpointValue as BreakpointId,\n\t\t\t\t} );\n\t\t\t\treturn newClassId\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tstatus: 'ok',\n\t\t\t\t\t\t\tmessage: `created global class with ID ${ newClassId }`,\n\t\t\t\t\t }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\t\tmessage: 'error creating class',\n\t\t\t\t\t };\n\t\t\tcase 'modify':\n\t\t\t\tconst updated = await attemptUpdate( {\n\t\t\t\t\tclassId,\n\t\t\t\t\tprops,\n\t\t\t\t\tstylesProvider: globalClassesStylesProvider,\n\t\t\t\t\tbreakpoint: breakpointValue as BreakpointId,\n\t\t\t\t} );\n\t\t\t\treturn updated\n\t\t\t\t\t? { status: 'ok', classId }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\t\tmessage: 'error modifying class',\n\t\t\t\t\t };\n\t\t\tcase 'delete':\n\t\t\t\tconst deleted = await attemptDelete( {\n\t\t\t\t\tclassId,\n\t\t\t\t\tstylesProvider: globalClassesStylesProvider,\n\t\t\t\t} );\n\t\t\t\treturn deleted\n\t\t\t\t\t? { status: 'ok', message: `deleted global class with ID ${ classId }` }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tstatus: 'error',\n\t\t\t\t\t\t\tmessage: 'error deleting class',\n\t\t\t\t\t };\n\t\t}\n\t} catch ( error ) {\n\t\treturn {\n\t\t\tstatus: 'error',\n\t\t\tmessage: `${ action } failed: ${ ( error as Error ).message || 'Unknown error' }`,\n\t\t};\n\t}\n};\n\nexport const initManageGlobalClasses = ( reg: MCPRegistryEntry ) => {\n\tconst { addTool } = reg;\n\n\taddTool( {\n\t\tname: 'manage-global-classes',\n\t\trequiredResources: [\n\t\t\t{ uri: GLOBAL_CLASSES_URI, description: 'Global classes list' },\n\t\t\t{ uri: STYLE_SCHEMA_URI, description: 'Style schema resources' },\n\t\t\t{ uri: BREAKPOINTS_SCHEMA_URI, description: 'Breakpoints list' },\n\t\t],\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.85,\n\t\t\tspeedPriority: 0.6,\n\t\t},\n\t\tdescription: `Manages global classes (create/modify) in Elementor editor. Check [elementor://global-classes] and style schemas first.\n\nCREATE: Requires globalClassName, props. Use semantic naming (heading-primary, button-cta, text-muted). Check existing classes to avoid duplicates. ALWAYS create global classes BEFORE compositions for reusable styles.\nMODIFY: Requires classId, props. Get classId from [elementor://global-classes] resource.\n\nNaming pattern: [element-type]-[purpose/variant]-[modifier]\nDO NOT create global classes for: one-off styles, layout-specific properties.\n\nUse style schema at [elementor://styles/schema/{category}] for valid props. Errors include exact schema mismatch details.`,\n\t\tschema,\n\t\toutputSchema,\n\t\thandler,\n\t} );\n};\n\ntype Opts = {\n\tstylesProvider: StylesProvider;\n\tclassName?: string;\n\tclassId?: string;\n\tbreakpoint: BreakpointId;\n\tprops: Props;\n};\n\nasync function attemptCreate( opts: Opts ) {\n\tconst { props, breakpoint, className, stylesProvider } = opts;\n\tconst { create, delete: deleteClass } = stylesProvider.actions;\n\tif ( ! className ) {\n\t\tthrow new Error( 'Global class name is a required for creation' );\n\t}\n\tif ( ! create || ! deleteClass ) {\n\t\tthrow new Error( 'User is unable to create global classes' );\n\t}\n\tconst newClassId = create( className, [\n\t\t{\n\t\t\tmeta: {\n\t\t\t\tbreakpoint,\n\t\t\t\tstate: null,\n\t\t\t},\n\t\t\tcustom_css: null,\n\t\t\tprops,\n\t\t},\n\t] );\n\ttry {\n\t\tawait saveGlobalClasses( { context: 'frontend' } );\n\t\treturn newClassId;\n\t} catch {\n\t\tdeleteClass( newClassId );\n\t\treturn null;\n\t}\n}\n\nasync function attemptUpdate( opts: Opts ) {\n\tconst { props, breakpoint, classId, stylesProvider } = opts;\n\tconst { updateProps, update } = stylesProvider.actions;\n\tif ( ! classId ) {\n\t\tthrow new Error( 'Class ID is required for modification' );\n\t}\n\tif ( ! updateProps || ! update ) {\n\t\tthrow new Error( 'User is unable to update global classes' );\n\t}\n\tconst snapshot = structuredClone( stylesProvider.actions.all() );\n\ttry {\n\t\tupdateProps( {\n\t\t\tid: classId,\n\t\t\tprops,\n\t\t\tmeta: {\n\t\t\t\tbreakpoint,\n\t\t\t\tstate: null,\n\t\t\t},\n\t\t} );\n\t\tawait saveGlobalClasses( { context: 'frontend' } );\n\t\treturn true;\n\t} catch {\n\t\tsnapshot.forEach( ( style ) => {\n\t\t\tupdate( {\n\t\t\t\tid: style.id,\n\t\t\t\tvariants: style.variants,\n\t\t\t} );\n\t\t} );\n\t\tawait saveGlobalClasses( { context: 'frontend' } );\n\t\treturn false;\n\t}\n}\n\nasync function attemptDelete( opts: Pick< Opts, 'classId' | 'stylesProvider' > ) {\n\tconst { classId, stylesProvider } = opts;\n\tconst { delete: deleteClass, create } = stylesProvider.actions;\n\tif ( ! classId ) {\n\t\tthrow new Error( 'Class ID is required for deletion' );\n\t}\n\tif ( ! deleteClass || ! create ) {\n\t\tthrow new Error( 'User is unable to delete global classes' );\n\t}\n\tconst snapshot = structuredClone( stylesProvider.actions.all() );\n\tconst targetClass = snapshot.find( ( style ) => style.id === classId );\n\tif ( ! targetClass ) {\n\t\tthrow new Error( `Class with ID \"${ classId }\" not found` );\n\t}\n\ttry {\n\t\tdeleteClass( classId );\n\t\tawait saveGlobalClasses( { context: 'frontend' } );\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n","import { useEffect } from 'react';\nimport { __privateListenTo as listenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';\n\nimport { usePanelActions } from './components/class-manager/class-manager-panel';\nimport { syncWithDocumentSave } from './sync-with-document-save';\n\nexport function SyncWithDocumentSave() {\n\tconst panelActions = usePanelActions();\n\n\tuseEffect( () => {\n\t\tlistenTo( v1ReadyEvent(), () => {\n\t\t\tsyncWithDocumentSave( panelActions );\n\t\t} );\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [] );\n\n\treturn null;\n}\n","import { getCurrentUser } from '@elementor/editor-current-user';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { UPDATE_CLASS_CAPABILITY_KEY } from './capabilities';\nimport { saveGlobalClasses } from './save-global-classes';\nimport { selectIsDirty } from './store';\n\nexport function syncWithDocumentSave( panelActions?: { open: () => void } ) {\n\tconst unsubscribe = syncDirtyState();\n\n\tbindSaveAction( panelActions );\n\n\treturn unsubscribe;\n}\n\nfunction syncDirtyState() {\n\treturn subscribeWithSelector( selectIsDirty, () => {\n\t\tif ( ! isDirty() ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetDocumentModifiedStatus( true );\n\t} );\n}\n\nfunction bindSaveAction( panelActions?: { open: () => void } ) {\n\tregisterDataHook( 'dependency', 'document/save/save', ( args ) => {\n\t\tconst user = getCurrentUser();\n\n\t\tconst canEdit = user?.capabilities.includes( UPDATE_CLASS_CAPABILITY_KEY );\n\n\t\tif ( ! canEdit ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tsaveGlobalClasses( {\n\t\t\tcontext: args.status === 'publish' ? 'frontend' : 'preview',\n\t\t\tonApprove: panelActions?.open,\n\t\t} );\n\n\t\treturn true;\n\t} );\n}\n\nfunction isDirty() {\n\treturn selectIsDirty( getState() );\n}\n"],"mappings":"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","names":["import_editor_styles","import_store","createSlice","id","context","createSelector","import_store","context","getState","getState","id","dispatch","subscribeWithSelector","import_editor_editing_panel","import_editor_panels","import_editor_styles_repository","import_store","React","import_editor_documents","import_editor_styles_repository","import_editor_ui","import_ui","import_i18n","React","import_react","import_editor_documents","import_editor_ui","import_editor_v1_adapters","import_icons","import_query","import_store","import_ui","import_i18n","import_store","useSelector","import_store","useSelector","import_react","import_utils","context","import_react","import_query","import_store","useActiveDocument","id","React","import_editor_ui","import_store","import_utils","React","import_i18n","context","getState","dispatch","id","React","import_ui","import_i18n","React","import_icons","import_ui","React","import_ui","import_i18n","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_ui","import_i18n","import_editor_documents","import_editor_v1_adapters","import_store","id","dispatch","runCommand","React","import_icons","React","import_react","import_store","import_ui","import_i18n","import_store","useSelector","React","import_react","import_editor_styles_repository","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_documents","import_editor_ui","import_icons","import_ui","import_i18n","id","useOpenDocumentInNewTab","React","import_editor_ui","import_icons","import_ui","import_i18n","id","CustomIconButton","React","import_react","import_editor_ui","import_ui","import_i18n","openDialog","closeDialog","id","React","import_icons","import_ui","id","id","openDialog","React","import_icons","import_ui","import_i18n","dispatch","useDispatch","handler","id","createPanel","isDirty","dispatch","useActiveDocument","useActiveDocumentActions","React","import_editor_styles_repository","import_editor_ui","import_ui","import_i18n","import_react","import_store","dispatch","useDispatch","import_editor_mcp","import_schema","import_editor_styles","import_schema","deleteClass","import_react","import_editor_v1_adapters","import_editor_current_user","import_editor_documents","import_editor_v1_adapters","import_store","subscribeWithSelector","getState","listenTo","registerSlice","registerPanel"]}
|