@elementor/editor-global-classes 0.20.5 → 0.21.0

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.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/components/class-manager/class-manager-button.tsx","../src/global-classes-styles-provider.ts","../src/capabilities.ts","../src/errors.ts","../src/store.ts","../src/components/class-manager/class-manager-panel.tsx","../src/hooks/use-dirty-state.ts","../src/save-global-classes.ts","../src/api.ts","../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-classes-order.ts","../src/hooks/use-ordered-classes.ts","../src/components/class-manager/delete-confirmation-dialog.tsx","../src/components/class-manager/sortable.tsx","../src/components/class-manager/panel-interactions.ts","../src/components/class-manager/save-changes-dialog.tsx","../src/components/populate-store.tsx","../src/sync-with-document-save.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoLogic } from '@elementor/editor';\nimport { injectIntoClassSelectorActions } from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __privateListenTo as listenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';\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 { PopulateStore } from './components/populate-store';\nimport { globalClassesStylesProvider } from './global-classes-styles-provider';\nimport { slice } from './store';\nimport { syncWithDocumentSave } from './sync-with-document-save';\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\tinjectIntoClassSelectorActions( {\n\t\tid: 'global-classes-manager-button',\n\t\tcomponent: ClassManagerButton,\n\t} );\n\n\tlistenTo( v1ReadyEvent(), () => {\n\t\tsyncWithDocumentSave();\n\t} );\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 { IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { globalClassesStylesProvider } from '../../global-classes-styles-provider';\nimport { usePanelActions } from './class-manager-panel';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { SaveChangesDialog, useDialog } from './save-changes-dialog';\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\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};\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},\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 { generateId } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\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 } from './errors';\nimport { selectClass, selectGlobalClasses, selectOrderedClasses, slice, type StateWithGlobalClasses } from './store';\n\nconst MAX_CLASSES = 50;\n\nexport const globalClassesStylesProvider = createStylesProvider( {\n\tkey: 'global-classes',\n\tpriority: 30,\n\tlimit: MAX_CLASSES,\n\tlabels: {\n\t\tsingular: __( 'class', 'elementor' ),\n\t\tplural: __( 'classes', 'elementor' ),\n\t},\n\tsubscribe: ( cb ) => subscribeWithSelector( ( state: StateWithGlobalClasses ) => state.globalClasses, cb ),\n\tcapabilities: getCapabilities(),\n\tactions: {\n\t\tall: () => selectOrderedClasses( getState() ),\n\t\tget: ( id ) => selectClass( getState(), id ),\n\t\tresolveCssName: ( id: string ) => {\n\t\t\tif ( ! isExperimentActive( 'e_v_3_30' ) ) {\n\t\t\t\treturn id;\n\t\t\t}\n\n\t\t\treturn selectClass( getState(), id )?.label ?? id;\n\t\t},\n\t\tcreate: ( label ) => {\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},\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';\nconst 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","import { mergeProps, type Props } from '@elementor/editor-props';\nimport {\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';\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\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\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\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\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\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\tupdateProps(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload,\n\t\t\t}: PayloadAction< { id: StyleDefinitionID; meta: StyleDefinitionVariant[ 'meta' ]; props: Props } >\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\tconst variant = getVariantByMeta( style, payload.meta );\n\n\t\t\tif ( variant ) {\n\t\t\t\tvariant.props = mergeProps( variant.props, payload.props );\n\n\t\t\t\tif ( Object.keys( variant.props ).length === 0 ) {\n\t\t\t\t\t// If the props object is empty after merging, we remove the variant.\n\t\t\t\t\tstyle.variants = style.variants.filter( ( v ) => v !== variant );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstyle.variants.push( { meta: payload.meta, props: payload.props } );\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\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\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","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 { ThemeProvider } from '@elementor/editor-ui';\nimport { changeEditMode } from '@elementor/editor-v1-adapters';\nimport { XIcon } from '@elementor/icons';\nimport { useMutation } from '@elementor/query';\nimport { Alert, Box, Button, ErrorBoundary, IconButton, type IconButtonProps, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useDirtyState } from '../../hooks/use-dirty-state';\nimport { saveGlobalClasses } from '../../save-global-classes';\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';\nimport { SaveChangesDialog, useDialog } from './save-changes-dialog';\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} );\n\nexport function ClassManagerPanel() {\n\tconst isDirty = useDirtyState();\n\n\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst { mutateAsync: publish, isPending: isPublishing } = usePublish();\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<PanelHeader>\n\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<PanelHeaderTitle sx={ { display: 'flex', alignItems: 'center', gap: 0.5 } }>\n\t\t\t\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t{ __( 'Class Manager', 'elementor' ) }\n\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\tdisabled={ isPublishing }\n\t\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\t\tif ( isDirty ) {\n\t\t\t\t\t\t\t\t\t\topenSaveChangesDialog();\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\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</Stack>\n\t\t\t\t\t</PanelHeader>\n\t\t\t\t\t<PanelBody px={ 2 }>\n\t\t\t\t\t\t<GlobalClassesList disabled={ isPublishing } />\n\t\t\t\t\t</PanelBody>\n\t\t\t\t\t<PanelFooter>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\tonClick={ publish }\n\t\t\t\t\t\t\tdisabled={ ! isDirty }\n\t\t\t\t\t\t\tloading={ isPublishing }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</PanelFooter>\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<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>\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\tcancel: {\n\t\t\t\t\t\t\t\tlabel: __( 'Cancel', '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 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","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectIsDirty } from '../store';\n\nexport const useDirtyState = () => {\n\treturn useSelector( selectIsDirty );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient, type ApiContext } from './api';\nimport { type GlobalClasses, selectData, selectFrontendInitialData, selectPreviewInitialData, slice } from './store';\n\ntype Options = {\n\tcontext: ApiContext;\n};\n\nexport async function saveGlobalClasses( { context }: Options ) {\n\tconst state = selectData( getState() );\n\n\tif ( context === 'preview' ) {\n\t\tawait apiClient.saveDraft( {\n\t\t\titems: state.items,\n\t\t\torder: state.order,\n\t\t\tchanges: calculateChanges( state, selectPreviewInitialData( getState() ) ),\n\t\t} );\n\t} else {\n\t\tawait apiClient.publish( {\n\t\t\titems: state.items,\n\t\t\torder: state.order,\n\t\t\tchanges: calculateChanges( state, selectFrontendInitialData( getState() ) ),\n\t\t} );\n\t}\n\n\tdispatch( slice.actions.reset( { context } ) );\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\ntype UnknownObject = Record< string, unknown >;\n\n// Inspired by:\n// https://github.com/TanStack/query/blob/66ea5f2fc/packages/query-core/src/utils.ts#L212\nfunction hash( obj: UnknownObject ): string {\n\treturn JSON.stringify( obj, ( _, value ) =>\n\t\tisPlainObject( value )\n\t\t\t? Object.keys( value )\n\t\t\t\t\t.sort()\n\t\t\t\t\t.reduce< UnknownObject >( ( result, key ) => {\n\t\t\t\t\t\tresult[ key ] = value[ key ];\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} )\n\t\t\t: value\n\t);\n}\n\nfunction isPlainObject( value: unknown ): value is UnknownObject {\n\treturn !! value && typeof value === 'object' && ! Array.isArray( value );\n}\n","import { type StyleDefinition, type StyleDefinitionID, type StyleDefinitionsMap } from '@elementor/editor-styles';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type GlobalClasses } from './store';\n\nconst RESOURCE_URL = '/global-classes';\n\nexport type GlobalClassesGetAllResponse = HttpResponse< StyleDefinitionsMap, { order: StyleDefinition[ 'id' ][] } >;\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\tall: ( context: ApiContext = 'preview' ) =>\n\t\thttpService().get< GlobalClassesGetAllResponse >( 'elementor/v1' + 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","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';\n\nlet isDeleted = false;\n\nexport const deleteClass = ( id: string ) => {\n\tdispatch( slice.actions.delete( id ) );\n\n\tisDeleted = true;\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 { useRef } from 'react';\nimport { type StyleDefinitionID } from '@elementor/editor-styles';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { EditableField, EllipsisWithTooltip, MenuListItem, useEditable, WarningInfotip } from '@elementor/editor-ui';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport { __useDispatch as useDispatch } from '@elementor/store';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tList,\n\tListItemButton,\n\ttype ListItemButtonProps,\n\tMenu,\n\tStack,\n\tstyled,\n\ttype Theme,\n\tTooltip,\n\tTypography,\n\ttype TypographyProps,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useOrderedClasses } from '../../hooks/use-ordered-classes';\nimport { slice } from '../../store';\nimport { DeleteConfirmationProvider, useDeleteConfirmation } from './delete-confirmation-dialog';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { SortableItem, SortableProvider, SortableTrigger, type SortableTriggerProps } from './sortable';\n\nexport const GlobalClassesList = ( { disabled }: { disabled?: boolean } ) => {\n\tconst cssClasses = useOrderedClasses();\n\tconst dispatch = useDispatch();\n\n\tconst [ classesOrder, reorderClasses ] = useReorder();\n\n\tif ( ! cssClasses?.length ) {\n\t\treturn <EmptyState />;\n\t}\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 value={ classesOrder } onChange={ reorderClasses }>\n\t\t\t\t\t{ cssClasses?.map( ( { id, label } ) => {\n\t\t\t\t\t\tconst renameClass = ( newLabel: string ) => {\n\t\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\t\tslice.actions.update( {\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\tlabel: newLabel,\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};\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SortableItem key={ id } id={ id }>\n\t\t\t\t\t\t\t\t{ ( { isDragged, isDragPlaceholder, triggerProps, triggerStyle } ) => (\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={ renameClass }\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={ { ...triggerProps, style: triggerStyle } }\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</SortableItem>\n\t\t\t\t\t\t);\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 useReorder = () => {\n\tconst dispatch = useDispatch();\n\tconst order = useClassesOrder();\n\n\tconst reorder = ( newIds: StyleDefinitionID[] ) => {\n\t\tdispatch( slice.actions.setOrder( newIds ) );\n\t};\n\n\treturn [ order, reorder ] as const;\n};\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} >;\n\nconst ClassItem = ( { id, label, renameClass, selected, disabled, sortableTriggerProps }: ClassItemProps ) => {\n\tconst itemRef = useRef< HTMLElement >( null );\n\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\n\tconst { openDialog } = useDeleteConfirmation();\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst isSelected = ( 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\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<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\n// Custom styles for sortable list item, until the component is available in the UI package.\nconst StyledListItemButton = styled( ListItemButton, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'showActions' ].includes( prop ),\n} )< ListItemButtonProps & { showActions: boolean } >(\n\t( { showActions } ) => `\n\tmin-height: 36px;\n\n\t&.visible-class-item {\n\t\tbox-shadow: none !important;\n\t}\n\n\t.class-item-more-actions, .class-item-sortable-trigger {\n\t\tvisibility: ${ showActions ? 'visible' : 'hidden' };\n\t}\n\n\t.class-item-sortable-trigger {\n\t\tvisibility: ${ showActions ? 'visible' : 'hidden' };\n\t}\n\n\t&:hover&:not(:disabled) {\n\t\t.class-item-more-actions, .class-item-sortable-trigger {\n\t\t\tvisibility: visible;\n\t\t}\n\t}\n`\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 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 { __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 { selectOrderedClasses } from '../store';\n\nexport const useOrderedClasses = () => {\n\treturn useSelector( selectOrderedClasses );\n};\n","import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { AlertOctagonFilledIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogContentText,\n\tDialogTitle,\n\tTypography,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { deleteClass } from './delete-class';\n\ntype DeleteConfirmationDialogProps = Pick< StyleDefinition, 'id' | 'label' >;\n\ntype DeleteConfirmationContext = {\n\topenDialog: ( props: DeleteConfirmationDialogProps ) => void;\n\tcloseDialog: () => void;\n\tdialogProps: DeleteConfirmationDialogProps | null;\n};\n\nconst context = createContext< DeleteConfirmationContext | null >( null );\n\nexport const DeleteConfirmationProvider = ( { children }: React.PropsWithChildren ) => {\n\tconst [ dialogProps, setDialogProps ] = useState< DeleteConfirmationDialogProps | null >( null );\n\n\tconst openDialog = ( props: DeleteConfirmationDialogProps ) => {\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 && <DeleteConfirmationDialog { ...dialogProps } /> }\n\t\t</context.Provider>\n\t);\n};\n\nconst TITLE_ID = 'delete-class-dialog';\n\nconst DeleteConfirmationDialog = ( { label, id }: DeleteConfirmationDialogProps ) => {\n\tconst { closeDialog } = useDeleteConfirmation();\n\n\tconst onConfirm = () => {\n\t\tdeleteClass( id );\n\n\t\tcloseDialog();\n\t};\n\n\treturn (\n\t\t<Dialog open onClose={ closeDialog } aria-labelledby={ TITLE_ID } maxWidth=\"xs\">\n\t\t\t<DialogTitle id={ TITLE_ID } display=\"flex\" alignItems=\"center\" gap={ 1 } sx={ { lineHeight: 1 } }>\n\t\t\t\t<AlertOctagonFilledIcon color=\"error\" />\n\t\t\t\t{ __( 'Delete this class?', 'elementor' ) }\n\t\t\t</DialogTitle>\n\t\t\t<DialogContent>\n\t\t\t\t<DialogContentText variant=\"body2\" color=\"textPrimary\">\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&nbsp;{ label }&nbsp;\n\t\t\t\t\t</Typography>\n\t\t\t\t\t{ __(\n\t\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\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t</DialogContentText>\n\t\t\t</DialogContent>\n\t\t\t<DialogActions>\n\t\t\t\t<Button color=\"secondary\" onClick={ closeDialog }>\n\t\t\t\t\t{ __( 'Not now', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"contained\" color=\"error\" onClick={ onConfirm }>\n\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</DialogActions>\n\t\t</Dialog>\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\">\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","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 { useState } from 'react';\nimport { AlertTriangleFilledIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogContentText,\n\ttype DialogContentTextProps,\n\ttype DialogProps,\n\tDialogTitle,\n} from '@elementor/ui';\n\nconst TITLE_ID = 'save-changes-dialog';\n\nconst SaveChangesDialog = ( { children, onClose }: Pick< DialogProps, 'children' | 'onClose' > ) => (\n\t<Dialog open onClose={ onClose } aria-labelledby={ TITLE_ID } maxWidth=\"xs\">\n\t\t{ children }\n\t</Dialog>\n);\n\nconst SaveChangesDialogTitle = ( { children }: React.PropsWithChildren ) => (\n\t<DialogTitle id={ TITLE_ID } display=\"flex\" alignItems=\"center\" gap={ 1 } sx={ { lineHeight: 1 } }>\n\t\t<AlertTriangleFilledIcon color=\"secondary\" />\n\t\t{ children }\n\t</DialogTitle>\n);\n\nconst SaveChangesDialogContent = ( { children }: React.PropsWithChildren ) => (\n\t<DialogContent>{ children }</DialogContent>\n);\n\nconst SaveChangesDialogContentText = ( props: DialogContentTextProps ) => (\n\t<DialogContentText variant=\"body2\" color=\"textPrimary\" display=\"flex\" flexDirection=\"column\" { ...props } />\n);\n\ntype Action = {\n\tlabel: string;\n\taction: () => void | Promise< void >;\n};\n\ntype ConfirmationDialogActionsProps = {\n\tactions: {\n\t\tcancel: Action;\n\t\tconfirm: Action;\n\t};\n};\nconst SaveChangesDialogActions = ( { actions }: ConfirmationDialogActionsProps ) => {\n\tconst [ isConfirming, setIsConfirming ] = useState( false );\n\tconst { cancel, confirm } = actions;\n\n\tconst onConfirm = async () => {\n\t\tsetIsConfirming( true );\n\t\tawait confirm.action();\n\t\tsetIsConfirming( false );\n\t};\n\treturn (\n\t\t<DialogActions>\n\t\t\t<Button variant=\"text\" color=\"secondary\" onClick={ cancel.action }>\n\t\t\t\t{ cancel.label }\n\t\t\t</Button>\n\t\t\t<Button variant=\"contained\" color=\"secondary\" onClick={ onConfirm } loading={ isConfirming }>\n\t\t\t\t{ confirm.label }\n\t\t\t</Button>\n\t\t</DialogActions>\n\t);\n};\n\nSaveChangesDialog.Title = SaveChangesDialogTitle;\nSaveChangesDialog.Content = SaveChangesDialogContent;\nSaveChangesDialog.ContentText = SaveChangesDialogContentText;\nSaveChangesDialog.Actions = SaveChangesDialogActions;\n\nconst useDialog = () => {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\n\tconst open = () => setIsOpen( true );\n\tconst close = () => setIsOpen( false );\n\n\treturn { isOpen, open, close };\n};\n\nexport { SaveChangesDialog, useDialog };\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 { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { saveGlobalClasses } from './save-global-classes';\nimport { selectIsDirty } from './store';\n\nexport function syncWithDocumentSave() {\n\tconst unsubscribe = syncDirtyState();\n\n\tbindSaveAction();\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() {\n\tregisterDataHook( 'after', 'document/save/save', ( args ) => {\n\t\treturn saveGlobalClasses( {\n\t\t\tcontext: args.status === 'publish' ? 'frontend' : 'preview',\n\t\t} );\n\t} );\n}\n\nfunction isDirty() {\n\treturn selectIsDirty( getState() );\n}\n"],"mappings":"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","names":["import_editor_panels","import_editor_styles_repository","import_editor_v1_adapters","import_store","React","import_editor_documents","import_editor_styles_repository","import_ui","import_i18n","import_editor_styles","import_editor_v1_adapters","import_store","createSlice","id","context","createSelector","subscribeWithSelector","getState","id","dispatch","React","import_react","import_editor_documents","import_editor_ui","import_editor_v1_adapters","import_icons","import_ui","import_i18n","import_store","useSelector","import_store","context","context","getState","dispatch","id","import_i18n","import_editor_v1_adapters","import_store","id","dispatch","runCommand","React","React","import_react","import_editor_styles_repository","import_editor_ui","import_icons","import_store","import_ui","import_i18n","import_store","useSelector","import_store","useSelector","React","import_react","import_icons","import_ui","import_i18n","id","React","import_icons","import_ui","id","dispatch","useDispatch","id","React","import_react","import_icons","import_ui","TITLE_ID","createPanel","isDirty","useActiveDocument","useActiveDocumentActions","import_react","import_store","dispatch","useDispatch","import_editor_documents","import_editor_v1_adapters","import_store","subscribeWithSelector","getState","registerSlice","registerPanel","listenTo"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/components/class-manager/class-manager-button.tsx","../src/global-classes-styles-provider.ts","../src/capabilities.ts","../src/errors.ts","../src/store.ts","../src/utils/snapshot-history.ts","../src/components/class-manager/class-manager-panel.tsx","../src/hooks/use-dirty-state.ts","../src/save-global-classes.ts","../src/api.ts","../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-classes-order.ts","../src/hooks/use-ordered-classes.ts","../src/components/class-manager/delete-confirmation-dialog.tsx","../src/components/class-manager/sortable.tsx","../src/components/class-manager/panel-interactions.ts","../src/components/class-manager/save-changes-dialog.tsx","../src/components/populate-store.tsx","../src/sync-with-document-save.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoLogic } from '@elementor/editor';\nimport { injectIntoClassSelectorActions, registerStyleProviderToColors } from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __privateListenTo as listenTo, v1ReadyEvent } from '@elementor/editor-v1-adapters';\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 { PopulateStore } from './components/populate-store';\nimport { GLOBAL_CLASSES_PROVIDER_KEY, globalClassesStylesProvider } from './global-classes-styles-provider';\nimport { slice } from './store';\nimport { syncWithDocumentSave } from './sync-with-document-save';\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\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\tlistenTo( v1ReadyEvent(), () => {\n\t\tsyncWithDocumentSave();\n\t} );\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 { IconButton, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { globalClassesStylesProvider } from '../../global-classes-styles-provider';\nimport { usePanelActions } from './class-manager-panel';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { SaveChangesDialog, useDialog } from './save-changes-dialog';\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\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};\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},\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 { generateId } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\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 } from './errors';\nimport { selectClass, selectGlobalClasses, selectOrderedClasses, slice, type StateWithGlobalClasses } from './store';\n\nconst MAX_CLASSES = 50;\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 ) => subscribeWithSelector( ( state: StateWithGlobalClasses ) => state.globalClasses, cb ),\n\tcapabilities: getCapabilities(),\n\tactions: {\n\t\tall: () => selectOrderedClasses( getState() ),\n\t\tget: ( id ) => selectClass( getState(), id ),\n\t\tresolveCssName: ( id: string ) => {\n\t\t\tif ( ! isExperimentActive( 'e_v_3_30' ) ) {\n\t\t\t\treturn id;\n\t\t\t}\n\n\t\t\treturn selectClass( getState(), id )?.label ?? id;\n\t\t},\n\t\tcreate: ( label ) => {\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},\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';\nconst 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","import { mergeProps, type Props } from '@elementor/editor-props';\nimport {\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\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\tupdateProps(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload,\n\t\t\t}: PayloadAction< { id: StyleDefinitionID; meta: StyleDefinitionVariant[ 'meta' ]; props: Props } >\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\t\t\tlocalHistory.next( state.data );\n\n\t\t\tconst variant = getVariantByMeta( style, payload.meta );\n\n\t\t\tif ( variant ) {\n\t\t\t\tvariant.props = mergeProps( variant.props, payload.props );\n\n\t\t\t\tif ( Object.keys( variant.props ).length === 0 ) {\n\t\t\t\t\t// If the props object is empty after merging, we remove the variant.\n\t\t\t\t\tstyle.variants = style.variants.filter( ( v ) => v !== variant );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tstyle.variants.push( { meta: payload.meta, props: payload.props } );\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\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","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 * 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 { ThemeProvider } 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\tDialogHeader,\n\tErrorBoundary,\n\tIconButton,\n\ttype IconButtonProps,\n\tStack,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useDirtyState } from '../../hooks/use-dirty-state';\nimport { saveGlobalClasses } from '../../save-global-classes';\nimport { slice } from '../../store';\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';\nimport { SaveChangesDialog, useDialog } from './save-changes-dialog';\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} );\n\nexport function ClassManagerPanel() {\n\tconst isDirty = useDirtyState();\n\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<PanelHeader>\n\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<PanelHeaderTitle sx={ { display: 'flex', alignItems: 'center', gap: 0.5 } }>\n\t\t\t\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t{ __( 'Class Manager', 'elementor' ) }\n\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\tdisabled={ isPublishing }\n\t\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\t\tif ( isDirty ) {\n\t\t\t\t\t\t\t\t\t\topenSaveChangesDialog();\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\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</Stack>\n\t\t\t\t\t</PanelHeader>\n\t\t\t\t\t<PanelBody px={ 2 }>\n\t\t\t\t\t\t<GlobalClassesList disabled={ isPublishing } />\n\t\t\t\t\t</PanelBody>\n\t\t\t\t\t<PanelFooter>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\tonClick={ publish }\n\t\t\t\t\t\t\tdisabled={ ! isDirty }\n\t\t\t\t\t\t\tloading={ isPublishing }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</PanelFooter>\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","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectIsDirty } from '../store';\n\nexport const useDirtyState = () => {\n\treturn useSelector( selectIsDirty );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient, type ApiContext } from './api';\nimport { type GlobalClasses, selectData, selectFrontendInitialData, selectPreviewInitialData, slice } from './store';\n\ntype Options = {\n\tcontext: ApiContext;\n};\n\nexport async function saveGlobalClasses( { context }: Options ) {\n\tconst state = selectData( getState() );\n\n\tif ( context === 'preview' ) {\n\t\tawait apiClient.saveDraft( {\n\t\t\titems: state.items,\n\t\t\torder: state.order,\n\t\t\tchanges: calculateChanges( state, selectPreviewInitialData( getState() ) ),\n\t\t} );\n\t} else {\n\t\tawait apiClient.publish( {\n\t\t\titems: state.items,\n\t\t\torder: state.order,\n\t\t\tchanges: calculateChanges( state, selectFrontendInitialData( getState() ) ),\n\t\t} );\n\t}\n\n\tdispatch( slice.actions.reset( { context } ) );\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\ntype UnknownObject = Record< string, unknown >;\n\n// Inspired by:\n// https://github.com/TanStack/query/blob/66ea5f2fc/packages/query-core/src/utils.ts#L212\nfunction hash( obj: UnknownObject ): string {\n\treturn JSON.stringify( obj, ( _, value ) =>\n\t\tisPlainObject( value )\n\t\t\t? Object.keys( value )\n\t\t\t\t\t.sort()\n\t\t\t\t\t.reduce< UnknownObject >( ( result, key ) => {\n\t\t\t\t\t\tresult[ key ] = value[ key ];\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}, {} )\n\t\t\t: value\n\t);\n}\n\nfunction isPlainObject( value: unknown ): value is UnknownObject {\n\treturn !! value && typeof value === 'object' && ! Array.isArray( value );\n}\n","import { type StyleDefinition, type StyleDefinitionID, type StyleDefinitionsMap } from '@elementor/editor-styles';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type GlobalClasses } from './store';\n\nconst RESOURCE_URL = '/global-classes';\n\nexport type GlobalClassesGetAllResponse = HttpResponse< StyleDefinitionsMap, { order: StyleDefinition[ 'id' ][] } >;\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\tall: ( context: ApiContext = 'preview' ) =>\n\t\thttpService().get< GlobalClassesGetAllResponse >( 'elementor/v1' + 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","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';\n\nlet isDeleted = false;\n\nexport const deleteClass = ( id: string ) => {\n\tdispatch( slice.actions.delete( id ) );\n\n\tisDeleted = true;\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, useRef } from 'react';\nimport { type StyleDefinitionID } from '@elementor/editor-styles';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { EditableField, EllipsisWithTooltip, MenuListItem, useEditable, WarningInfotip } from '@elementor/editor-ui';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport { __useDispatch as useDispatch } from '@elementor/store';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tList,\n\tListItemButton,\n\ttype ListItemButtonProps,\n\tMenu,\n\tStack,\n\tstyled,\n\ttype Theme,\n\tTooltip,\n\tTypography,\n\ttype TypographyProps,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useOrderedClasses } from '../../hooks/use-ordered-classes';\nimport { slice } from '../../store';\nimport { DeleteConfirmationProvider, useDeleteConfirmation } from './delete-confirmation-dialog';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { SortableItem, SortableProvider, SortableTrigger, type SortableTriggerProps } from './sortable';\n\nexport const GlobalClassesList = ( { disabled }: { disabled?: boolean } ) => {\n\tconst cssClasses = useOrderedClasses();\n\tconst dispatch = useDispatch();\n\n\tconst [ classesOrder, reorderClasses ] = useReorder();\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\treturn (\n\t\t<DeleteConfirmationProvider>\n\t\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 0.5 } }>\n\t\t\t\t<SortableProvider value={ classesOrder } onChange={ reorderClasses }>\n\t\t\t\t\t{ cssClasses?.map( ( { id, label } ) => {\n\t\t\t\t\t\tconst renameClass = ( newLabel: string ) => {\n\t\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\t\tslice.actions.update( {\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\tlabel: newLabel,\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};\n\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<SortableItem key={ id } id={ id }>\n\t\t\t\t\t\t\t\t{ ( { isDragged, isDragPlaceholder, triggerProps, triggerStyle } ) => (\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={ renameClass }\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={ { ...triggerProps, style: triggerStyle } }\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</SortableItem>\n\t\t\t\t\t\t);\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 useReorder = () => {\n\tconst dispatch = useDispatch();\n\tconst order = useClassesOrder();\n\n\tconst reorder = ( newIds: StyleDefinitionID[] ) => {\n\t\tdispatch( slice.actions.setOrder( newIds ) );\n\t};\n\n\treturn [ order, reorder ] as const;\n};\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} >;\n\nconst ClassItem = ( { id, label, renameClass, selected, disabled, sortableTriggerProps }: ClassItemProps ) => {\n\tconst itemRef = useRef< HTMLElement >( null );\n\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\n\tconst { openDialog } = useDeleteConfirmation();\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst isSelected = ( 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\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<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\n// Custom styles for sortable list item, until the component is available in the UI package.\nconst StyledListItemButton = styled( ListItemButton, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'showActions' ].includes( prop ),\n} )< ListItemButtonProps & { showActions: boolean } >(\n\t( { showActions } ) => `\n\tmin-height: 36px;\n\n\t&.visible-class-item {\n\t\tbox-shadow: none !important;\n\t}\n\n\t.class-item-more-actions, .class-item-sortable-trigger {\n\t\tvisibility: ${ showActions ? 'visible' : 'hidden' };\n\t}\n\n\t.class-item-sortable-trigger {\n\t\tvisibility: ${ showActions ? 'visible' : 'hidden' };\n\t}\n\n\t&:hover&:not(:disabled) {\n\t\t.class-item-more-actions, .class-item-sortable-trigger {\n\t\t\tvisibility: visible;\n\t\t}\n\t}\n`\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 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 { __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 { selectOrderedClasses } from '../store';\n\nexport const useOrderedClasses = () => {\n\treturn useSelector( selectOrderedClasses );\n};\n","import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { AlertOctagonFilledIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogContentText,\n\tDialogTitle,\n\tTypography,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { deleteClass } from './delete-class';\n\ntype DeleteConfirmationDialogProps = Pick< StyleDefinition, 'id' | 'label' >;\n\ntype DeleteConfirmationContext = {\n\topenDialog: ( props: DeleteConfirmationDialogProps ) => void;\n\tcloseDialog: () => void;\n\tdialogProps: DeleteConfirmationDialogProps | null;\n};\n\nconst context = createContext< DeleteConfirmationContext | null >( null );\n\nexport const DeleteConfirmationProvider = ( { children }: React.PropsWithChildren ) => {\n\tconst [ dialogProps, setDialogProps ] = useState< DeleteConfirmationDialogProps | null >( null );\n\n\tconst openDialog = ( props: DeleteConfirmationDialogProps ) => {\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 && <DeleteConfirmationDialog { ...dialogProps } /> }\n\t\t</context.Provider>\n\t);\n};\n\nconst TITLE_ID = 'delete-class-dialog';\n\nconst DeleteConfirmationDialog = ( { label, id }: DeleteConfirmationDialogProps ) => {\n\tconst { closeDialog } = useDeleteConfirmation();\n\n\tconst onConfirm = () => {\n\t\tdeleteClass( id );\n\n\t\tcloseDialog();\n\t};\n\n\treturn (\n\t\t<Dialog open onClose={ closeDialog } aria-labelledby={ TITLE_ID } maxWidth=\"xs\">\n\t\t\t<DialogTitle id={ TITLE_ID } display=\"flex\" alignItems=\"center\" gap={ 1 } sx={ { lineHeight: 1 } }>\n\t\t\t\t<AlertOctagonFilledIcon color=\"error\" />\n\t\t\t\t{ __( 'Delete this class?', 'elementor' ) }\n\t\t\t</DialogTitle>\n\t\t\t<DialogContent>\n\t\t\t\t<DialogContentText variant=\"body2\" color=\"textPrimary\">\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&nbsp;{ label }&nbsp;\n\t\t\t\t\t</Typography>\n\t\t\t\t\t{ __(\n\t\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\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t</DialogContentText>\n\t\t\t</DialogContent>\n\t\t\t<DialogActions>\n\t\t\t\t<Button color=\"secondary\" onClick={ closeDialog }>\n\t\t\t\t\t{ __( 'Not now', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"contained\" color=\"error\" onClick={ onConfirm }>\n\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</DialogActions>\n\t\t</Dialog>\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\">\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","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 { useState } from 'react';\nimport { AlertTriangleFilledIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogContentText,\n\ttype DialogContentTextProps,\n\ttype DialogProps,\n\tDialogTitle,\n} from '@elementor/ui';\n\nconst TITLE_ID = 'save-changes-dialog';\n\nconst SaveChangesDialog = ( { children, onClose }: Pick< DialogProps, 'children' | 'onClose' > ) => (\n\t<Dialog open onClose={ onClose } aria-labelledby={ TITLE_ID } maxWidth=\"xs\">\n\t\t{ children }\n\t</Dialog>\n);\n\nconst SaveChangesDialogTitle = ( { children }: React.PropsWithChildren ) => (\n\t<DialogTitle id={ TITLE_ID } display=\"flex\" alignItems=\"center\" gap={ 1 } sx={ { lineHeight: 1 } }>\n\t\t<AlertTriangleFilledIcon color=\"secondary\" />\n\t\t{ children }\n\t</DialogTitle>\n);\n\nconst SaveChangesDialogContent = ( { children }: React.PropsWithChildren ) => (\n\t<DialogContent>{ children }</DialogContent>\n);\n\nconst SaveChangesDialogContentText = ( props: DialogContentTextProps ) => (\n\t<DialogContentText variant=\"body2\" color=\"textPrimary\" display=\"flex\" flexDirection=\"column\" { ...props } />\n);\n\ntype Action = {\n\tlabel: string;\n\taction: () => void | Promise< void >;\n};\n\ntype ConfirmationDialogActionsProps = {\n\tactions: {\n\t\tcancel?: Action;\n\t\tconfirm: Action;\n\t\tdiscard?: Action;\n\t};\n};\nconst SaveChangesDialogActions = ( { actions }: ConfirmationDialogActionsProps ) => {\n\tconst [ isConfirming, setIsConfirming ] = useState( false );\n\tconst { cancel, confirm, discard } = actions;\n\n\tconst onConfirm = async () => {\n\t\tsetIsConfirming( true );\n\t\tawait confirm.action();\n\t\tsetIsConfirming( false );\n\t};\n\treturn (\n\t\t<DialogActions>\n\t\t\t{ cancel && (\n\t\t\t\t<Button variant=\"text\" color=\"secondary\" onClick={ cancel.action }>\n\t\t\t\t\t{ cancel.label }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t\t{ discard && (\n\t\t\t\t<Button variant=\"text\" color=\"secondary\" onClick={ discard.action }>\n\t\t\t\t\t{ discard.label }\n\t\t\t\t</Button>\n\t\t\t) }\n\t\t\t<Button variant=\"contained\" color=\"secondary\" onClick={ onConfirm } loading={ isConfirming }>\n\t\t\t\t{ confirm.label }\n\t\t\t</Button>\n\t\t</DialogActions>\n\t);\n};\n\nSaveChangesDialog.Title = SaveChangesDialogTitle;\nSaveChangesDialog.Content = SaveChangesDialogContent;\nSaveChangesDialog.ContentText = SaveChangesDialogContentText;\nSaveChangesDialog.Actions = SaveChangesDialogActions;\n\nconst useDialog = () => {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\n\tconst open = () => setIsOpen( true );\n\tconst close = () => setIsOpen( false );\n\n\treturn { isOpen, open, close };\n};\n\nexport { SaveChangesDialog, useDialog };\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 { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { saveGlobalClasses } from './save-global-classes';\nimport { selectIsDirty } from './store';\n\nexport function syncWithDocumentSave() {\n\tconst unsubscribe = syncDirtyState();\n\n\tbindSaveAction();\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() {\n\tregisterDataHook( 'after', 'document/save/save', ( args ) => {\n\t\treturn saveGlobalClasses( {\n\t\t\tcontext: args.status === 'publish' ? 'frontend' : 'preview',\n\t\t} );\n\t} );\n}\n\nfunction isDirty() {\n\treturn selectIsDirty( getState() );\n}\n"],"mappings":"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","names":["import_editor_panels","import_editor_styles_repository","import_editor_v1_adapters","import_store","React","import_editor_documents","import_editor_styles_repository","import_ui","import_i18n","import_editor_styles","import_editor_v1_adapters","import_store","createSlice","id","context","createSelector","subscribeWithSelector","getState","id","dispatch","React","import_react","import_editor_documents","import_editor_ui","import_editor_v1_adapters","import_icons","import_store","import_ui","import_i18n","import_store","useSelector","import_store","context","context","getState","dispatch","id","import_i18n","import_editor_v1_adapters","import_store","id","dispatch","runCommand","React","React","import_react","import_editor_styles_repository","import_editor_ui","import_icons","import_store","import_ui","import_i18n","import_store","useSelector","import_store","useSelector","React","import_react","import_icons","import_ui","import_i18n","id","React","import_icons","import_ui","id","dispatch","useDispatch","id","React","import_react","import_icons","import_ui","TITLE_ID","createPanel","isDirty","dispatch","useActiveDocument","useActiveDocumentActions","import_react","import_store","dispatch","useDispatch","import_editor_documents","import_editor_v1_adapters","import_store","subscribeWithSelector","getState","registerSlice","registerPanel","listenTo"]}