@elementor/editor-global-classes 3.33.0-114 → 3.33.0-116
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.d.mts +10 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -0
- package/package.json +15 -15
- package/src/index.ts +1 -0
package/dist/index.d.mts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { SxProps, Theme } from '@elementor/ui';
|
|
3
|
+
|
|
1
4
|
declare function init(): void;
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
type ClearIconButtonProps = {
|
|
7
|
+
tooltipText: React.ReactNode;
|
|
8
|
+
sx?: SxProps<Theme>;
|
|
9
|
+
};
|
|
10
|
+
declare const ClearIconButton: ({ tooltipText, sx }: ClearIconButtonProps) => React.JSX.Element;
|
|
11
|
+
|
|
12
|
+
export { ClearIconButton, init };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { SxProps, Theme } from '@elementor/ui';
|
|
3
|
+
|
|
1
4
|
declare function init(): void;
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
type ClearIconButtonProps = {
|
|
7
|
+
tooltipText: React.ReactNode;
|
|
8
|
+
sx?: SxProps<Theme>;
|
|
9
|
+
};
|
|
10
|
+
declare const ClearIconButton: ({ tooltipText, sx }: ClearIconButtonProps) => React.JSX.Element;
|
|
11
|
+
|
|
12
|
+
export { ClearIconButton, init };
|
package/dist/index.js
CHANGED
|
@@ -30,6 +30,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
|
+
ClearIconButton: () => ClearIconButton,
|
|
33
34
|
init: () => init
|
|
34
35
|
});
|
|
35
36
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -2002,6 +2003,7 @@ function init() {
|
|
|
2002
2003
|
}
|
|
2003
2004
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2004
2005
|
0 && (module.exports = {
|
|
2006
|
+
ClearIconButton,
|
|
2005
2007
|
init
|
|
2006
2008
|
});
|
|
2007
2009
|
//# sourceMappingURL=index.js.map
|
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/utils/snapshot-history.ts","../src/hooks/use-prefetch-css-class-usage.ts","../src/api.ts","../src/components/css-class-usage/utils.ts","../service/css-class-usage-service.ts","../src/components/css-class-usage/types.ts","../src/components/class-manager/class-manager-panel.tsx","../src/hooks/use-classes-order.ts","../src/hooks/use-dirty-state.ts","../src/hooks/use-filters.ts","../src/components/search-and-filter/context.tsx","../src/hooks/use-filtered-css-class-usage.tsx","../src/hooks/use-css-class-usage.ts","../src/hooks/use-empty-css-class.ts","../src/save-global-classes.ts","../src/components/search-and-filter/components/filter/active-filters.tsx","../src/components/search-and-filter/components/filter/clear-icon-button.tsx","../src/components/search-and-filter/components/filter/filter-list.tsx","../src/components/search-and-filter/components/filter/css-class-filter.tsx","../src/components/search-and-filter/components/search/class-manager-search.tsx","../src/components/class-manager/class-manager-introduction.tsx","../src/components/class-manager/delete-class.ts","../src/components/class-manager/flipped-color-swatch-icon.tsx","../src/components/class-manager/global-classes-list.tsx","../src/hooks/use-ordered-classes.ts","../src/components/class-manager/class-item.tsx","../src/components/css-class-usage/components/css-class-usage-popover.tsx","../src/hooks/use-css-class-usage-by-id.ts","../src/components/css-class-usage/components/css-class-usage-trigger.tsx","../src/components/class-manager/delete-confirmation-dialog.tsx","../src/components/class-manager/sortable.tsx","../src/components/class-manager/not-found.tsx","../src/components/class-manager/panel-interactions.ts","../src/components/class-manager/save-changes-dialog.tsx","../src/components/convert-local-class-to-global-class.tsx","../src/components/populate-store.tsx","../src/sync-with-document-save.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoLogic } from '@elementor/editor';\nimport {\n\tinjectIntoClassSelectorActions,\n\tinjectIntoCssClassConvert,\n\tregisterStyleProviderToColors,\n} from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __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 { ConvertLocalClassToGlobalClass } from './components/convert-local-class-to-global-class';\nimport { PopulateStore } from './components/populate-store';\nimport { GLOBAL_CLASSES_PROVIDER_KEY, globalClassesStylesProvider } from './global-classes-styles-provider';\nimport { 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\tinjectIntoCssClassConvert( {\n\t\tid: 'global-classes-convert-from-local-class',\n\t\tcomponent: ConvertLocalClassToGlobalClass,\n\t} );\n\n\tinjectIntoClassSelectorActions( {\n\t\tid: 'global-classes-manager-button',\n\t\tcomponent: ClassManagerButton,\n\t} );\n\n\tregisterStyleProviderToColors( GLOBAL_CLASSES_PROVIDER_KEY, {\n\t\tname: 'global',\n\t\tgetThemeColor: ( theme ) => theme.palette.global.dark,\n\t} );\n\n\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 { usePrefetchCssClassUsage } from '../../hooks/use-prefetch-css-class-usage';\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\tconst { prefetchClassesUsage } = usePrefetchCssClassUsage();\n\n\tconst { userCan } = useUserStylesCapability();\n\n\tconst isUserAllowedToUpdateClass = userCan( globalClassesStylesProvider.getKey() ).update;\n\n\tif ( ! isUserAllowedToUpdateClass ) {\n\t\treturn null;\n\t}\n\n\tconst handleOpenPanel = () => {\n\t\tif ( document?.isDirty ) {\n\t\t\topenSaveChangesDialog();\n\t\t\treturn;\n\t\t}\n\n\t\topenPanel();\n\t\tprefetchClassesUsage();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip title={ __( 'Class Manager', 'elementor' ) } placement=\"top\">\n\t\t\t\t<IconButton size=\"tiny\" onClick={ handleOpenPanel } sx={ { marginInlineEnd: -0.75 } }>\n\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<SaveChangesDialog.Title>{ __( 'You have unsaved changes', 'elementor' ) }</SaveChangesDialog.Title>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText sx={ { mb: 2 } }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\"To open the Class Manager, save your page first. You can't continue without saving.\",\n\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tcancel: {\n\t\t\t\t\t\t\t\tlabel: __( 'Stay here', 'elementor' ),\n\t\t\t\t\t\t\t\taction: closeSaveChangesDialog,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tawait saveDocument();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\topenPanel();\n\t\t\t\t\t\t\t\t\tprefetchClassesUsage();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</>\n\t);\n};\n","import { generateId, type StyleDefinition, type StyleDefinitionVariant } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\nimport {\n\t__dispatch as dispatch,\n\t__getState as getState,\n\t__subscribeWithSelector as subscribeWithSelector,\n} from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { getCapabilities } from './capabilities';\nimport { GlobalClassLabelAlreadyExistsError } from './errors';\nimport {\n\tselectClass,\n\tselectData,\n\tselectGlobalClasses,\n\tselectOrderedClasses,\n\tslice,\n\ttype StateWithGlobalClasses,\n} 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 ) => subscribeWithStates( 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\treturn selectClass( getState(), id )?.label ?? id;\n\t\t},\n\t\tcreate: ( label, variants: StyleDefinitionVariant[] = [] ) => {\n\t\t\tconst classes = selectGlobalClasses( getState() );\n\n\t\t\tconst existingLabels = Object.values( classes ).map( ( style ) => style.label );\n\n\t\t\tif ( existingLabels.includes( label ) ) {\n\t\t\t\tthrow new GlobalClassLabelAlreadyExistsError( { context: { label } } );\n\t\t\t}\n\n\t\t\tconst existingIds = Object.keys( classes );\n\t\t\tconst id = generateId( 'g-', existingIds );\n\n\t\t\tdispatch(\n\t\t\t\tslice.actions.add( {\n\t\t\t\t\tid,\n\t\t\t\t\ttype: 'class',\n\t\t\t\t\tlabel,\n\t\t\t\t\tvariants,\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\treturn id;\n\t\t},\n\t\tupdate: ( payload ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.update( {\n\t\t\t\t\tstyle: payload,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tdelete: ( id ) => {\n\t\t\tdispatch( slice.actions.delete( id ) );\n\t\t},\n\t\tupdateProps: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tprops: args.props,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tupdateCustomCss: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tcustom_css: args.custom_css,\n\t\t\t\t\tprops: {},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t},\n} );\n\nconst subscribeWithStates = (\n\tcb: ( previous: Record< string, StyleDefinition >, current: Record< string, StyleDefinition > ) => void\n) => {\n\tlet previousState = selectData( getState() );\n\n\treturn subscribeWithSelector(\n\t\t( state: StateWithGlobalClasses ) => state.globalClasses,\n\t\t( currentState ) => {\n\t\t\tcb( previousState.items, currentState.data.items );\n\t\t\tpreviousState = currentState.data;\n\t\t}\n\t);\n};\n","import { type UserCapabilities } from '@elementor/editor-styles-repository';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nconst EXPERIMENT_KEY = 'global_classes_should_enforce_capabilities';\nexport const UPDATE_CLASS_CAPABILITY_KEY = 'elementor_global_classes_update_class';\n\nexport const getCapabilities = (): UserCapabilities | undefined => {\n\tconst shouldEnforceCapabilities = isExperimentActive( EXPERIMENT_KEY );\n\n\tif ( shouldEnforceCapabilities ) {\n\t\treturn {\n\t\t\tupdate: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tcreate: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tdelete: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tupdateProps: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t};\n\t}\n};\n","import { createError } from '@elementor/utils';\n\nexport const GlobalClassNotFoundError = createError< { styleId: string } >( {\n\tcode: 'global_class_not_found',\n\tmessage: 'Global class not found.',\n} );\n\nexport const GlobalClassLabelAlreadyExistsError = createError< { label: string } >( {\n\tcode: 'global_class_label_already_exists',\n\tmessage: 'Class with this name already exists.',\n} );\n","import { mergeProps, type Props } from '@elementor/editor-props';\nimport {\n\ttype CustomCss,\n\tgetVariantByMeta,\n\ttype StyleDefinition,\n\ttype StyleDefinitionID,\n\ttype StyleDefinitionVariant,\n} from '@elementor/editor-styles';\nimport { type UpdateActionPayload } from '@elementor/editor-styles-repository';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport type { ApiContext } from './api';\nimport { GlobalClassNotFoundError } from './errors';\nimport { SnapshotHistory } from './utils/snapshot-history';\n\nexport type GlobalClasses = {\n\titems: Record< StyleDefinitionID, StyleDefinition >;\n\torder: StyleDefinitionID[];\n};\n\ntype GlobalClassesState = {\n\tdata: GlobalClasses;\n\tinitialData: {\n\t\tfrontend: GlobalClasses;\n\t\tpreview: GlobalClasses;\n\t};\n\tisDirty: boolean;\n};\n\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< {\n\t\t\t\tid: StyleDefinitionID;\n\t\t\t\tmeta: StyleDefinitionVariant[ 'meta' ];\n\t\t\t\tprops: Props;\n\t\t\t\tcustom_css?: CustomCss | null;\n\t\t\t} >\n\t\t) {\n\t\t\tconst style = state.data.items[ payload.id ];\n\n\t\t\tif ( ! style ) {\n\t\t\t\tthrow new GlobalClassNotFoundError( { context: { styleId: payload.id } } );\n\t\t\t}\n\n\t\t\tlocalHistory.next( state.data );\n\n\t\t\tconst variant = getVariantByMeta( style, payload.meta );\n\t\t\tlet customCss = ( 'custom_css' in payload ? payload.custom_css : variant?.custom_css ) ?? null;\n\t\t\tcustomCss = customCss?.raw ? customCss : null;\n\n\t\t\tif ( variant ) {\n\t\t\t\tvariant.props = mergeProps( variant.props, payload.props );\n\t\t\t\tvariant.custom_css = customCss;\n\n\t\t\t\tstyle.variants = getNonEmptyVariants( style );\n\t\t\t} else {\n\t\t\t\tstyle.variants.push( { meta: payload.meta, props: payload.props, custom_css: customCss } );\n\t\t\t}\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\treset( state, { payload: { context } }: PayloadAction< { context: ApiContext } > ) {\n\t\t\tif ( context === 'frontend' ) {\n\t\t\t\tlocalHistory.reset();\n\t\t\t\tstate.initialData.frontend = state.data;\n\n\t\t\t\tstate.isDirty = false;\n\t\t\t}\n\n\t\t\tstate.initialData.preview = state.data;\n\t\t},\n\n\t\tundo( state ) {\n\t\t\tif ( localHistory.isLast() ) {\n\t\t\t\tlocalHistory.next( state.data ); // store current before undo\n\t\t\t}\n\t\t\tconst data = localHistory.prev();\n\t\t\tif ( data ) {\n\t\t\t\tstate.data = data;\n\t\t\t\tstate.isDirty = true;\n\t\t\t} else {\n\t\t\t\tstate.data = state.initialData.preview;\n\t\t\t}\n\t\t},\n\n\t\tresetToInitialState( state, { payload: { context } }: PayloadAction< { context: ApiContext } > ) {\n\t\t\tlocalHistory.reset();\n\t\t\tstate.data = state.initialData[ context ];\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tredo( state ) {\n\t\t\tconst data = localHistory.next();\n\t\t\tif ( localHistory.isLast() ) {\n\t\t\t\tlocalHistory.prev();\n\t\t\t}\n\t\t\tif ( data ) {\n\t\t\t\tstate.data = data;\n\t\t\t\tstate.isDirty = true;\n\t\t\t}\n\t\t},\n\t},\n} );\n\nconst getNonEmptyVariants = ( style: StyleDefinition ) => {\n\treturn style.variants.filter(\n\t\t( { props, custom_css: customCss }: StyleDefinitionVariant ) => Object.keys( props ).length || customCss?.raw\n\t);\n};\n\n// Selectors\nexport const selectData = ( state: SliceState< typeof slice > ) => state[ SLICE_NAME ].data;\n\nexport const selectFrontendInitialData = ( state: SliceState< typeof slice > ) =>\n\tstate[ SLICE_NAME ].initialData.frontend;\n\nexport const selectPreviewInitialData = ( state: SliceState< typeof slice > ) =>\n\tstate[ SLICE_NAME ].initialData.preview;\n\nexport const selectOrder = createSelector( selectData, ( { order } ) => order );\n\nexport const selectGlobalClasses = createSelector( selectData, ( { items } ) => items );\n\nexport const selectIsDirty = ( state: SliceState< typeof slice > ) => state[ SLICE_NAME ].isDirty;\n\nexport const selectOrderedClasses = createSelector( selectGlobalClasses, selectOrder, ( items, order ) =>\n\torder.map( ( id ) => items[ id ] )\n);\n\nexport const selectClass = ( state: SliceState< typeof slice >, id: StyleDefinitionID ) =>\n\tstate[ SLICE_NAME ].data.items[ id ] ?? null;\n\nexport const selectEmptyCssClass = createSelector( selectData, ( { items } ) =>\n\tObject.values( items ).filter( ( cssClass ) => cssClass.variants.length === 0 )\n);\n","type Link< T > = {\n\tprev: Link< T > | null;\n\tnext: Link< T > | null;\n\tvalue: T;\n};\n\nfunction createLink< T >( { value, next, prev }: { value: T; prev?: Link< T >; next?: Link< T > } ): Link< T > {\n\treturn {\n\t\tvalue,\n\t\tprev: prev || null,\n\t\tnext: next || null,\n\t};\n}\n\nexport class SnapshotHistory< T > {\n\tprivate static registry: Record< string, SnapshotHistory< unknown > > = {};\n\n\tpublic static get< K >( namespace: string ): SnapshotHistory< K > {\n\t\tif ( ! SnapshotHistory.registry[ namespace ] ) {\n\t\t\tSnapshotHistory.registry[ namespace ] = new SnapshotHistory( namespace );\n\t\t}\n\t\treturn SnapshotHistory.registry[ namespace ] as SnapshotHistory< K >;\n\t}\n\n\tprivate first: Link< T > | null = null;\n\tprivate current: Link< T > | null = null;\n\n\tprivate constructor( public readonly namespace: string ) {}\n\n\tprivate transform( item: T ): T {\n\t\treturn JSON.parse( JSON.stringify( item ) );\n\t}\n\n\tpublic reset(): void {\n\t\tthis.first = this.current = null;\n\t}\n\n\tpublic prev(): T | null {\n\t\tif ( ! this.current || this.current === this.first ) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.current = this.current.prev;\n\t\treturn this.current?.value || null;\n\t}\n\n\tpublic isLast(): boolean {\n\t\treturn ! this.current || ! this.current.next;\n\t}\n\n\tpublic next( value?: T ): T | null {\n\t\tif ( value ) {\n\t\t\tif ( ! this.current ) {\n\t\t\t\tthis.first = createLink( { value: this.transform( value ) } );\n\t\t\t\tthis.current = this.first;\n\t\t\t\treturn this.current.value;\n\t\t\t}\n\t\t\tconst nextLink = createLink( {\n\t\t\t\tvalue: this.transform( value ),\n\t\t\t\tprev: this.current,\n\t\t\t} );\n\t\t\tthis.current.next = nextLink;\n\t\t\tthis.current = nextLink;\n\t\t\treturn this.current.value;\n\t\t}\n\n\t\t// No value skip to next without setting any\n\t\tif ( ! this.current || ! this.current.next ) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.current = this.current.next;\n\t\treturn this.current.value;\n\t}\n}\n","import { useQueryClient } from '@elementor/query';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { QUERY_KEY } from '../components/css-class-usage/types';\n\nexport function usePrefetchCssClassUsage() {\n\tconst queryClient = useQueryClient();\n\n\tconst prefetchClassesUsage = () =>\n\t\tqueryClient.prefetchQuery( {\n\t\t\tqueryKey: [ QUERY_KEY ],\n\t\t\tqueryFn: fetchCssClassUsage,\n\t\t} );\n\n\treturn { prefetchClassesUsage };\n}\n","import { type StyleDefinition, type StyleDefinitionID, type StyleDefinitionsMap } from '@elementor/editor-styles';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type CssClassUsage } from './components/css-class-usage/types';\nimport { type GlobalClasses } from './store';\n\nconst RESOURCE_URL = '/global-classes';\nconst BASE_URL = 'elementor/v1';\nconst RESOURCE_USAGE_URL = `${ RESOURCE_URL }/usage`;\n\ntype GlobalClassesUsageResponse = HttpResponse< CssClassUsage >;\n\nexport type GlobalClassesGetAllResponse = HttpResponse<\n\tStyleDefinitionsMap,\n\t{\n\t\torder: StyleDefinition[ 'id' ][];\n\t}\n>;\n\ntype UpdatePayload = GlobalClasses & {\n\tchanges: {\n\t\tadded: StyleDefinitionID[];\n\t\tdeleted: StyleDefinitionID[];\n\t\tmodified: StyleDefinitionID[];\n\t};\n};\n\nexport type ApiContext = 'preview' | 'frontend';\n\nexport const apiClient = {\n\tusage: () => httpService().get< GlobalClassesUsageResponse >( `${ BASE_URL }${ RESOURCE_USAGE_URL }` ),\n\n\tall: ( context: ApiContext = 'preview' ) =>\n\t\thttpService().get< GlobalClassesGetAllResponse >( `${ BASE_URL }${ RESOURCE_URL }`, {\n\t\t\tparams: { context },\n\t\t} ),\n\n\tpublish: ( payload: UpdatePayload ) =>\n\t\thttpService().put( 'elementor/v1' + RESOURCE_URL, payload, {\n\t\t\tparams: {\n\t\t\t\tcontext: 'frontend' satisfies ApiContext,\n\t\t\t},\n\t\t} ),\n\n\tsaveDraft: ( payload: UpdatePayload ) =>\n\t\thttpService().put( 'elementor/v1' + RESOURCE_URL, payload, {\n\t\t\tparams: {\n\t\t\t\tcontext: 'preview' satisfies ApiContext,\n\t\t\t},\n\t\t} ),\n};\n","import type { CssClassUsage, EnhancedCssClassUsage } from './types';\n\nexport const transformData = ( data: CssClassUsage ): EnhancedCssClassUsage =>\n\tObject.entries( data ).reduce< EnhancedCssClassUsage >( ( acc, [ key, value ] ) => {\n\t\tacc[ key ] = {\n\t\t\tcontent: value || [],\n\t\t\ttotal: value.reduce( ( total, val ) => total + ( val?.total || 0 ), 0 ),\n\t\t};\n\t\treturn acc;\n\t}, {} );\n","import { apiClient } from '../src/api';\nimport type { EnhancedCssClassUsage } from '../src/components/css-class-usage/types';\nimport { transformData } from '../src/components/css-class-usage/utils';\n\nexport const fetchCssClassUsage = async (): Promise< EnhancedCssClassUsage > => {\n\tconst response = await apiClient.usage();\n\treturn transformData( response.data.data );\n};\n","export const QUERY_KEY = 'css-classes-usage';\n\nexport type CssClassID = string;\n\nexport type ContentType = 'header' | 'footer' | 'wp-page' | 'wp-post' | 'popup';\n\nexport type CssClassUsageContent = {\n\telements: string[];\n\tpageId: string;\n\ttotal: number;\n\ttitle: string;\n\ttype: ContentType;\n};\n\nexport type CssClassUsage = Record< CssClassID, Array< CssClassUsageContent > >;\n\nexport type EnhancedCssClassUsageContent = { content: Array< CssClassUsageContent >; total: number };\n\nexport type EnhancedCssClassUsage = Record< CssClassID, EnhancedCssClassUsageContent >;\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport {\n\t__createPanel as createPanel,\n\tPanel,\n\tPanelBody,\n\tPanelFooter,\n\tPanelHeader,\n\tPanelHeaderTitle,\n} from '@elementor/editor-panels';\nimport { 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\tChip,\n\tDialogHeader,\n\tDivider,\n\tErrorBoundary,\n\tIconButton,\n\ttype IconButtonProps,\n\tStack,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useDirtyState } from '../../hooks/use-dirty-state';\nimport { useFilters } from '../../hooks/use-filters';\nimport { saveGlobalClasses } from '../../save-global-classes';\nimport { slice } from '../../store';\nimport { ActiveFilters } from '../search-and-filter/components/filter/active-filters';\nimport { CssClassFilter } from '../search-and-filter/components/filter/css-class-filter';\nimport { ClassManagerSearch } from '../search-and-filter/components/search/class-manager-search';\nimport { SearchAndFilterProvider } from '../search-and-filter/context';\nimport { ClassManagerIntroduction } from './class-manager-introduction';\nimport { hasDeletedItems, onDelete } from './delete-class';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { GlobalClassesList } from './global-classes-list';\nimport { blockPanelInteractions, unblockPanelInteractions } from './panel-interactions';\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\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst { mutateAsync: publish, isPending: isPublishing } = usePublish();\n\n\tconst resetAndClosePanel = () => {\n\t\tdispatch( slice.actions.resetToInitialState( { context: 'frontend' } ) );\n\t\tcloseSaveChangesDialog();\n\t};\n\n\tusePreventUnload();\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<ErrorBoundary fallback={ <ErrorBoundaryFallback /> }>\n\t\t\t\t<Panel>\n\t\t\t\t\t<SearchAndFilterProvider>\n\t\t\t\t\t\t<PanelHeader>\n\t\t\t\t\t\t\t<Stack p={ 1 } pl={ 2 } width=\"100%\" direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t\t\t<Stack width=\"100%\" direction=\"row\" gap={ 1 }>\n\t\t\t\t\t\t\t\t\t<PanelHeaderTitle sx={ { display: 'flex', alignItems: 'center', gap: 0.5 } }>\n\t\t\t\t\t\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Class Manager', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t\t\t<TotalCssClassCounter />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\t\tdisabled={ isPublishing }\n\t\t\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\t\t\tif ( isDirty ) {\n\t\t\t\t\t\t\t\t\t\t\topenSaveChangesDialog();\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</PanelHeader>\n\t\t\t\t\t\t<PanelBody\n\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Box px={ 2 } pb={ 1 }>\n\t\t\t\t\t\t\t\t<Stack direction=\"row\" justifyContent=\"spaceBetween\" gap={ 0.5 } sx={ { pb: 0.5 } }>\n\t\t\t\t\t\t\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t\t\t\t\t\t\t<ClassManagerSearch />\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t<CssClassFilter />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<ActiveFilters />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Divider />\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tpx={ 2 }\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GlobalClassesList disabled={ isPublishing } />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</PanelBody>\n\n\t\t\t\t\t\t<PanelFooter>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\t\tonClick={ publish }\n\t\t\t\t\t\t\t\tdisabled={ ! isDirty }\n\t\t\t\t\t\t\t\tloading={ isPublishing }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</PanelFooter>\n\t\t\t\t\t</SearchAndFilterProvider>\n\t\t\t\t</Panel>\n\t\t\t</ErrorBoundary>\n\t\t\t<ClassManagerIntroduction />\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<DialogHeader onClose={ closeSaveChangesDialog } logo={ false }>\n\t\t\t\t\t\t<SaveChangesDialog.Title>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.Title>\n\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes in the Class Manager.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'To avoid losing your updates, save your changes before leaving.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tdiscard: {\n\t\t\t\t\t\t\t\tlabel: __( 'Discard', 'elementor' ),\n\t\t\t\t\t\t\t\taction: () => {\n\t\t\t\t\t\t\t\t\tresetAndClosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tawait publish();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</ThemeProvider>\n\t);\n}\n\nconst CloseButton = ( { onClose, ...props }: IconButtonProps & { onClose: () => void } ) => (\n\t<IconButton size=\"small\" color=\"secondary\" onClick={ onClose } aria-label=\"Close\" { ...props }>\n\t\t<XIcon fontSize=\"small\" />\n\t</IconButton>\n);\n\nconst ErrorBoundaryFallback = () => (\n\t<Box role=\"alert\" sx={ { minHeight: '100%', p: 2 } }>\n\t\t<Alert severity=\"error\" sx={ { mb: 2, maxWidth: 400, textAlign: 'center' } }>\n\t\t\t<strong>{ __( 'Something went wrong', 'elementor' ) }</strong>\n\t\t</Alert>\n\t</Box>\n);\n\nconst usePreventUnload = () => {\n\tconst isDirty = useDirtyState();\n\n\tuseEffect( () => {\n\t\tconst handleBeforeUnload = ( event: BeforeUnloadEvent ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener( 'beforeunload', handleBeforeUnload );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'beforeunload', handleBeforeUnload );\n\t\t};\n\t}, [ isDirty ] );\n};\n\nconst usePublish = () => {\n\treturn useMutation( {\n\t\tmutationFn: () => saveGlobalClasses( { context: 'frontend' } ),\n\t\tonSuccess: async () => {\n\t\t\tsetDocumentModifiedStatus( false );\n\n\t\t\tif ( hasDeletedItems() ) {\n\t\t\t\tawait onDelete();\n\t\t\t}\n\t\t},\n\t} );\n};\n\nconst TotalCssClassCounter = () => {\n\tconst filters = useFilters();\n\tconst cssClasses = useClassesOrder();\n\n\treturn (\n\t\t<Chip\n\t\t\tsize={ 'small' }\n\t\t\tlabel={ filters ? `${ filters.length } / ${ cssClasses?.length }` : cssClasses?.length }\n\t\t/>\n\t);\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectOrder } from '../store';\n\nexport const useClassesOrder = () => {\n\treturn useSelector( selectOrder );\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectIsDirty } from '../store';\n\nexport const useDirtyState = () => {\n\treturn useSelector( selectIsDirty );\n};\n","import { useMemo } from 'react';\n\nimport { useSearchAndFilters } from '../components/search-and-filter/context';\nimport { type FilterKey, useFilteredCssClassUsage } from './use-filtered-css-class-usage';\n\nexport const useFilters = () => {\n\tconst {\n\t\tfilters: { filters },\n\t} = useSearchAndFilters();\n\tconst allFilters = useFilteredCssClassUsage();\n\n\treturn useMemo( () => {\n\t\tconst activeEntries = Object.entries( filters ).filter( ( [ , isActive ] ) => isActive ) as [\n\t\t\tFilterKey,\n\t\t\ttrue,\n\t\t][];\n\n\t\tif ( activeEntries.length === 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn activeEntries.reduce< string[] >( ( acc, [ key ], index ) => {\n\t\t\tconst current = allFilters[ key ] || [];\n\t\t\tif ( index === 0 ) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn acc.filter( ( val ) => current.includes( val ) );\n\t\t}, [] );\n\t}, [ filters, allFilters ] );\n};\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { useDebounceState } from '@elementor/utils';\n\nexport type CheckedFilters = {\n\tempty: boolean;\n\tonThisPage: boolean;\n\tunused: boolean;\n};\n\ntype SearchContextType = {\n\tdebouncedValue: string;\n\tinputValue: string;\n\thandleChange: ( value: string ) => void;\n\tonClearSearch: () => void;\n};\ntype FilterAndSortContextType = {\n\tfilters: CheckedFilters;\n\tsetFilters: React.Dispatch< React.SetStateAction< CheckedFilters > >;\n\tonClearFilter: () => void;\n};\n\nexport type SearchAndFilterContextType = {\n\tsearch: SearchContextType;\n\tfilters: FilterAndSortContextType;\n};\n\nconst SearchAndFilterContext = createContext< SearchAndFilterContextType | undefined >( undefined );\n\nconst INIT_CHECKED_FILTERS: CheckedFilters = {\n\tempty: false,\n\tonThisPage: false,\n\tunused: false,\n};\n\nexport const SearchAndFilterProvider = ( { children }: React.PropsWithChildren ) => {\n\tconst [ filters, setFilters ] = React.useState< CheckedFilters >( INIT_CHECKED_FILTERS );\n\tconst { debouncedValue, inputValue, handleChange } = useDebounceState( {\n\t\tdelay: 300,\n\t\tinitialValue: '',\n\t} );\n\n\tconst onClearSearch = () => {\n\t\thandleChange( '' );\n\t};\n\n\tconst onClearFilter = () => {\n\t\tsetFilters( INIT_CHECKED_FILTERS );\n\t};\n\n\treturn (\n\t\t<SearchAndFilterContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tsearch: {\n\t\t\t\t\tdebouncedValue,\n\t\t\t\t\tinputValue,\n\t\t\t\t\thandleChange,\n\t\t\t\t\tonClearSearch,\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\tfilters,\n\t\t\t\t\tsetFilters,\n\t\t\t\t\tonClearFilter,\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</SearchAndFilterContext.Provider>\n\t);\n};\n\nexport const useSearchAndFilters = () => {\n\tconst context = useContext( SearchAndFilterContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useSearchContext must be used within a SearchContextProvider' );\n\t}\n\treturn context;\n};\n","import { useMemo } from 'react';\nimport { __useActiveDocument as useActiveDocument } from '@elementor/editor-documents';\n\nimport { type CssClassUsageContent, type EnhancedCssClassUsage } from '../components/css-class-usage/types';\nimport { useCssClassUsage } from './use-css-class-usage';\nimport { useAllCssClassesIDs, useEmptyCssClass } from './use-empty-css-class';\n\nexport type FilterKey = 'empty' | 'onThisPage' | 'unused';\n\ntype FilteredCssClassUsage = Record< FilterKey, string[] >;\n\nconst findCssClassKeysByPageID = ( data: EnhancedCssClassUsage, pageId: number ) => {\n\tconst result: string[] = [];\n\tfor ( const key in data ) {\n\t\tdata[ key ].content.forEach( ( content: CssClassUsageContent ) => {\n\t\t\tif ( +content.pageId === pageId ) {\n\t\t\t\tresult.push( key );\n\t\t\t}\n\t\t} );\n\t}\n\treturn result;\n};\n\nconst getUnusedClasses = ( usedCssClass: string[], potentialUnused: string[] ): string[] => {\n\tconst set = new Set( usedCssClass );\n\treturn potentialUnused.filter( ( cssClass: string ) => ! set.has( cssClass ) );\n};\n\nconst EMPTY_FILTERED_CSS_CLASS_RESPONSE: FilteredCssClassUsage = {\n\tempty: [],\n\tonThisPage: [],\n\tunused: [],\n};\n\nexport const useFilteredCssClassUsage = (): FilteredCssClassUsage => {\n\tconst document = useActiveDocument();\n\tconst emptyCssClasses = useEmptyCssClass();\n\tconst { data, isLoading } = useCssClassUsage();\n\tconst listOfCssClasses = useAllCssClassesIDs();\n\n\tconst emptyCssClassesIDs = useMemo( () => emptyCssClasses.map( ( { id } ) => id ), [ emptyCssClasses ] );\n\n\tconst onThisPage = useMemo( () => {\n\t\tif ( ! data || ! document ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn findCssClassKeysByPageID( data, document.id );\n\t}, [ data, document ] );\n\n\tconst unused = useMemo( () => {\n\t\tif ( ! data ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn getUnusedClasses( Object.keys( data ), listOfCssClasses );\n\t}, [ data, listOfCssClasses ] );\n\n\tif ( isLoading || ! data || ! document ) {\n\t\treturn EMPTY_FILTERED_CSS_CLASS_RESPONSE;\n\t}\n\n\treturn {\n\t\tonThisPage,\n\t\tunused,\n\t\tempty: emptyCssClassesIDs,\n\t};\n};\n","import { useQuery, type UseQueryResult } from '@elementor/query';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { type EnhancedCssClassUsage, QUERY_KEY } from '../components/css-class-usage/types';\n\nexport const useCssClassUsage = (): UseQueryResult< EnhancedCssClassUsage > => {\n\treturn useQuery( {\n\t\tqueryKey: [ QUERY_KEY ],\n\t\tqueryFn: fetchCssClassUsage,\n\t\trefetchOnMount: false,\n\t\trefetchOnWindowFocus: true,\n\t} );\n};\n","import { __useSelector } from '@elementor/store';\n\nimport { selectEmptyCssClass, selectGlobalClasses } from '../store';\n\nexport const useEmptyCssClass = () => {\n\treturn __useSelector( selectEmptyCssClass );\n};\n\nexport const useAllCssClassesIDs = () => {\n\tconst cssClasses = __useSelector( selectGlobalClasses );\n\treturn Object.keys( cssClasses );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { hash } from '@elementor/utils';\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","import * as React from 'react';\nimport { Chip, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { FilterKey } from '../../../../hooks/use-filtered-css-class-usage';\nimport { useSearchAndFilters } from '../../context';\nimport { ClearIconButton } from './clear-icon-button';\nimport { filterConfig } from './filter-list';\n\nexport const ActiveFilters = () => {\n\tconst {\n\t\tfilters: { filters, setFilters },\n\t} = useSearchAndFilters();\n\n\tconst handleRemove = ( key: FilterKey ) => {\n\t\tsetFilters( ( prev ) => ( { ...prev, [ key ]: false } ) );\n\t};\n\n\tconst activeKeys = Object.keys( filters ).filter( ( key ): key is FilterKey => filters[ key as FilterKey ] );\n\n\tconst showClearIcon = activeKeys.length > 0;\n\n\treturn (\n\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n\t\t\t<Stack direction=\"row\" gap={ 0.5 } alignItems=\"center\" flexWrap=\"wrap\">\n\t\t\t\t{ activeKeys.map( ( key ) => (\n\t\t\t\t\t<Chip\n\t\t\t\t\t\tkey={ key }\n\t\t\t\t\t\tlabel={ filterConfig[ key ] }\n\t\t\t\t\t\tonDelete={ () => handleRemove( key ) }\n\t\t\t\t\t\tsx={ chipSx }\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</Stack>\n\t\t\t{ showClearIcon && (\n\t\t\t\t<ClearIconButton\n\t\t\t\t\ttooltipText={ __( 'Clear Filters', 'elementor' ) }\n\t\t\t\t\tsx={ { margin: '0 0 auto auto' } }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Stack>\n\t);\n};\n\nconst chipSx = {\n\t'& .MuiChip-deleteIcon': {\n\t\tdisplay: 'none',\n\t\ttransition: 'opacity 0.2s',\n\t},\n\t'&:hover .MuiChip-deleteIcon': {\n\t\tdisplay: 'block',\n\t},\n};\n","import * as React from 'react';\nimport { BrushBigIcon } from '@elementor/icons';\nimport { Box, IconButton, styled, type SxProps, type Theme, Tooltip } from '@elementor/ui';\n\nimport { useSearchAndFilters } from '../../context';\n\ntype ClearIconButtonProps = { tooltipText: React.ReactNode; sx?: SxProps< Theme > };\n\nexport const ClearIconButton = ( { tooltipText, sx }: ClearIconButtonProps ) => {\n\tconst {\n\t\tfilters: { onClearFilter },\n\t} = useSearchAndFilters();\n\n\treturn (\n\t\t<Tooltip title={ tooltipText } placement=\"top\" disableInteractive>\n\t\t\t<Box>\n\t\t\t\t<CustomIconButton aria-label={ tooltipText } size=\"tiny\" onClick={ onClearFilter } sx={ sx }>\n\t\t\t\t\t<BrushBigIcon fontSize=\"tiny\" />\n\t\t\t\t</CustomIconButton>\n\t\t\t</Box>\n\t\t</Tooltip>\n\t);\n};\nconst CustomIconButton = styled( IconButton )( ( { theme } ) => ( {\n\t'&.Mui-disabled': {\n\t\tpointerEvents: 'auto',\n\t\t'&:hover': {\n\t\t\tcolor: theme.palette.action.disabled,\n\t\t},\n\t},\n} ) );\n","import * as React from 'react';\nimport { Checkbox, Chip, MenuItem, MenuList, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FilterKey, useFilteredCssClassUsage } from '../../../../hooks/use-filtered-css-class-usage';\nimport { useSearchAndFilters } from '../../context';\n\nexport const filterConfig: Record< FilterKey, string > = {\n\tunused: __( 'Unused', 'elementor' ),\n\tempty: __( 'Empty', 'elementor' ),\n\tonThisPage: __( 'On this page', 'elementor' ),\n};\n\nexport const FilterList = () => {\n\tconst {\n\t\tfilters: { filters, setFilters },\n\t} = useSearchAndFilters();\n\tconst filteredCssClass = useFilteredCssClassUsage();\n\n\tconst handleOnClick = ( value: FilterKey ) => {\n\t\tsetFilters( ( prev ) => ( { ...prev, [ value ]: ! prev[ value ] } ) );\n\t};\n\n\treturn (\n\t\t<MenuList>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'unused' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.unused }\n\t\t\t\t\tchecked={ filters.unused }\n\t\t\t\t\tsuffix={ <Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.unused.length } /> }\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'empty' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.empty }\n\t\t\t\t\tchecked={ filters.empty }\n\t\t\t\t\tsuffix={ <Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.empty.length } /> }\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'onThisPage' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.onThisPage }\n\t\t\t\t\tchecked={ filters.onThisPage }\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.onThisPage.length } />\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t</MenuList>\n\t);\n};\n\ntype LabeledCheckboxProps = {\n\tlabel: string;\n\tsuffix?: React.ReactNode;\n\tchecked: boolean;\n};\n\nconst LabeledCheckbox = ( { label, suffix, checked }: LabeledCheckboxProps ) => (\n\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 } flex={ 1 }>\n\t\t<Checkbox\n\t\t\tsize={ 'small' }\n\t\t\tchecked={ checked }\n\t\t\tsx={ {\n\t\t\t\tpadding: 0,\n\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t'&.Mui-checked': {\n\t\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t},\n\t\t\t} }\n\t\t/>\n\t\t<Typography variant=\"caption\" sx={ { color: 'text.secondary' } }>\n\t\t\t{ label }\n\t\t</Typography>\n\t\t{ suffix }\n\t</Stack>\n);\n","import * as React from 'react';\nimport { PopoverBody, PopoverHeader } from '@elementor/editor-ui';\nimport { FilterIcon } from '@elementor/icons';\nimport { bindPopover, bindToggle, Divider, Popover, ToggleButton, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearchAndFilters } from '../../context';\nimport { ClearIconButton } from './clear-icon-button';\nimport { FilterList } from './filter-list';\n\nexport const CssClassFilter = () => {\n\tconst {\n\t\tfilters: { filters },\n\t} = useSearchAndFilters();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst showCleanIcon = Object.values( filters ).some( ( value ) => value );\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip title={ __( 'Filters', 'elementor' ) } placement=\"top\">\n\t\t\t\t<ToggleButton\n\t\t\t\t\tvalue=\"filter\"\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tselected={ popupState.isOpen }\n\t\t\t\t\t{ ...bindToggle( popupState ) }\n\t\t\t\t>\n\t\t\t\t\t<FilterIcon fontSize=\"tiny\" />\n\t\t\t\t</ToggleButton>\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tsx={ {\n\t\t\t\t\tmaxWidth: '344px',\n\t\t\t\t} }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: -21,\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t>\n\t\t\t\t<PopoverHeader\n\t\t\t\t\tactions={\n\t\t\t\t\t\tshowCleanIcon\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t<ClearIconButton\n\t\t\t\t\t\t\t\t\t\tkey=\"clear-all-button\"\n\t\t\t\t\t\t\t\t\t\ttooltipText={ __( 'Clear all', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t/>,\n\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t}\n\t\t\t\t\tonClose={ popupState.close }\n\t\t\t\t\ttitle={ __( 'Filters', 'elementor' ) }\n\t\t\t\t\ticon={ <FilterIcon fontSize={ 'tiny' } /> }\n\t\t\t\t/>\n\t\t\t\t<Divider\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tborderWidth: '1px 0 0 0',\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<PopoverBody width={ 344 } height={ 125 }>\n\t\t\t\t\t<FilterList />\n\t\t\t\t</PopoverBody>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { SearchIcon } from '@elementor/icons';\nimport { Box, InputAdornment, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearchAndFilters } from '../../context';\n\nexport const ClassManagerSearch = () => {\n\tconst {\n\t\tsearch: { inputValue, handleChange },\n\t} = useSearchAndFilters();\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={ 0.5 } sx={ { width: '100%' } }>\n\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t<TextField\n\t\t\t\t\trole={ 'search' }\n\t\t\t\t\tfullWidth\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t<SearchIcon fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useSuppressedMessage } from '@elementor/editor-current-user';\nimport { IntroductionModal } from '@elementor/editor-ui';\nimport { Box, Image, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst MESSAGE_KEY = 'global-class-manager';\n\nexport const ClassManagerIntroduction = () => {\n\tconst [ isMessageSuppressed, suppressMessage ] = useSuppressedMessage( MESSAGE_KEY );\n\tconst [ shouldShowIntroduction, setShouldShowIntroduction ] = useState( ! isMessageSuppressed );\n\n\treturn (\n\t\t<IntroductionModal\n\t\t\topen={ shouldShowIntroduction }\n\t\t\ttitle={ __( 'Class Manager', 'elementor' ) }\n\t\t\thandleClose={ ( shouldShowAgain ) => {\n\t\t\t\tif ( ! shouldShowAgain ) {\n\t\t\t\t\tsuppressMessage();\n\t\t\t\t}\n\n\t\t\t\tsetShouldShowIntroduction( false );\n\t\t\t} }\n\t\t>\n\t\t\t<Image\n\t\t\t\tsx={ { width: '100%', aspectRatio: '16 / 9' } }\n\t\t\t\tsrc={ 'https://assets.elementor.com/packages/v1/images/class-manager-intro.svg' }\n\t\t\t\talt={ '' }\n\t\t\t/>\n\t\t\t<IntroductionContent />\n\t\t</IntroductionModal>\n\t);\n};\n\nconst IntroductionContent = () => {\n\treturn (\n\t\t<Box p={ 3 }>\n\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t{ __(\n\t\t\t\t\t\"The Class Manager lets you see all the classes you've created, plus adjust their priority, rename them, and delete unused classes to keep your CSS structured.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<br />\n\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t{ __(\n\t\t\t\t\t'Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t</Box>\n\t);\n};\n","import { getCurrentDocument, getV1DocumentsManager } from '@elementor/editor-documents';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { slice } from '../../store';\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, useMemo } from 'react';\nimport { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { __useDispatch as useDispatch } from '@elementor/store';\nimport { List, Stack, styled, Typography, type TypographyProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useFilters } from '../../hooks/use-filters';\nimport { useOrderedClasses } from '../../hooks/use-ordered-classes';\nimport { slice } from '../../store';\nimport { useSearchAndFilters } from '../search-and-filter/context';\nimport { ClassItem } from './class-item';\nimport { DeleteConfirmationProvider } from './delete-confirmation-dialog';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { getNotFoundType, NotFound } from './not-found';\nimport { SortableItem, SortableProvider } from './sortable';\n\ntype GlobalClassesListProps = {\n\tdisabled?: boolean;\n};\n\nexport const GlobalClassesList = ( { disabled }: GlobalClassesListProps ) => {\n\tconst {\n\t\tsearch: { debouncedValue: searchValue },\n\t} = useSearchAndFilters();\n\tconst cssClasses = useOrderedClasses();\n\tconst dispatch = useDispatch();\n\tconst filters = useFilters();\n\tconst [ classesOrder, reorderClasses ] = useReorder();\n\tconst filteredCssClasses = useFilteredCssClasses();\n\n\tuseEffect( () => {\n\t\tconst handler = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'z' && ( event.ctrlKey || event.metaKey ) ) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( event.shiftKey ) {\n\t\t\t\t\tdispatch( slice.actions.redo() );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdispatch( slice.actions.undo() );\n\t\t\t}\n\t\t};\n\t\twindow.addEventListener( 'keydown', handler, {\n\t\t\tcapture: true,\n\t\t} );\n\t\treturn () => window.removeEventListener( 'keydown', handler );\n\t}, [ dispatch ] );\n\n\tif ( ! cssClasses?.length ) {\n\t\treturn <EmptyState />;\n\t}\n\n\tconst notFoundType = getNotFoundType( searchValue, filters, filteredCssClasses );\n\n\tif ( notFoundType ) {\n\t\treturn <NotFound notFoundType={ notFoundType } />;\n\t}\n\n\tconst isFiltersApplied = filters?.length || searchValue;\n\n\tconst allowSorting = filteredCssClasses.length > 1 && ! isFiltersApplied;\n\n\treturn (\n\t\t<DeleteConfirmationProvider>\n\t\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 0.5 } }>\n\t\t\t\t<SortableProvider\n\t\t\t\t\tvalue={ classesOrder }\n\t\t\t\t\tonChange={ reorderClasses }\n\t\t\t\t\tdisableDragOverlay={ ! allowSorting }\n\t\t\t\t>\n\t\t\t\t\t{ filteredCssClasses?.map( ( { id, label } ) => (\n\t\t\t\t\t\t<SortableItem key={ id } id={ id }>\n\t\t\t\t\t\t\t{ ( { isDragged, isDragPlaceholder, triggerProps, triggerStyle } ) => (\n\t\t\t\t\t\t\t\t<ClassItem\n\t\t\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\t\t\trenameClass={ ( newLabel: string ) => {\n\t\t\t\t\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\t\t\t\t\tslice.actions.update( {\n\t\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tselected={ isDragged }\n\t\t\t\t\t\t\t\t\tdisabled={ disabled || isDragPlaceholder }\n\t\t\t\t\t\t\t\t\tsortableTriggerProps={ { ...triggerProps, style: triggerStyle } }\n\t\t\t\t\t\t\t\t\tshowSortIndicator={ allowSorting }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t) ) }\n\t\t\t\t</SortableProvider>\n\t\t\t</List>\n\t\t</DeleteConfirmationProvider>\n\t);\n};\n\nconst EmptyState = () => (\n\t<Stack alignItems=\"center\" gap={ 1.5 } pt={ 10 } px={ 0.5 } maxWidth=\"260px\" margin=\"auto\">\n\t\t<FlippedColorSwatchIcon fontSize=\"large\" />\n\t\t<StyledHeader variant=\"subtitle2\" component=\"h2\" color=\"text.secondary\">\n\t\t\t{ __( 'There are no global classes yet.', 'elementor' ) }\n\t\t</StyledHeader>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t{ __(\n\t\t\t\t'CSS classes created in the editor panel will appear here. Once they are available, you can arrange their hierarchy, rename them, or delete them as needed.',\n\t\t\t\t'elementor'\n\t\t\t) }\n\t\t</Typography>\n\t</Stack>\n);\n\n// Override panel reset styles.\nconst StyledHeader = styled( Typography )< TypographyProps >( ( { theme, variant } ) => ( {\n\t'&.MuiTypography-root': {\n\t\t...( theme.typography[ variant as keyof typeof theme.typography ] as React.CSSProperties ),\n\t},\n} ) );\n\nconst useReorder = () => {\n\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\nconst useFilteredCssClasses = (): StyleDefinition[] => {\n\tconst cssClasses = useOrderedClasses();\n\tconst {\n\t\tsearch: { debouncedValue: searchValue },\n\t} = useSearchAndFilters();\n\tconst filters = useFilters();\n\n\tconst lowercaseLabels = useMemo(\n\t\t() =>\n\t\t\tcssClasses.map( ( cssClass ) => ( {\n\t\t\t\t...cssClass,\n\t\t\t\tlowerLabel: cssClass.label.toLowerCase(),\n\t\t\t} ) ),\n\t\t[ cssClasses ]\n\t);\n\n\tconst filteredClasses = useMemo( () => {\n\t\tif ( searchValue.length > 1 ) {\n\t\t\treturn lowercaseLabels.filter( ( cssClass ) => cssClass.lowerLabel.includes( searchValue.toLowerCase() ) );\n\t\t}\n\t\treturn cssClasses;\n\t}, [ searchValue, cssClasses, lowercaseLabels ] );\n\n\treturn useMemo( () => {\n\t\tif ( filters && filters.length > 0 ) {\n\t\t\treturn filteredClasses.filter( ( cssClass ) => filters.includes( cssClass.id ) );\n\t\t}\n\t\treturn filteredClasses;\n\t}, [ filteredClasses, filters ] );\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectOrderedClasses } from '../store';\n\nexport const useOrderedClasses = () => {\n\treturn useSelector( selectOrderedClasses );\n};\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { EditableField, EllipsisWithTooltip, MenuListItem, useEditable, WarningInfotip } from '@elementor/editor-ui';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tListItemButton,\n\ttype ListItemButtonProps,\n\tMenu,\n\tStack,\n\tstyled,\n\ttype Theme,\n\tTooltip,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { CssClassUsageTrigger } from '../css-class-usage/components';\nimport { useDeleteConfirmation } from './delete-confirmation-dialog';\nimport { SortableTrigger, type SortableTriggerProps } from './sortable';\n\ntype ClassItemProps = React.PropsWithChildren< {\n\tid: string;\n\tlabel: string;\n\trenameClass: ( newLabel: string ) => void;\n\tselected?: boolean;\n\tdisabled?: boolean;\n\tsortableTriggerProps: SortableTriggerProps;\n\tshowSortIndicator?: boolean;\n} >;\n\nexport const ClassItem = ( {\n\tid,\n\tlabel,\n\trenameClass,\n\tselected,\n\tdisabled,\n\tsortableTriggerProps,\n\tshowSortIndicator,\n}: ClassItemProps ) => {\n\tconst itemRef = useRef< HTMLElement >( null );\n\tconst {\n\t\tref: editableRef,\n\t\topenEditMode,\n\t\tisEditing,\n\t\terror,\n\t\tgetProps: getEditableProps,\n\t} = useEditable( {\n\t\tvalue: label,\n\t\tonSubmit: renameClass,\n\t\tvalidation: validateLabel,\n\t} );\n\tconst [ selectedCssUsage, setSelectedCssUsage ] = useState( '' );\n\tconst { openDialog } = useDeleteConfirmation();\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst isSelected = ( selectedCssUsage === id || selected || popupState.isOpen ) && ! disabled;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack p={ 0 }>\n\t\t\t\t<WarningInfotip\n\t\t\t\t\topen={ Boolean( error ) }\n\t\t\t\t\ttext={ error ?? '' }\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\twidth={ itemRef.current?.getBoundingClientRect().width }\n\t\t\t\t\toffset={ [ 0, -15 ] }\n\t\t\t\t>\n\t\t\t\t\t<StyledListItemButton\n\t\t\t\t\t\tref={ itemRef }\n\t\t\t\t\t\tdense\n\t\t\t\t\t\tdisableGutters\n\t\t\t\t\t\tshowSortIndicator={ showSortIndicator }\n\t\t\t\t\t\tshowActions={ isSelected || isEditing }\n\t\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t\t\tonDoubleClick={ openEditMode }\n\t\t\t\t\t\tselected={ isSelected }\n\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t\tfocusVisibleClassName=\"visible-class-item\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<SortableTrigger { ...sortableTriggerProps } />\n\t\t\t\t\t\t<Indicator isActive={ isEditing } isError={ !! error }>\n\t\t\t\t\t\t\t{ isEditing ? (\n\t\t\t\t\t\t\t\t<EditableField\n\t\t\t\t\t\t\t\t\tref={ editableRef }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\t{ ...getEditableProps() }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<EllipsisWithTooltip title={ label } as={ Typography } variant=\"caption\" />\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Indicator>\n\t\t\t\t\t\t<Box className={ 'class-item-locator' }>\n\t\t\t\t\t\t\t<CssClassUsageTrigger id={ id } onClick={ setSelectedCssUsage } />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\tclassName={ 'class-item-more-actions' }\n\t\t\t\t\t\t\ttitle={ __( 'More actions', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconButton size=\"tiny\" { ...bindTrigger( popupState ) } aria-label=\"More actions\">\n\t\t\t\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t</StyledListItemButton>\n\t\t\t\t</WarningInfotip>\n\t\t\t</Stack>\n\t\t\t<Menu\n\t\t\t\t{ ...bindMenu( popupState ) }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<MenuListItem\n\t\t\t\t\tsx={ { minWidth: '160px' } }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tpopupState.close();\n\t\t\t\t\t\topenEditMode();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t{ __( 'Rename', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t\t<MenuListItem\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tpopupState.close();\n\t\t\t\t\t\topenDialog( { id, label } );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'error.light' } }>\n\t\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n\nconst StyledListItemButton = styled( ListItemButton, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'showActions', 'showSortIndicator' ].includes( prop ),\n} )< ListItemButtonProps & { showActions: boolean; showSortIndicator: boolean } >(\n\t( { showActions, showSortIndicator } ) => `\n min-height: 36px;\n\n &.visible-class-item {\n box-shadow: none !important;\n }\n\n .class-item-locator {\n visibility: hidden;\n }\n\n .class-item-sortable-trigger {\n visibility: ${ showSortIndicator && showActions ? 'visible' : 'hidden' };\n }\n\n &:hover:not(:disabled) {\n .class-item-locator {\n visibility: visible;\n }\n\n .class-item-sortable-trigger {\n visibility: ${ showSortIndicator ? 'visible' : 'hidden' };\n }\n }\n `\n);\n\nconst Indicator = styled( Box, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'isActive', 'isError' ].includes( prop ),\n} )< { isActive: boolean; isError: boolean } >( ( { theme, isActive, isError } ) => ( {\n\tdisplay: 'flex',\n\twidth: '100%',\n\tflexGrow: 1,\n\tborderRadius: theme.spacing( 0.5 ),\n\tborder: getIndicatorBorder( { isActive, isError, theme } ),\n\tpadding: `0 ${ theme.spacing( 1 ) }`,\n\tmarginLeft: isActive ? theme.spacing( 1 ) : 0,\n\tminWidth: 0,\n} ) );\n\nconst getIndicatorBorder = ( { isActive, isError, theme }: { isActive: boolean; isError: boolean; theme: Theme } ) => {\n\tif ( isError ) {\n\t\treturn `2px solid ${ theme.palette.error.main }`;\n\t}\n\n\tif ( isActive ) {\n\t\treturn `2px solid ${ theme.palette.secondary.main }`;\n\t}\n\n\treturn 'none';\n};\n\nconst validateLabel = ( newLabel: string ) => {\n\tconst result = validateStyleLabel( newLabel, 'rename' );\n\n\tif ( result.isValid ) {\n\t\treturn null;\n\t}\n\n\treturn result.errorMessage;\n};\n","import * as React from 'react';\nimport { __useOpenDocumentInNewTab as useOpenDocumentInNewTab } from '@elementor/editor-documents';\nimport {\n\tEllipsisWithTooltip,\n\tPopoverBody,\n\tPopoverHeader,\n\tPopoverMenuList,\n\ttype VirtualizedItem,\n} from '@elementor/editor-ui';\nimport {\n\tCurrentLocationIcon,\n\tExternalLinkIcon,\n\tFooterTemplateIcon,\n\tHeaderTemplateIcon,\n\tPagesIcon,\n\tPopupTemplateIcon,\n\tPostTypeIcon,\n} from '@elementor/icons';\nimport { Box, Chip, Divider, Icon, MenuList, Stack, styled, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../../hooks/use-css-class-usage-by-id';\nimport { type ContentType } from '../types';\n\ntype CssClassUsageRecord = VirtualizedItem< 'item', string > & { docType: ContentType };\n\nconst iconMapper: Record< ContentType, { label: string; icon: React.ReactElement } > = {\n\t'wp-post': {\n\t\tlabel: __( 'Post', 'elementor' ),\n\t\ticon: <PostTypeIcon fontSize={ 'inherit' } />,\n\t},\n\t'wp-page': {\n\t\tlabel: __( 'Page', 'elementor' ),\n\t\ticon: <PagesIcon fontSize={ 'inherit' } />,\n\t},\n\tpopup: {\n\t\tlabel: __( 'Popup', 'elementor' ),\n\t\ticon: <PopupTemplateIcon fontSize={ 'inherit' } />,\n\t},\n\theader: {\n\t\tlabel: __( 'Header', 'elementor' ),\n\t\ticon: <HeaderTemplateIcon fontSize={ 'inherit' } />,\n\t},\n\tfooter: {\n\t\tlabel: __( 'Footer', 'elementor' ),\n\t\ticon: <FooterTemplateIcon fontSize={ 'inherit' } />,\n\t},\n};\n\nexport const CssClassUsagePopover = ( {\n\tcssClassID,\n\tonClose,\n}: {\n\tonClose: React.ComponentProps< typeof PopoverHeader >[ 'onClose' ];\n\tcssClassID: string;\n} ) => {\n\tconst { data: classUsage } = useCssClassUsageByID( cssClassID );\n\tconst onNavigate = useOpenDocumentInNewTab();\n\n\tconst cssClassUsageRecords: CssClassUsageRecord[] =\n\t\tclassUsage?.content.map(\n\t\t\t( { title, elements, pageId, type } ) =>\n\t\t\t\t( {\n\t\t\t\t\ttype: 'item',\n\t\t\t\t\tvalue: pageId,\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tsecondaryText: elements.length.toString(),\n\t\t\t\t\tdocType: type,\n\t\t\t\t} ) as CssClassUsageRecord\n\t\t) ?? [];\n\n\treturn (\n\t\t<>\n\t\t\t<PopoverHeader\n\t\t\t\ticon={ <CurrentLocationIcon fontSize={ 'tiny' } /> }\n\t\t\t\ttitle={\n\t\t\t\t\t<Stack flexDirection={ 'row' } gap={ 1 } alignItems={ 'center' }>\n\t\t\t\t\t\t<Box aria-label={ 'header-title' }>{ __( 'Locator', 'elementor' ) }</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Chip sx={ { lineHeight: 1 } } size={ 'tiny' } label={ classUsage.total } />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Stack>\n\t\t\t\t}\n\t\t\t\tonClose={ onClose }\n\t\t\t/>\n\t\t\t<Divider />\n\t\t\t<PopoverBody width={ 300 }>\n\t\t\t\t<PopoverMenuList\n\t\t\t\t\tonSelect={ ( value ) => onNavigate( +value ) }\n\t\t\t\t\titems={ cssClassUsageRecords }\n\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\tmenuListTemplate={ StyledCssClassUsageItem }\n\t\t\t\t\tmenuItemContentTemplate={ ( cssClassUsageRecord ) => (\n\t\t\t\t\t\t<Stack flexDirection={ 'row' } flex={ 1 } alignItems={ 'center' }>\n\t\t\t\t\t\t\t<Box display={ 'flex' } sx={ { pr: 1 } }>\n\t\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\t\tdisableInteractive\n\t\t\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t\t\ticonMapper?.[ cssClassUsageRecord.docType as ContentType ]?.label ??\n\t\t\t\t\t\t\t\t\t\tcssClassUsageRecord.docType\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon fontSize={ 'small' }>\n\t\t\t\t\t\t\t\t\t\t{ iconMapper?.[ cssClassUsageRecord.docType as ContentType ]?.icon || (\n\t\t\t\t\t\t\t\t\t\t\t<PagesIcon fontSize={ 'inherit' } />\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</Icon>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box sx={ { pr: 0.5, maxWidth: '173px' } } display={ 'flex' }>\n\t\t\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\t\t\ttitle={ cssClassUsageRecord.label }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\tmaxWidth=\"173px\"\n\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<ExternalLinkIcon className={ 'hover-only-icon' } fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tml: 'auto',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t\t\tlabel={ cssClassUsageRecord.secondaryText }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</PopoverBody>\n\t\t</>\n\t);\n};\n\nconst StyledCssClassUsageItem = styled( MenuList )( ( { theme } ) => ( {\n\t'& > li': {\n\t\tdisplay: 'flex',\n\t\tcursor: 'pointer',\n\t\theight: 32,\n\t\twidth: '100%',\n\t},\n\t'& > [role=\"option\"]': {\n\t\t...theme.typography.caption,\n\t\tlineHeight: 'inherit',\n\t\tpadding: theme.spacing( 0.5, 1, 0.5, 2 ),\n\t\ttextOverflow: 'ellipsis',\n\t\tposition: 'absolute',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\topacity: 1,\n\t\t'.hover-only-icon': {\n\t\t\tcolor: theme.palette.text.disabled,\n\t\t\topacity: 0,\n\t\t},\n\t\t'&:hover': {\n\t\t\tborderRadius: theme.spacing( 0.5 ),\n\t\t\tbackgroundColor: theme.palette.action.hover,\n\t\t\t'.hover-only-icon': {\n\t\t\t\tcolor: theme.palette.text.disabled,\n\t\t\t\topacity: 1,\n\t\t\t},\n\t\t},\n\t},\n\twidth: '100%',\n\tposition: 'relative',\n} ) );\n","import { type EnhancedCssClassUsageContent } from '../components/css-class-usage/types';\nimport { useCssClassUsage } from './use-css-class-usage';\n\nconst EMPTY_CLASS_USAGE: EnhancedCssClassUsageContent = {\n\ttotal: 0,\n\tcontent: [],\n};\n\nexport const useCssClassUsageByID = (\n\tid: string\n): { data: EnhancedCssClassUsageContent; isLoading: boolean; isSuccess?: boolean } => {\n\tconst { data, ...rest } = useCssClassUsage();\n\tconst classData = data?.[ id ] ?? EMPTY_CLASS_USAGE;\n\treturn { ...rest, data: classData };\n};\n","import * as React from 'react';\nimport { type MouseEvent, type PropsWithChildren } from 'react';\nimport { InfoAlert } from '@elementor/editor-ui';\nimport { CurrentLocationIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tInfotip,\n\tPopover,\n\tstyled,\n\tTooltip,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../../hooks/use-css-class-usage-by-id';\nimport { type CssClassID } from '../types';\nimport { CssClassUsagePopover } from './css-class-usage-popover';\n\nexport const CssClassUsageTrigger = ( { id, onClick }: { id: CssClassID; onClick: ( id: CssClassID ) => void } ) => {\n\tconst {\n\t\tdata: { total },\n\t\tisLoading,\n\t} = useCssClassUsageByID( id );\n\tconst cssClassUsagePopover = usePopupState( { variant: 'popover', popupId: 'css-class-usage-popover' } );\n\n\tif ( isLoading ) {\n\t\treturn null;\n\t}\n\n\tconst WrapperComponent = total !== 0 ? TooltipWrapper : InfoAlertMessage;\n\n\treturn (\n\t\t<>\n\t\t\t<Box position={ 'relative' }>\n\t\t\t\t<WrapperComponent total={ total }>\n\t\t\t\t\t<CustomIconButton\n\t\t\t\t\t\tdisabled={ total === 0 }\n\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t{ ...bindTrigger( cssClassUsagePopover ) }\n\t\t\t\t\t\tonClick={ ( e: MouseEvent ) => {\n\t\t\t\t\t\t\tif ( total !== 0 ) {\n\t\t\t\t\t\t\t\tbindTrigger( cssClassUsagePopover ).onClick( e );\n\t\t\t\t\t\t\t\tonClick( id );\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\t\t<CurrentLocationIcon fontSize={ 'tiny' } />\n\t\t\t\t\t</CustomIconButton>\n\t\t\t\t</WrapperComponent>\n\t\t\t</Box>\n\t\t\t<Box>\n\t\t\t\t<Popover\n\t\t\t\t\tanchorOrigin={ {\n\t\t\t\t\t\tvertical: 'center',\n\t\t\t\t\t\thorizontal: 'right',\n\t\t\t\t\t} }\n\t\t\t\t\ttransformOrigin={ {\n\t\t\t\t\t\tvertical: 15,\n\t\t\t\t\t\thorizontal: -50,\n\t\t\t\t\t} }\n\t\t\t\t\t{ ...bindPopover( cssClassUsagePopover ) }\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tbindPopover( cssClassUsagePopover ).onClose();\n\t\t\t\t\t\tonClick( '' );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<CssClassUsagePopover\n\t\t\t\t\t\tonClose={ cssClassUsagePopover.close }\n\t\t\t\t\t\taria-label=\"css-class-usage-popover\"\n\t\t\t\t\t\tcssClassID={ id }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t</Box>\n\t\t</>\n\t);\n};\n\nconst CustomIconButton = styled( IconButton )( ( { theme } ) => ( {\n\t'&.Mui-disabled': {\n\t\tpointerEvents: 'auto', // Enable hover\n\t\t'&:hover': {\n\t\t\tcolor: theme.palette.action.disabled, // optional\n\t\t},\n\t},\n\theight: '22px',\n\twidth: '22px',\n} ) );\n\nconst TooltipWrapper = ( { children, total }: PropsWithChildren< { total: number } > ) => (\n\t<Tooltip\n\t\tdisableInteractive\n\t\tplacement={ 'top' }\n\t\ttitle={ `${ __( 'Show {{number}} {{locations}}', 'elementor' )\n\t\t\t.replace( '{{number}}', total.toString() )\n\t\t\t.replace(\n\t\t\t\t'{{locations}}',\n\t\t\t\ttotal === 1 ? __( 'location', 'elementor' ) : __( 'locations', 'elementor' )\n\t\t\t) }` }\n\t>\n\t\t<span>{ children }</span>\n\t</Tooltip>\n);\n\nconst InfoAlertMessage = ( { children }: PropsWithChildren ) => (\n\t<Infotip\n\t\tdisableInteractive\n\t\tplacement={ 'top' }\n\t\tcolor={ 'secondary' }\n\t\tcontent={ <InfoAlert sx={ { mt: 1 } }>{ __( 'This class isn’t being used yet.', 'elementor' ) }</InfoAlert> }\n\t>\n\t\t<span>{ children }</span>\n\t</Infotip>\n);\n","import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { 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 { useCssClassUsageByID } from '../../hooks/use-css-class-usage-by-id';\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\tconst {\n\t\tdata: { total, content },\n\t} = useCssClassUsageByID( id );\n\tconst onConfirm = () => {\n\t\tdeleteClass( id );\n\n\t\tcloseDialog();\n\t};\n\t// translators: %1: total usage count, %2: number of pages\n\tconst text =\n\t\ttotal && content.length\n\t\t\t? __(\n\t\t\t\t\t'Will permanently remove it from your project and may affect the design across all elements using it. Used %1 times across %2 pages. This action cannot be undone.',\n\t\t\t\t\t'elementor'\n\t\t\t )\n\t\t\t\t\t.replace( '%1', total.toString() )\n\t\t\t\t\t.replace( '%2', content.length.toString() )\n\t\t\t: __(\n\t\t\t\t\t'Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.',\n\t\t\t\t\t'elementor'\n\t\t\t );\n\n\treturn (\n\t\t<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 { label } \n\t\t\t\t\t</Typography>\n\t\t\t\t\t{ text }\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\n\t\t\t\t<Button\n\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\tautoFocus\n\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\tcolor=\"error\"\n\t\t\t\t\tonClick={ onConfirm }\n\t\t\t\t>\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\" aria-label=\"sort\">\n\t\t<GripVerticalIcon fontSize=\"tiny\" />\n\t</StyledSortableTrigger>\n);\n\ntype SortableItemProps = {\n\tid: UnstableSortableItemProps[ 'id' ];\n\tchildren: ( props: Partial< UnstableSortableItemRenderProps > ) => React.ReactNode;\n};\n\nexport const SortableItem = ( { children, id, ...props }: SortableItemProps ) => {\n\treturn (\n\t\t<UnstableSortableItem\n\t\t\t{ ...props }\n\t\t\tid={ id }\n\t\t\trender={ ( {\n\t\t\t\titemProps,\n\t\t\t\tisDragged,\n\t\t\t\ttriggerProps,\n\t\t\t\titemStyle,\n\t\t\t\ttriggerStyle,\n\t\t\t\tdropIndicationStyle,\n\t\t\t\tshowDropIndication,\n\t\t\t\tisDragOverlay,\n\t\t\t\tisDragPlaceholder,\n\t\t\t}: UnstableSortableItemRenderProps ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Box\n\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\tstyle={ itemStyle }\n\t\t\t\t\t\tcomponent={ 'li' }\n\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tbackgroundColor: isDragOverlay ? 'background.paper' : undefined,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ children( {\n\t\t\t\t\t\t\titemProps,\n\t\t\t\t\t\t\tisDragged,\n\t\t\t\t\t\t\ttriggerProps,\n\t\t\t\t\t\t\titemStyle,\n\t\t\t\t\t\t\ttriggerStyle,\n\t\t\t\t\t\t\tisDragPlaceholder,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t{ showDropIndication && <SortableItemIndicator style={ dropIndicationStyle } /> }\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n};\n\nconst StyledSortableTrigger = styled( 'div' )( ( { theme } ) => ( {\n\tposition: 'absolute',\n\tleft: 0,\n\ttop: '50%',\n\ttransform: `translate( -${ theme.spacing( 1.5 ) }, -50% )`,\n\tcolor: theme.palette.action.active,\n} ) );\n\nconst SortableItemIndicator = styled( Box )`\n\twidth: 100%;\n\theight: 1px;\n\tbackground-color: ${ ( { theme } ) => theme.palette.text.primary };\n`;\n","import * as React from 'react';\nimport { type FC } from 'react';\nimport type { StyleDefinition } from '@elementor/editor-styles';\nimport { ColorSwatchIcon, PhotoIcon } from '@elementor/icons';\nimport { Box, Link, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearchAndFilters } from '../search-and-filter/context';\n\nexport const getNotFoundType = (\n\tsearchValue: string,\n\tfilters: string[] | null | undefined,\n\tfilteredClasses: StyleDefinition[]\n): NotFoundType | undefined => {\n\tconst searchNotFound = filteredClasses.length <= 0 && searchValue.length > 1;\n\tconst filterNotFound = filters && filters.length === 0;\n\tconst filterAndSearchNotFound = searchNotFound && filterNotFound;\n\n\tif ( filterAndSearchNotFound ) {\n\t\treturn 'filterAndSearch';\n\t}\n\tif ( searchNotFound ) {\n\t\treturn 'search';\n\t}\n\tif ( filterNotFound ) {\n\t\treturn 'filter';\n\t}\n\treturn undefined;\n};\n\nexport type NotFoundType = 'filter' | 'search' | 'filterAndSearch';\n\nconst notFound = {\n\tfilterAndSearch: {\n\t\tmainText: __( 'Sorry, nothing matched.', 'elementor' ),\n\t\tsceneryText: __( 'Try something else.', 'elementor' ),\n\t\ticon: <PhotoIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n\tsearch: {\n\t\tmainText: __( 'Sorry, nothing matched', 'elementor' ),\n\t\tsceneryText: __( 'Clear your input and try something else.', 'elementor' ),\n\t\ticon: <PhotoIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n\tfilter: {\n\t\tmainText: __( 'Sorry, nothing matched that search.', 'elementor' ),\n\t\tsceneryText: __( 'Clear the filters and try something else.', 'elementor' ),\n\t\ticon: <ColorSwatchIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n};\n\ntype GetNotFoundConfigProps = {\n\tnotFoundType: NotFoundType;\n};\n\nexport const NotFound = ( { notFoundType }: GetNotFoundConfigProps ): React.ReactElement => {\n\tconst {\n\t\tsearch: { onClearSearch, inputValue },\n\t\tfilters: { onClearFilter },\n\t} = useSearchAndFilters();\n\n\tswitch ( notFoundType ) {\n\t\tcase 'filter':\n\t\t\treturn <NotFoundLayout { ...notFound.filter } onClear={ onClearFilter } />;\n\t\tcase 'search':\n\t\t\treturn <NotFoundLayout { ...notFound.search } searchValue={ inputValue } onClear={ onClearSearch } />;\n\t\tcase 'filterAndSearch':\n\t\t\treturn (\n\t\t\t\t<NotFoundLayout\n\t\t\t\t\t{ ...notFound.filterAndSearch }\n\t\t\t\t\tonClear={ () => {\n\t\t\t\t\t\tonClearFilter();\n\t\t\t\t\t\tonClearSearch();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t);\n\t}\n};\n\ntype NotFoundLayoutProps = {\n\tsearchValue?: string;\n\tonClear: () => void;\n\tmainText: string;\n\tsceneryText: string;\n\ticon: React.ReactElement;\n};\n\nexport const NotFoundLayout: FC< NotFoundLayoutProps > = ( { onClear, searchValue, mainText, sceneryText, icon } ) => (\n\t<Stack\n\t\tcolor={ 'text.secondary' }\n\t\tpt={ 5 }\n\t\talignItems=\"center\"\n\t\tgap={ 1 }\n\t\toverflow={ 'hidden' }\n\t\tjustifySelf={ 'center' }\n\t>\n\t\t{ icon }\n\t\t<Box\n\t\t\tsx={ {\n\t\t\t\twidth: '100%',\n\t\t\t} }\n\t\t>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t{ mainText }\n\t\t\t</Typography>\n\t\t\t{ searchValue && (\n\t\t\t\t<Typography\n\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<span>“</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>”.</span>\n\t\t\t\t</Typography>\n\t\t\t) }\n\t\t</Box>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t{ sceneryText }\n\t\t</Typography>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ onClear }>\n\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t</Link>\n\t\t</Typography>\n\t</Stack>\n);\n","type ExtendedWindow = Window & {\n\t$e?: {\n\t\tcomponents?: {\n\t\t\tget?: ( name: 'panel' ) =>\n\t\t\t\t| {\n\t\t\t\t\t\tblockUserInteractions?: () => void;\n\t\t\t\t\t\tunblockUserInteractions?: () => void;\n\t\t\t\t }\n\t\t\t\t| undefined;\n\t\t};\n\t};\n};\n\nexport function blockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.blockUserInteractions?.();\n}\n\nexport function unblockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.unblockUserInteractions?.();\n}\n","import * as React from 'react';\nimport { 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 * as React from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Divider } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\n\ntype OwnProps = {\n\tsuccessCallback: ( _: string ) => void;\n\tstyleDef: StyleDefinition | null;\n\tcanConvert: boolean;\n};\n\nexport const ConvertLocalClassToGlobalClass = ( props: OwnProps ) => {\n\tconst localStyleData = props.styleDef;\n\n\tconst handleConversion = () => {\n\t\tconst newClassName = createClassName( `converted-class-` );\n\n\t\tif ( ! localStyleData ) {\n\t\t\tthrow new Error( 'Style definition is required for converting local class to global class.' );\n\t\t}\n\n\t\tconst newId = globalClassesStylesProvider.actions.create?.( newClassName, localStyleData.variants );\n\t\tif ( newId ) {\n\t\t\tprops.successCallback( newId );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<MenuListItem\n\t\t\t\tdisabled={ ! props.canConvert }\n\t\t\t\tonClick={ handleConversion }\n\t\t\t\tdense\n\t\t\t\tsx={ {\n\t\t\t\t\t'&.Mui-focusVisible': {\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tboxShadow: 'none !important',\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Convert to global class', 'elementor' ) }\n\t\t\t</MenuListItem>\n\t\t\t<Divider />\n\t\t</>\n\t);\n};\n\nfunction createClassName( prefix: string ): string {\n\tlet i = 1;\n\tlet newClassName = `${ prefix }${ i }`;\n\n\twhile ( ! validateStyleLabel( newClassName, 'create' ).isValid ) {\n\t\tnewClassName = `${ prefix }${ ++i }`;\n\t}\n\n\treturn newClassName;\n}\n","import { useEffect } from 'react';\nimport { __useDispatch as useDispatch } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { slice } from '../store';\n\nexport function PopulateStore() {\n\tconst dispatch = useDispatch();\n\n\tuseEffect( () => {\n\t\tPromise.all( [ apiClient.all( 'preview' ), apiClient.all( 'frontend' ) ] ).then(\n\t\t\t( [ previewRes, frontendRes ] ) => {\n\t\t\t\tconst { data: previewData } = previewRes;\n\t\t\t\tconst { data: frontendData } = frontendRes;\n\n\t\t\t\tdispatch(\n\t\t\t\t\tslice.actions.load( {\n\t\t\t\t\t\tpreview: {\n\t\t\t\t\t\t\titems: previewData.data,\n\t\t\t\t\t\t\torder: previewData.meta.order,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfrontend: {\n\t\t\t\t\t\t\titems: frontendData.data,\n\t\t\t\t\t\t\torder: frontendData.meta.order,\n\t\t\t\t\t\t},\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}, [ dispatch ] );\n\n\treturn null;\n}\n","import { getCurrentUser } from '@elementor/editor-current-user';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { UPDATE_CLASS_CAPABILITY_KEY } from './capabilities';\nimport { saveGlobalClasses } from './save-global-classes';\nimport { selectIsDirty } from './store';\n\nexport function syncWithDocumentSave() {\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\tconst user = getCurrentUser();\n\n\t\tconst canEdit = user?.capabilities.includes( UPDATE_CLASS_CAPABILITY_KEY );\n\n\t\tif ( ! canEdit ) {\n\t\t\treturn;\n\t\t}\n\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAgC;AAChC,kCAIO;AACP,IAAAA,wBAAiD;AACjD,IAAAC,mCAAiC;AACjC,IAAAC,6BAA4D;AAC5D,IAAAC,iBAAiD;;;ACTjD,IAAAC,UAAuB;AACvB,IAAAC,2BAGO;AACP,IAAAC,mCAAwC;AACxC,IAAAC,cAAoC;AACpC,IAAAC,gBAAmB;;;ACPnB,IAAAC,wBAA8E;AAC9E,sCAAqC;AACrC,IAAAC,gBAIO;AACP,kBAAmB;;;ACNnB,gCAAmC;AAEnC,IAAM,iBAAiB;AAChB,IAAM,8BAA8B;AAEpC,IAAM,kBAAkB,MAAoC;AAClE,QAAM,gCAA4B,8CAAoB,cAAe;AAErE,MAAK,2BAA4B;AAChC,WAAO;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,aAAa;AAAA,IACd;AAAA,EACD;AACD;;;ACjBA,mBAA4B;AAErB,IAAM,+BAA2B,0BAAoC;AAAA,EAC3E,MAAM;AAAA,EACN,SAAS;AACV,CAAE;AAEK,IAAM,yCAAqC,0BAAkC;AAAA,EACnF,MAAM;AAAA,EACN,SAAS;AACV,CAAE;;;ACVF,0BAAuC;AACvC,2BAMO;AAEP,mBAKO;;;ACRP,SAAS,WAAiB,EAAE,OAAO,MAAM,KAAK,GAAiE;AAC9G,SAAO;AAAA,IACN;AAAA,IACA,MAAM,QAAQ;AAAA,IACd,MAAM,QAAQ;AAAA,EACf;AACD;AAEO,IAAM,kBAAN,MAAM,iBAAqB;AAAA,EAazB,YAA6B,WAAoB;AAApB;AAAA,EAAqB;AAAA,EAZ1D,OAAe,WAAyD,CAAC;AAAA,EAEzE,OAAc,IAAU,WAA0C;AACjE,QAAK,CAAE,iBAAgB,SAAU,SAAU,GAAI;AAC9C,uBAAgB,SAAU,SAAU,IAAI,IAAI,iBAAiB,SAAU;AAAA,IACxE;AACA,WAAO,iBAAgB,SAAU,SAAU;AAAA,EAC5C;AAAA,EAEQ,QAA0B;AAAA,EAC1B,UAA4B;AAAA,EAI5B,UAAW,MAAa;AAC/B,WAAO,KAAK,MAAO,KAAK,UAAW,IAAK,CAAE;AAAA,EAC3C;AAAA,EAEO,QAAc;AACpB,SAAK,QAAQ,KAAK,UAAU;AAAA,EAC7B;AAAA,EAEO,OAAiB;AACvB,QAAK,CAAE,KAAK,WAAW,KAAK,YAAY,KAAK,OAAQ;AACpD,aAAO;AAAA,IACR;AACA,SAAK,UAAU,KAAK,QAAQ;AAC5B,WAAO,KAAK,SAAS,SAAS;AAAA,EAC/B;AAAA,EAEO,SAAkB;AACxB,WAAO,CAAE,KAAK,WAAW,CAAE,KAAK,QAAQ;AAAA,EACzC;AAAA,EAEO,KAAM,OAAsB;AAClC,QAAK,OAAQ;AACZ,UAAK,CAAE,KAAK,SAAU;AACrB,aAAK,QAAQ,WAAY,EAAE,OAAO,KAAK,UAAW,KAAM,EAAE,CAAE;AAC5D,aAAK,UAAU,KAAK;AACpB,eAAO,KAAK,QAAQ;AAAA,MACrB;AACA,YAAM,WAAW,WAAY;AAAA,QAC5B,OAAO,KAAK,UAAW,KAAM;AAAA,QAC7B,MAAM,KAAK;AAAA,MACZ,CAAE;AACF,WAAK,QAAQ,OAAO;AACpB,WAAK,UAAU;AACf,aAAO,KAAK,QAAQ;AAAA,IACrB;AAGA,QAAK,CAAE,KAAK,WAAW,CAAE,KAAK,QAAQ,MAAO;AAC5C,aAAO;AAAA,IACR;AACA,SAAK,UAAU,KAAK,QAAQ;AAC5B,WAAO,KAAK,QAAQ;AAAA,EACrB;AACD;;;ADtCA,IAAM,eAAe,gBAAgB,IAAsB,gBAAiB;AAE5E,IAAM,eAAmC;AAAA,EACxC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE;AAAA,EAC7B,aAAa;AAAA,IACZ,UAAU,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE;AAAA,IACjC,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE;AAAA,EACjC;AAAA,EACA,SAAS;AACV;AAKA,IAAM,aAAa;AAEZ,IAAM,YAAQ,aAAAC,eAAa;AAAA,EACjC,MAAM;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACT,KACC,OACA;AAAA,MACC,SAAS,EAAE,UAAU,QAAQ;AAAA,IAC9B,GAIC;AACD,YAAM,YAAY,WAAW;AAC7B,YAAM,YAAY,UAAU;AAC5B,YAAM,OAAO;AAEb,YAAM,UAAU;AAAA,IACjB;AAAA,IAEA,IAAK,OAAO,EAAE,QAAQ,GAAsC;AAC3D,mBAAa,KAAM,MAAM,IAAK;AAC9B,YAAM,KAAK,MAAO,QAAQ,EAAG,IAAI;AACjC,YAAM,KAAK,MAAM,QAAS,QAAQ,EAAG;AAErC,YAAM,UAAU;AAAA,IACjB;AAAA,IAEA,OAAQ,OAAO,EAAE,QAAQ,GAAwC;AAChE,mBAAa,KAAM,MAAM,IAAK;AAC9B,YAAM,KAAK,QAAQ,OAAO;AAAA,QACzB,OAAO,QAAS,MAAM,KAAK,KAAM,EAAE,OAAQ,CAAE,CAAEC,GAAG,MAAOA,QAAO,OAAQ;AAAA,MACzE;AAEA,YAAM,KAAK,QAAQ,MAAM,KAAK,MAAM,OAAQ,CAAEA,QAAQA,QAAO,OAAQ;AAErE,YAAM,UAAU;AAAA,IACjB;AAAA,IAEA,SAAU,OAAO,EAAE,QAAQ,GAA0C;AACpE,mBAAa,KAAM,MAAM,IAAK;AAC9B,YAAM,KAAK,QAAQ;AAEnB,YAAM,UAAU;AAAA,IACjB;AAAA,IAEA,OAAQ,OAAO,EAAE,QAAQ,GAAqD;AAC7E,mBAAa,KAAM,MAAM,IAAK;AAC9B,YAAM,QAAQ,MAAM,KAAK,MAAO,QAAQ,MAAM,EAAG;AAEjD,YAAM,aAAa;AAAA,QAClB,GAAG;AAAA,QACH,GAAG,QAAQ;AAAA,MACZ;AAEA,YAAM,KAAK,MAAO,QAAQ,MAAM,EAAG,IAAI;AAEvC,YAAM,UAAU;AAAA,IACjB;AAAA,IAEA,YACC,OACA;AAAA,MACC;AAAA,IACD,GAMC;AACD,YAAM,QAAQ,MAAM,KAAK,MAAO,QAAQ,EAAG;AAE3C,UAAK,CAAE,OAAQ;AACd,cAAM,IAAI,yBAA0B,EAAE,SAAS,EAAE,SAAS,QAAQ,GAAG,EAAE,CAAE;AAAA,MAC1E;AAEA,mBAAa,KAAM,MAAM,IAAK;AAE9B,YAAM,cAAU,uCAAkB,OAAO,QAAQ,IAAK;AACtD,UAAI,aAAc,gBAAgB,UAAU,QAAQ,aAAa,SAAS,eAAgB;AAC1F,kBAAY,WAAW,MAAM,YAAY;AAEzC,UAAK,SAAU;AACd,gBAAQ,YAAQ,gCAAY,QAAQ,OAAO,QAAQ,KAAM;AACzD,gBAAQ,aAAa;AAErB,cAAM,WAAW,oBAAqB,KAAM;AAAA,MAC7C,OAAO;AACN,cAAM,SAAS,KAAM,EAAE,MAAM,QAAQ,MAAM,OAAO,QAAQ,OAAO,YAAY,UAAU,CAAE;AAAA,MAC1F;AAEA,YAAM,UAAU;AAAA,IACjB;AAAA,IAEA,MAAO,OAAO,EAAE,SAAS,EAAE,SAAAC,SAAQ,EAAE,GAA8C;AAClF,UAAKA,aAAY,YAAa;AAC7B,qBAAa,MAAM;AACnB,cAAM,YAAY,WAAW,MAAM;AAEnC,cAAM,UAAU;AAAA,MACjB;AAEA,YAAM,YAAY,UAAU,MAAM;AAAA,IACnC;AAAA,IAEA,KAAM,OAAQ;AACb,UAAK,aAAa,OAAO,GAAI;AAC5B,qBAAa,KAAM,MAAM,IAAK;AAAA,MAC/B;AACA,YAAM,OAAO,aAAa,KAAK;AAC/B,UAAK,MAAO;AACX,cAAM,OAAO;AACb,cAAM,UAAU;AAAA,MACjB,OAAO;AACN,cAAM,OAAO,MAAM,YAAY;AAAA,MAChC;AAAA,IACD;AAAA,IAEA,oBAAqB,OAAO,EAAE,SAAS,EAAE,SAAAA,SAAQ,EAAE,GAA8C;AAChG,mBAAa,MAAM;AACnB,YAAM,OAAO,MAAM,YAAaA,QAAQ;AACxC,YAAM,UAAU;AAAA,IACjB;AAAA,IAEA,KAAM,OAAQ;AACb,YAAM,OAAO,aAAa,KAAK;AAC/B,UAAK,aAAa,OAAO,GAAI;AAC5B,qBAAa,KAAK;AAAA,MACnB;AACA,UAAK,MAAO;AACX,cAAM,OAAO;AACb,cAAM,UAAU;AAAA,MACjB;AAAA,IACD;AAAA,EACD;AACD,CAAE;AAEF,IAAM,sBAAsB,CAAE,UAA4B;AACzD,SAAO,MAAM,SAAS;AAAA,IACrB,CAAE,EAAE,OAAO,YAAY,UAAU,MAA+B,OAAO,KAAM,KAAM,EAAE,UAAU,WAAW;AAAA,EAC3G;AACD;AAGO,IAAM,aAAa,CAAE,UAAuC,MAAO,UAAW,EAAE;AAEhF,IAAM,4BAA4B,CAAE,UAC1C,MAAO,UAAW,EAAE,YAAY;AAE1B,IAAM,2BAA2B,CAAE,UACzC,MAAO,UAAW,EAAE,YAAY;AAE1B,IAAM,kBAAc,aAAAC,kBAAgB,YAAY,CAAE,EAAE,MAAM,MAAO,KAAM;AAEvE,IAAM,0BAAsB,aAAAA,kBAAgB,YAAY,CAAE,EAAE,MAAM,MAAO,KAAM;AAE/E,IAAM,gBAAgB,CAAE,UAAuC,MAAO,UAAW,EAAE;AAEnF,IAAM,2BAAuB,aAAAA;AAAA,EAAgB;AAAA,EAAqB;AAAA,EAAa,CAAE,OAAO,UAC9F,MAAM,IAAK,CAAEF,QAAQ,MAAOA,GAAG,CAAE;AAClC;AAEO,IAAM,cAAc,CAAE,OAAmCA,QAC/D,MAAO,UAAW,EAAE,KAAK,MAAOA,GAAG,KAAK;AAElC,IAAM,0BAAsB,aAAAE;AAAA,EAAgB;AAAA,EAAY,CAAE,EAAE,MAAM,MACxE,OAAO,OAAQ,KAAM,EAAE,OAAQ,CAAE,aAAc,SAAS,SAAS,WAAW,CAAE;AAC/E;;;AHtMA,IAAM,cAAc;AAEb,IAAM,8BAA8B;AAEpC,IAAM,kCAA8B,sDAAsB;AAAA,EAChE,KAAK;AAAA,EACL,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,IACP,cAAU,gBAAI,SAAS,WAAY;AAAA,IACnC,YAAQ,gBAAI,WAAW,WAAY;AAAA,EACpC;AAAA,EACA,WAAW,CAAE,OAAQ,oBAAqB,EAAG;AAAA,EAC7C,cAAc,gBAAgB;AAAA,EAC9B,SAAS;AAAA,IACR,KAAK,MAAM,yBAAsB,cAAAC,YAAS,CAAE;AAAA,IAC5C,KAAK,CAAEC,QAAQ,gBAAa,cAAAD,YAAS,GAAGC,GAAG;AAAA,IAC3C,gBAAgB,CAAEA,QAAgB;AACjC,aAAO,gBAAa,cAAAD,YAAS,GAAGC,GAAG,GAAG,SAASA;AAAA,IAChD;AAAA,IACA,QAAQ,CAAE,OAAO,WAAqC,CAAC,MAAO;AAC7D,YAAM,UAAU,wBAAqB,cAAAD,YAAS,CAAE;AAEhD,YAAM,iBAAiB,OAAO,OAAQ,OAAQ,EAAE,IAAK,CAAE,UAAW,MAAM,KAAM;AAE9E,UAAK,eAAe,SAAU,KAAM,GAAI;AACvC,cAAM,IAAI,mCAAoC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAE;AAAA,MACtE;AAEA,YAAM,cAAc,OAAO,KAAM,OAAQ;AACzC,YAAMC,UAAK,kCAAY,MAAM,WAAY;AAEzC,wBAAAC;AAAA,QACC,MAAM,QAAQ,IAAK;AAAA,UAClB,IAAAD;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA;AAAA,QACD,CAAE;AAAA,MACH;AAEA,aAAOA;AAAA,IACR;AAAA,IACA,QAAQ,CAAE,YAAa;AACtB,wBAAAC;AAAA,QACC,MAAM,QAAQ,OAAQ;AAAA,UACrB,OAAO;AAAA,QACR,CAAE;AAAA,MACH;AAAA,IACD;AAAA,IACA,QAAQ,CAAED,QAAQ;AACjB,wBAAAC,YAAU,MAAM,QAAQ,OAAQD,GAAG,CAAE;AAAA,IACtC;AAAA,IACA,aAAa,CAAE,SAAU;AACxB,wBAAAC;AAAA,QACC,MAAM,QAAQ,YAAa;AAAA,UAC1B,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,QACb,CAAE;AAAA,MACH;AAAA,IACD;AAAA,IACA,iBAAiB,CAAE,SAAU;AAC5B,wBAAAA;AAAA,QACC,MAAM,QAAQ,YAAa;AAAA,UAC1B,IAAI,KAAK;AAAA,UACT,MAAM,KAAK;AAAA,UACX,YAAY,KAAK;AAAA,UACjB,OAAO,CAAC;AAAA,QACT,CAAE;AAAA,MACH;AAAA,IACD;AAAA,EACD;AACD,CAAE;AAEF,IAAM,sBAAsB,CAC3B,OACI;AACJ,MAAI,gBAAgB,eAAY,cAAAF,YAAS,CAAE;AAE3C,aAAO,cAAAG;AAAA,IACN,CAAE,UAAmC,MAAM;AAAA,IAC3C,CAAE,iBAAkB;AACnB,SAAI,cAAc,OAAO,aAAa,KAAK,KAAM;AACjD,sBAAgB,aAAa;AAAA,IAC9B;AAAA,EACD;AACD;;;AK3GA,mBAA+B;;;ACC/B,yBAA+C;AAK/C,IAAM,eAAe;AACrB,IAAM,WAAW;AACjB,IAAM,qBAAqB,GAAI,YAAa;AAqBrC,IAAM,YAAY;AAAA,EACxB,OAAO,UAAM,gCAAY,EAAE,IAAmC,GAAI,QAAS,GAAI,kBAAmB,EAAG;AAAA,EAErG,KAAK,CAAEC,WAAsB,kBAC5B,gCAAY,EAAE,IAAoC,GAAI,QAAS,GAAI,YAAa,IAAI;AAAA,IACnF,QAAQ,EAAE,SAAAA,SAAQ;AAAA,EACnB,CAAE;AAAA,EAEH,SAAS,CAAE,gBACV,gCAAY,EAAE,IAAK,iBAAiB,cAAc,SAAS;AAAA,IAC1D,QAAQ;AAAA,MACP,SAAS;AAAA,IACV;AAAA,EACD,CAAE;AAAA,EAEH,WAAW,CAAE,gBACZ,gCAAY,EAAE,IAAK,iBAAiB,cAAc,SAAS;AAAA,IAC1D,QAAQ;AAAA,MACP,SAAS;AAAA,IACV;AAAA,EACD,CAAE;AACJ;;;AChDO,IAAM,gBAAgB,CAAE,SAC9B,OAAO,QAAS,IAAK,EAAE,OAAiC,CAAE,KAAK,CAAE,KAAK,KAAM,MAAO;AAClF,MAAK,GAAI,IAAI;AAAA,IACZ,SAAS,SAAS,CAAC;AAAA,IACnB,OAAO,MAAM,OAAQ,CAAE,OAAO,QAAS,SAAU,KAAK,SAAS,IAAK,CAAE;AAAA,EACvE;AACA,SAAO;AACR,GAAG,CAAC,CAAE;;;ACLA,IAAM,qBAAqB,YAA8C;AAC/E,QAAM,WAAW,MAAM,UAAU,MAAM;AACvC,SAAO,cAAe,SAAS,KAAK,IAAK;AAC1C;;;ACPO,IAAM,YAAY;;;AJKlB,SAAS,2BAA2B;AAC1C,QAAM,kBAAc,6BAAe;AAEnC,QAAM,uBAAuB,MAC5B,YAAY,cAAe;AAAA,IAC1B,UAAU,CAAE,SAAU;AAAA,IACtB,SAAS;AAAA,EACV,CAAE;AAEH,SAAO,EAAE,qBAAqB;AAC/B;;;AKfA,IAAAC,UAAuB;AACvB,IAAAC,gBAA0B;AAC1B,IAAAC,2BAA0C;AAC1C,2BAOO;AACP,IAAAC,oBAA8B;AAC9B,IAAAC,6BAA+B;AAC/B,IAAAC,iBAAsB;AACtB,IAAAC,gBAA4B;AAC5B,IAAAC,iBAAuC;AACvC,IAAAC,cAWO;AACP,IAAAC,gBAAmB;;;AC5BnB,IAAAC,gBAA6C;AAItC,IAAM,kBAAkB,MAAM;AACpC,aAAO,cAAAC,eAAa,WAAY;AACjC;;;ACNA,IAAAC,gBAA6C;AAItC,IAAM,gBAAgB,MAAM;AAClC,aAAO,cAAAC,eAAa,aAAc;AACnC;;;ACNA,IAAAC,gBAAwB;;;ACAxB,YAAuB;AACvB,mBAA0C;AAC1C,IAAAC,gBAAiC;AAyBjC,IAAM,6BAAyB,4BAAyD,MAAU;AAElG,IAAM,uBAAuC;AAAA,EAC5C,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,QAAQ;AACT;AAEO,IAAM,0BAA0B,CAAE,EAAE,SAAS,MAAgC;AACnF,QAAM,CAAE,SAAS,UAAW,IAAU,eAA4B,oBAAqB;AACvF,QAAM,EAAE,gBAAgB,YAAY,aAAa,QAAI,gCAAkB;AAAA,IACtE,OAAO;AAAA,IACP,cAAc;AAAA,EACf,CAAE;AAEF,QAAM,gBAAgB,MAAM;AAC3B,iBAAc,EAAG;AAAA,EAClB;AAEA,QAAM,gBAAgB,MAAM;AAC3B,eAAY,oBAAqB;AAAA,EAClC;AAEA,SACC;AAAA,IAAC,uBAAuB;AAAA,IAAvB;AAAA,MACA,OAAQ;AAAA,QACP,QAAQ;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,QACA,SAAS;AAAA,UACR;AAAA,UACA;AAAA,UACA;AAAA,QACD;AAAA,MACD;AAAA;AAAA,IAEE;AAAA,EACH;AAEF;AAEO,IAAM,sBAAsB,MAAM;AACxC,QAAMC,eAAU,yBAAY,sBAAuB;AACnD,MAAK,CAAEA,UAAU;AAChB,UAAM,IAAI,MAAO,8DAA+D;AAAA,EACjF;AACA,SAAOA;AACR;;;AC7EA,IAAAC,gBAAwB;AACxB,8BAAyD;;;ACDzD,IAAAC,gBAA8C;AAKvC,IAAM,mBAAmB,MAA+C;AAC9E,aAAO,wBAAU;AAAA,IAChB,UAAU,CAAE,SAAU;AAAA,IACtB,SAAS;AAAA,IACT,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,EACvB,CAAE;AACH;;;ACZA,IAAAC,gBAA8B;AAIvB,IAAM,mBAAmB,MAAM;AACrC,aAAO,6BAAe,mBAAoB;AAC3C;AAEO,IAAM,sBAAsB,MAAM;AACxC,QAAM,iBAAa,6BAAe,mBAAoB;AACtD,SAAO,OAAO,KAAM,UAAW;AAChC;;;AFAA,IAAM,2BAA2B,CAAE,MAA6B,WAAoB;AACnF,QAAM,SAAmB,CAAC;AAC1B,aAAY,OAAO,MAAO;AACzB,SAAM,GAAI,EAAE,QAAQ,QAAS,CAAE,YAAmC;AACjE,UAAK,CAAC,QAAQ,WAAW,QAAS;AACjC,eAAO,KAAM,GAAI;AAAA,MAClB;AAAA,IACD,CAAE;AAAA,EACH;AACA,SAAO;AACR;AAEA,IAAM,mBAAmB,CAAE,cAAwB,oBAAyC;AAC3F,QAAM,MAAM,IAAI,IAAK,YAAa;AAClC,SAAO,gBAAgB,OAAQ,CAAE,aAAsB,CAAE,IAAI,IAAK,QAAS,CAAE;AAC9E;AAEA,IAAM,oCAA2D;AAAA,EAChE,OAAO,CAAC;AAAA,EACR,YAAY,CAAC;AAAA,EACb,QAAQ,CAAC;AACV;AAEO,IAAM,2BAA2B,MAA6B;AACpE,QAAM,eAAW,wBAAAC,qBAAkB;AACnC,QAAM,kBAAkB,iBAAiB;AACzC,QAAM,EAAE,MAAM,UAAU,IAAI,iBAAiB;AAC7C,QAAM,mBAAmB,oBAAoB;AAE7C,QAAM,yBAAqB,uBAAS,MAAM,gBAAgB,IAAK,CAAE,EAAE,IAAAC,IAAG,MAAOA,GAAG,GAAG,CAAE,eAAgB,CAAE;AAEvG,QAAM,iBAAa,uBAAS,MAAM;AACjC,QAAK,CAAE,QAAQ,CAAE,UAAW;AAC3B,aAAO,CAAC;AAAA,IACT;AACA,WAAO,yBAA0B,MAAM,SAAS,EAAG;AAAA,EACpD,GAAG,CAAE,MAAM,QAAS,CAAE;AAEtB,QAAM,aAAS,uBAAS,MAAM;AAC7B,QAAK,CAAE,MAAO;AACb,aAAO,CAAC;AAAA,IACT;AAEA,WAAO,iBAAkB,OAAO,KAAM,IAAK,GAAG,gBAAiB;AAAA,EAChE,GAAG,CAAE,MAAM,gBAAiB,CAAE;AAE9B,MAAK,aAAa,CAAE,QAAQ,CAAE,UAAW;AACxC,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA,OAAO;AAAA,EACR;AACD;;;AF7DO,IAAM,aAAa,MAAM;AAC/B,QAAM;AAAA,IACL,SAAS,EAAE,QAAQ;AAAA,EACpB,IAAI,oBAAoB;AACxB,QAAM,aAAa,yBAAyB;AAE5C,aAAO,uBAAS,MAAM;AACrB,UAAM,gBAAgB,OAAO,QAAS,OAAQ,EAAE,OAAQ,CAAE,CAAE,EAAE,QAAS,MAAO,QAAS;AAKvF,QAAK,cAAc,WAAW,GAAI;AACjC,aAAO;AAAA,IACR;AAEA,WAAO,cAAc,OAAoB,CAAE,KAAK,CAAE,GAAI,GAAG,UAAW;AACnE,YAAM,UAAU,WAAY,GAAI,KAAK,CAAC;AACtC,UAAK,UAAU,GAAI;AAClB,eAAO;AAAA,MACR;AACA,aAAO,IAAI,OAAQ,CAAE,QAAS,QAAQ,SAAU,GAAI,CAAE;AAAA,IACvD,GAAG,CAAC,CAAE;AAAA,EACP,GAAG,CAAE,SAAS,UAAW,CAAE;AAC5B;;;AK7BA,IAAAC,iBAA+D;AAC/D,IAAAC,gBAAqB;AASrB,eAAsB,kBAAmB,EAAE,SAAAC,SAAQ,GAAa;AAC/D,QAAM,QAAQ,eAAY,eAAAC,YAAS,CAAE;AAErC,MAAKD,aAAY,WAAY;AAC5B,UAAM,UAAU,UAAW;AAAA,MAC1B,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,SAAS,iBAAkB,OAAO,6BAA0B,eAAAC,YAAS,CAAE,CAAE;AAAA,IAC1E,CAAE;AAAA,EACH,OAAO;AACN,UAAM,UAAU,QAAS;AAAA,MACxB,OAAO,MAAM;AAAA,MACb,OAAO,MAAM;AAAA,MACb,SAAS,iBAAkB,OAAO,8BAA2B,eAAAA,YAAS,CAAE,CAAE;AAAA,IAC3E,CAAE;AAAA,EACH;AAEA,qBAAAC,YAAU,MAAM,QAAQ,MAAO,EAAE,SAAAF,SAAQ,CAAE,CAAE;AAC9C;AAEA,SAAS,iBAAkB,OAAsB,aAA6B;AAC7E,QAAM,WAAW,OAAO,KAAM,MAAM,KAAM;AAC1C,QAAM,iBAAiB,OAAO,KAAM,YAAY,KAAM;AAEtD,SAAO;AAAA,IACN,OAAO,SAAS,OAAQ,CAAEG,QAAQ,CAAE,eAAe,SAAUA,GAAG,CAAE;AAAA,IAClE,SAAS,eAAe,OAAQ,CAAEA,QAAQ,CAAE,SAAS,SAAUA,GAAG,CAAE;AAAA,IACpE,UAAU,SAAS,OAAQ,CAAEA,QAAQ;AACpC,aAAOA,OAAM,YAAY,aAAS,oBAAM,MAAM,MAAOA,GAAG,CAAE,UAAM,oBAAM,YAAY,MAAOA,GAAG,CAAE;AAAA,IAC/F,CAAE;AAAA,EACH;AACD;;;ACzCA,IAAAC,SAAuB;AACvB,IAAAC,aAA4B;AAC5B,IAAAC,eAAmB;;;ACFnB,IAAAC,SAAuB;AACvB,mBAA6B;AAC7B,gBAA2E;AAMpE,IAAM,kBAAkB,CAAE,EAAE,aAAa,GAAG,MAA6B;AAC/E,QAAM;AAAA,IACL,SAAS,EAAE,cAAc;AAAA,EAC1B,IAAI,oBAAoB;AAExB,SACC,qCAAC,qBAAQ,OAAQ,aAAc,WAAU,OAAM,oBAAkB,QAChE,qCAAC,qBACA,qCAAC,oBAAiB,cAAa,aAAc,MAAK,QAAO,SAAU,eAAgB,MAClF,qCAAC,6BAAa,UAAS,QAAO,CAC/B,CACD,CACD;AAEF;AACA,IAAM,uBAAmB,kBAAQ,oBAAW,EAAG,CAAE,EAAE,MAAM,OAAS;AAAA,EACjE,kBAAkB;AAAA,IACjB,eAAe;AAAA,IACf,WAAW;AAAA,MACV,OAAO,MAAM,QAAQ,OAAO;AAAA,IAC7B;AAAA,EACD;AACD,EAAI;;;AC9BJ,IAAAC,SAAuB;AACvB,IAAAC,aAAsE;AACtE,IAAAC,eAAmB;AAKZ,IAAM,eAA4C;AAAA,EACxD,YAAQ,iBAAI,UAAU,WAAY;AAAA,EAClC,WAAO,iBAAI,SAAS,WAAY;AAAA,EAChC,gBAAY,iBAAI,gBAAgB,WAAY;AAC7C;AAEO,IAAM,aAAa,MAAM;AAC/B,QAAM;AAAA,IACL,SAAS,EAAE,SAAS,WAAW;AAAA,EAChC,IAAI,oBAAoB;AACxB,QAAM,mBAAmB,yBAAyB;AAElD,QAAM,gBAAgB,CAAE,UAAsB;AAC7C,eAAY,CAAE,UAAY,EAAE,GAAG,MAAM,CAAE,KAAM,GAAG,CAAE,KAAM,KAAM,EAAE,EAAI;AAAA,EACrE;AAEA,SACC,qCAAC,2BACA,qCAAC,uBAAS,SAAU,MAAM,cAAe,QAAS,KACjD;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ,aAAa;AAAA,MACrB,SAAU,QAAQ;AAAA,MAClB,QAAS,qCAAC,mBAAK,MAAO,QAAS,IAAK,EAAE,IAAI,OAAO,GAAI,OAAQ,iBAAiB,OAAO,QAAS;AAAA;AAAA,EAC/F,CACD,GACA,qCAAC,uBAAS,SAAU,MAAM,cAAe,OAAQ,KAChD;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ,aAAa;AAAA,MACrB,SAAU,QAAQ;AAAA,MAClB,QAAS,qCAAC,mBAAK,MAAO,QAAS,IAAK,EAAE,IAAI,OAAO,GAAI,OAAQ,iBAAiB,MAAM,QAAS;AAAA;AAAA,EAC9F,CACD,GACA,qCAAC,uBAAS,SAAU,MAAM,cAAe,YAAa,KACrD;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ,aAAa;AAAA,MACrB,SAAU,QAAQ;AAAA,MAClB,QACC,qCAAC,mBAAK,MAAO,QAAS,IAAK,EAAE,IAAI,OAAO,GAAI,OAAQ,iBAAiB,WAAW,QAAS;AAAA;AAAA,EAE3F,CACD,CACD;AAEF;AAQA,IAAM,kBAAkB,CAAE,EAAE,OAAO,QAAQ,QAAQ,MAClD,qCAAC,oBAAM,WAAU,OAAM,YAAW,UAAS,KAAM,KAAM,MAAO,KAC7D;AAAA,EAAC;AAAA;AAAA,IACA,MAAO;AAAA,IACP;AAAA,IACA,IAAK;AAAA,MACJ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,iBAAiB;AAAA,QAChB,OAAO;AAAA,MACR;AAAA,IACD;AAAA;AACD,GACA,qCAAC,yBAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,iBAAiB,KAC1D,KACH,GACE,MACH;;;AFlEM,IAAM,gBAAgB,MAAM;AAClC,QAAM;AAAA,IACL,SAAS,EAAE,SAAS,WAAW;AAAA,EAChC,IAAI,oBAAoB;AAExB,QAAM,eAAe,CAAE,QAAoB;AAC1C,eAAY,CAAE,UAAY,EAAE,GAAG,MAAM,CAAE,GAAI,GAAG,MAAM,EAAI;AAAA,EACzD;AAEA,QAAM,aAAa,OAAO,KAAM,OAAQ,EAAE,OAAQ,CAAE,QAA2B,QAAS,GAAiB,CAAE;AAE3G,QAAM,gBAAgB,WAAW,SAAS;AAE1C,SACC,qCAAC,oBAAM,WAAU,OAAM,YAAW,UAAS,gBAAe,mBACzD,qCAAC,oBAAM,WAAU,OAAM,KAAM,KAAM,YAAW,UAAS,UAAS,UAC7D,WAAW,IAAK,CAAE,QACnB;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,OAAQ,aAAc,GAAI;AAAA,MAC1B,UAAW,MAAM,aAAc,GAAI;AAAA,MACnC,IAAK;AAAA,MACL,MAAK;AAAA;AAAA,EACN,CACC,CACH,GACE,iBACD;AAAA,IAAC;AAAA;AAAA,MACA,iBAAc,iBAAI,iBAAiB,WAAY;AAAA,MAC/C,IAAK,EAAE,QAAQ,gBAAgB;AAAA;AAAA,EAChC,CAEF;AAEF;AAEA,IAAM,SAAS;AAAA,EACd,yBAAyB;AAAA,IACxB,SAAS;AAAA,IACT,YAAY;AAAA,EACb;AAAA,EACA,+BAA+B;AAAA,IAC9B,SAAS;AAAA,EACV;AACD;;;AGrDA,IAAAC,SAAuB;AACvB,uBAA2C;AAC3C,IAAAC,gBAA2B;AAC3B,IAAAC,aAAgG;AAChG,IAAAC,eAAmB;AAMZ,IAAM,iBAAiB,MAAM;AACnC,QAAM;AAAA,IACL,SAAS,EAAE,QAAQ;AAAA,EACpB,IAAI,oBAAoB;AACxB,QAAM,iBAAa,0BAAe;AAAA,IACjC,SAAS;AAAA,IACT,kBAAkB;AAAA,EACnB,CAAE;AAEF,QAAM,gBAAgB,OAAO,OAAQ,OAAQ,EAAE,KAAM,CAAE,UAAW,KAAM;AAExE,SACC,4DACC,qCAAC,sBAAQ,WAAQ,iBAAI,WAAW,WAAY,GAAI,WAAU,SACzD;AAAA,IAAC;AAAA;AAAA,MACA,OAAM;AAAA,MACN,MAAO;AAAA,MACP,UAAW,WAAW;AAAA,MACpB,OAAG,uBAAY,UAAW;AAAA;AAAA,IAE5B,qCAAC,4BAAW,UAAS,QAAO;AAAA,EAC7B,CACD,GACA;AAAA,IAAC;AAAA;AAAA,MACA,IAAK;AAAA,QACJ,UAAU;AAAA,MACX;AAAA,MACA,cAAe;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA,iBAAkB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACE,OAAG,wBAAa,UAAW;AAAA;AAAA,IAE7B;AAAA,MAAC;AAAA;AAAA,QACA,SACC,gBACG;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACA,KAAI;AAAA,cACJ,iBAAc,iBAAI,aAAa,WAAY;AAAA;AAAA,UAC5C;AAAA,QACA,IACA,CAAC;AAAA,QAEL,SAAU,WAAW;AAAA,QACrB,WAAQ,iBAAI,WAAW,WAAY;AAAA,QACnC,MAAO,qCAAC,4BAAW,UAAW,QAAS;AAAA;AAAA,IACxC;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACA,IAAK;AAAA,UACJ,aAAa;AAAA,QACd;AAAA;AAAA,IACD;AAAA,IACA,qCAAC,gCAAY,OAAQ,KAAM,QAAS,OACnC,qCAAC,gBAAW,CACb;AAAA,EACD,CACD;AAEF;;;ACzEA,IAAAC,SAAuB;AACvB,IAAAC,gBAA2B;AAC3B,IAAAC,aAAsD;AACtD,IAAAC,eAAmB;AAIZ,IAAM,qBAAqB,MAAM;AACvC,QAAM;AAAA,IACL,QAAQ,EAAE,YAAY,aAAa;AAAA,EACpC,IAAI,oBAAoB;AAExB,SACC,qCAAC,oBAAM,WAAU,OAAM,KAAM,KAAM,IAAK,EAAE,OAAO,OAAO,KACvD,qCAAC,kBAAI,IAAK,EAAE,UAAU,EAAE,KACvB;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,WAAS;AAAA,MACT,MAAO;AAAA,MACP,OAAQ;AAAA,MACR,iBAAc,iBAAI,UAAU,WAAY;AAAA,MACxC,UAAW,CAAE,MAA8C,aAAc,EAAE,OAAO,KAAM;AAAA,MACxF,YAAa;AAAA,QACZ,gBACC,qCAAC,6BAAe,UAAS,WACxB,qCAAC,4BAAW,UAAW,QAAS,CACjC;AAAA,MAEF;AAAA;AAAA,EACD,CACD,CACD;AAEF;;;ACjCA,IAAAC,SAAuB;AACvB,IAAAC,gBAAyB;AACzB,iCAAqC;AACrC,IAAAC,oBAAkC;AAClC,IAAAC,aAAuC;AACvC,IAAAC,eAAmB;AAEnB,IAAM,cAAc;AAEb,IAAM,2BAA2B,MAAM;AAC7C,QAAM,CAAE,qBAAqB,eAAgB,QAAI,iDAAsB,WAAY;AACnF,QAAM,CAAE,wBAAwB,yBAA0B,QAAI,wBAAU,CAAE,mBAAoB;AAE9F,SACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,WAAQ,iBAAI,iBAAiB,WAAY;AAAA,MACzC,aAAc,CAAE,oBAAqB;AACpC,YAAK,CAAE,iBAAkB;AACxB,0BAAgB;AAAA,QACjB;AAEA,kCAA2B,KAAM;AAAA,MAClC;AAAA;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,IAAK,EAAE,OAAO,QAAQ,aAAa,SAAS;AAAA,QAC5C,KAAM;AAAA,QACN,KAAM;AAAA;AAAA,IACP;AAAA,IACA,qCAAC,yBAAoB;AAAA,EACtB;AAEF;AAEA,IAAM,sBAAsB,MAAM;AACjC,SACC,qCAAC,kBAAI,GAAI,KACR,qCAAC,yBAAW,SAAU,eACnB;AAAA,IACD;AAAA,IACA;AAAA,EACD,CACD,GACA,qCAAC,UAAG,GACJ,qCAAC,yBAAW,SAAU,eACnB;AAAA,IACD;AAAA,IACA;AAAA,EACD,CACD,CACD;AAEF;;;ACrDA,IAAAC,2BAA0D;AAC1D,IAAAC,6BAAkD;AAClD,IAAAC,iBAAuC;AAIvC,IAAI,YAAY;AAET,IAAM,cAAc,CAAEC,QAAgB;AAC5C,qBAAAC,YAAU,MAAM,QAAQ,OAAQD,GAAG,CAAE;AAErC,cAAY;AACb;AAEO,IAAM,WAAW,YAAY;AACnC,QAAM,eAAe;AAErB,cAAY;AACb;AAEO,IAAM,kBAAkB,MAAM;AAIrC,IAAM,iBAAiB,MAAM;AAC5B,QAAM,sBAAkB,6CAAmB;AAC3C,QAAM,uBAAmB,gDAAsB;AAE/C,mBAAiB,gBAAgB;AAEjC,aAAO,2BAAAE,qBAAY,2BAA2B;AAAA,IAC7C,IAAI,iBAAiB;AAAA,IACrB,cAAc;AAAA,IACd,8BAA8B;AAAA,EAC/B,CAAE;AACH;;;ACnCA,IAAAC,SAAuB;AACvB,IAAAC,gBAAgC;AAGzB,IAAM,yBAAyB,CAAE,EAAE,IAAI,GAAG,MAAM,MACtD,qCAAC,iCAAgB,IAAK,EAAE,WAAW,iBAAiB,GAAG,GAAG,GAAM,GAAG,OAAQ;;;ACL5E,IAAAC,UAAuB;AACvB,IAAAC,gBAAmC;AAEnC,IAAAC,iBAA6C;AAC7C,IAAAC,cAAsE;AACtE,IAAAC,gBAAmB;;;ACLnB,IAAAC,iBAA6C;AAItC,IAAM,oBAAoB,MAAM;AACtC,aAAO,eAAAC,eAAa,oBAAqB;AAC1C;;;ACNA,IAAAC,UAAuB;AACvB,IAAAC,gBAAiC;AACjC,IAAAC,mCAAmC;AACnC,IAAAC,oBAA8F;AAC9F,IAAAC,gBAAiC;AACjC,IAAAC,cAcO;AACP,IAAAC,gBAAmB;;;ACpBnB,IAAAC,SAAuB;AACvB,IAAAC,2BAAqE;AACrE,IAAAC,oBAMO;AACP,IAAAC,gBAQO;AACP,IAAAC,aAAuF;AACvF,IAAAC,eAAmB;;;AChBnB,IAAM,oBAAkD;AAAA,EACvD,OAAO;AAAA,EACP,SAAS,CAAC;AACX;AAEO,IAAM,uBAAuB,CACnCC,QACqF;AACrF,QAAM,EAAE,MAAM,GAAG,KAAK,IAAI,iBAAiB;AAC3C,QAAM,YAAY,OAAQA,GAAG,KAAK;AAClC,SAAO,EAAE,GAAG,MAAM,MAAM,UAAU;AACnC;;;ADYA,IAAM,aAAiF;AAAA,EACtF,WAAW;AAAA,IACV,WAAO,iBAAI,QAAQ,WAAY;AAAA,IAC/B,MAAM,qCAAC,8BAAa,UAAW,WAAY;AAAA,EAC5C;AAAA,EACA,WAAW;AAAA,IACV,WAAO,iBAAI,QAAQ,WAAY;AAAA,IAC/B,MAAM,qCAAC,2BAAU,UAAW,WAAY;AAAA,EACzC;AAAA,EACA,OAAO;AAAA,IACN,WAAO,iBAAI,SAAS,WAAY;AAAA,IAChC,MAAM,qCAAC,mCAAkB,UAAW,WAAY;AAAA,EACjD;AAAA,EACA,QAAQ;AAAA,IACP,WAAO,iBAAI,UAAU,WAAY;AAAA,IACjC,MAAM,qCAAC,oCAAmB,UAAW,WAAY;AAAA,EAClD;AAAA,EACA,QAAQ;AAAA,IACP,WAAO,iBAAI,UAAU,WAAY;AAAA,IACjC,MAAM,qCAAC,oCAAmB,UAAW,WAAY;AAAA,EAClD;AACD;AAEO,IAAM,uBAAuB,CAAE;AAAA,EACrC;AAAA,EACA;AACD,MAGO;AACN,QAAM,EAAE,MAAM,WAAW,IAAI,qBAAsB,UAAW;AAC9D,QAAM,iBAAa,yBAAAC,2BAAwB;AAE3C,QAAM,uBACL,YAAY,QAAQ;AAAA,IACnB,CAAE,EAAE,OAAO,UAAU,QAAQ,KAAK,OAC/B;AAAA,MACD,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,MACP,eAAe,SAAS,OAAO,SAAS;AAAA,MACxC,SAAS;AAAA,IACV;AAAA,EACF,KAAK,CAAC;AAEP,SACC,4DACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAO,qCAAC,qCAAoB,UAAW,QAAS;AAAA,MAChD,OACC,qCAAC,oBAAM,eAAgB,OAAQ,KAAM,GAAI,YAAa,YACrD,qCAAC,kBAAI,cAAa,sBAAmB,iBAAI,WAAW,WAAY,CAAG,GACnE,qCAAC,sBACA,qCAAC,mBAAK,IAAK,EAAE,YAAY,EAAE,GAAI,MAAO,QAAS,OAAQ,WAAW,OAAQ,CAC3E,CACD;AAAA,MAED;AAAA;AAAA,EACD,GACA,qCAAC,wBAAQ,GACT,qCAAC,iCAAY,OAAQ,OACpB;AAAA,IAAC;AAAA;AAAA,MACA,UAAW,CAAE,UAAW,WAAY,CAAC,KAAM;AAAA,MAC3C,OAAQ;AAAA,MACR,SAAU,MAAM;AAAA,MAAC;AAAA,MACjB,kBAAmB;AAAA,MACnB,yBAA0B,CAAE,wBAC3B,qCAAC,oBAAM,eAAgB,OAAQ,MAAO,GAAI,YAAa,YACtD,qCAAC,kBAAI,SAAU,QAAS,IAAK,EAAE,IAAI,EAAE,KACpC;AAAA,QAAC;AAAA;AAAA,UACA,oBAAkB;AAAA,UAClB,OACC,aAAc,oBAAoB,OAAuB,GAAG,SAC5D,oBAAoB;AAAA,UAErB,WAAU;AAAA;AAAA,QAEV,qCAAC,mBAAK,UAAW,WACd,aAAc,oBAAoB,OAAuB,GAAG,QAC7D,qCAAC,2BAAU,UAAW,WAAY,CAEpC;AAAA,MACD,CACD,GACA,qCAAC,kBAAI,IAAK,EAAE,IAAI,KAAK,UAAU,QAAQ,GAAI,SAAU,UACpD;AAAA,QAAC;AAAA;AAAA,UACA,OAAQ,oBAAoB;AAAA,UAC5B,IAAK;AAAA,UACL,SAAQ;AAAA,UACR,UAAS;AAAA,UACT,IAAK;AAAA,YACJ,YAAY;AAAA,UACb;AAAA;AAAA,MACD,CACD,GACA,qCAAC,kCAAiB,WAAY,mBAAoB,UAAW,QAAS,GACtE;AAAA,QAAC;AAAA;AAAA,UACA,IAAK;AAAA,YACJ,IAAI;AAAA,UACL;AAAA,UACA,MAAO;AAAA,UACP,OAAQ,oBAAoB;AAAA;AAAA,MAC7B,CACD;AAAA;AAAA,EAEF,CACD,CACD;AAEF;AAEA,IAAM,8BAA0B,mBAAQ,mBAAS,EAAG,CAAE,EAAE,MAAM,OAAS;AAAA,EACtE,UAAU;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,OAAO;AAAA,EACR;AAAA,EACA,uBAAuB;AAAA,IACtB,GAAG,MAAM,WAAW;AAAA,IACpB,YAAY;AAAA,IACZ,SAAS,MAAM,QAAS,KAAK,GAAG,KAAK,CAAE;AAAA,IACvC,cAAc;AAAA,IACd,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,oBAAoB;AAAA,MACnB,OAAO,MAAM,QAAQ,KAAK;AAAA,MAC1B,SAAS;AAAA,IACV;AAAA,IACA,WAAW;AAAA,MACV,cAAc,MAAM,QAAS,GAAI;AAAA,MACjC,iBAAiB,MAAM,QAAQ,OAAO;AAAA,MACtC,oBAAoB;AAAA,QACnB,OAAO,MAAM,QAAQ,KAAK;AAAA,QAC1B,SAAS;AAAA,MACV;AAAA,IACD;AAAA,EACD;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AACX,EAAI;;;AExKJ,IAAAC,UAAuB;AAEvB,IAAAC,oBAA0B;AAC1B,IAAAC,gBAAoC;AACpC,IAAAC,aAUO;AACP,IAAAC,eAAmB;AAMZ,IAAM,uBAAuB,CAAE,EAAE,IAAAC,KAAI,QAAQ,MAAgE;AACnH,QAAM;AAAA,IACL,MAAM,EAAE,MAAM;AAAA,IACd;AAAA,EACD,IAAI,qBAAsBA,GAAG;AAC7B,QAAM,2BAAuB,0BAAe,EAAE,SAAS,WAAW,SAAS,0BAA0B,CAAE;AAEvG,MAAK,WAAY;AAChB,WAAO;AAAA,EACR;AAEA,QAAM,mBAAmB,UAAU,IAAI,iBAAiB;AAExD,SACC,8DACC,sCAAC,kBAAI,UAAW,cACf,sCAAC,oBAAiB,SACjB;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,UAAW,UAAU;AAAA,MACrB,MAAO;AAAA,MACL,OAAG,wBAAa,oBAAqB;AAAA,MACvC,SAAU,CAAE,MAAmB;AAC9B,YAAK,UAAU,GAAI;AAClB,sCAAa,oBAAqB,EAAE,QAAS,CAAE;AAC/C,kBAASD,GAAG;AAAA,QACb;AAAA,MACD;AAAA;AAAA,IAEA,sCAAC,qCAAoB,UAAW,QAAS;AAAA,EAC1C,CACD,CACD,GACA,sCAAC,sBACA;AAAA,IAAC;AAAA;AAAA,MACA,cAAe;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA,iBAAkB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACE,OAAG,wBAAa,oBAAqB;AAAA,MACvC,SAAU,MAAM;AACf,oCAAa,oBAAqB,EAAE,QAAQ;AAC5C,gBAAS,EAAG;AAAA,MACb;AAAA;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,SAAU,qBAAqB;AAAA,QAC/B,cAAW;AAAA,QACX,YAAaA;AAAA;AAAA,IACd;AAAA,EACD,CACD,CACD;AAEF;AAEA,IAAMC,wBAAmB,mBAAQ,qBAAW,EAAG,CAAE,EAAE,MAAM,OAAS;AAAA,EACjE,kBAAkB;AAAA,IACjB,eAAe;AAAA;AAAA,IACf,WAAW;AAAA,MACV,OAAO,MAAM,QAAQ,OAAO;AAAA;AAAA,IAC7B;AAAA,EACD;AAAA,EACA,QAAQ;AAAA,EACR,OAAO;AACR,EAAI;AAEJ,IAAM,iBAAiB,CAAE,EAAE,UAAU,MAAM,MAC1C;AAAA,EAAC;AAAA;AAAA,IACA,oBAAkB;AAAA,IAClB,WAAY;AAAA,IACZ,OAAQ,OAAI,iBAAI,iCAAiC,WAAY,EAC3D,QAAS,cAAc,MAAM,SAAS,CAAE,EACxC;AAAA,MACA;AAAA,MACA,UAAU,QAAI,iBAAI,YAAY,WAAY,QAAI,iBAAI,aAAa,WAAY;AAAA,IAC5E,CAAE;AAAA;AAAA,EAEH,sCAAC,cAAO,QAAU;AACnB;AAGD,IAAM,mBAAmB,CAAE,EAAE,SAAS,MACrC;AAAA,EAAC;AAAA;AAAA,IACA,oBAAkB;AAAA,IAClB,WAAY;AAAA,IACZ,OAAQ;AAAA,IACR,SAAU,sCAAC,+BAAU,IAAK,EAAE,IAAI,EAAE,SAAM,iBAAI,yCAAoC,WAAY,CAAG;AAAA;AAAA,EAE/F,sCAAC,cAAO,QAAU;AACnB;;;AClHD,IAAAC,UAAuB;AACvB,IAAAC,gBAAoD;AAEpD,IAAAC,gBAAuC;AACvC,IAAAC,aAQO;AACP,IAAAC,eAAmB;AAanB,IAAM,cAAU,6BAAmD,IAAK;AAEjE,IAAM,6BAA6B,CAAE,EAAE,SAAS,MAAgC;AACtF,QAAM,CAAE,aAAa,cAAe,QAAI,wBAAkD,IAAK;AAE/F,QAAM,aAAa,CAAE,UAA0C;AAC9D,mBAAgB,KAAM;AAAA,EACvB;AAEA,QAAM,cAAc,MAAM;AACzB,mBAAgB,IAAK;AAAA,EACtB;AAEA,SACC,sCAAC,QAAQ,UAAR,EAAiB,OAAQ,EAAE,YAAY,aAAa,YAAY,KAC9D,UACA,CAAC,CAAE,eAAe,sCAAC,4BAA2B,GAAG,aAAc,CAClE;AAEF;AAEA,IAAM,WAAW;AAEjB,IAAM,2BAA2B,CAAE,EAAE,OAAO,IAAAC,IAAG,MAAsC;AACpF,QAAM,EAAE,YAAY,IAAI,sBAAsB;AAC9C,QAAM;AAAA,IACL,MAAM,EAAE,OAAO,QAAQ;AAAA,EACxB,IAAI,qBAAsBA,GAAG;AAC7B,QAAM,YAAY,MAAM;AACvB,gBAAaA,GAAG;AAEhB,gBAAY;AAAA,EACb;AAEA,QAAM,OACL,SAAS,QAAQ,aACd;AAAA,IACA;AAAA,IACA;AAAA,EACA,EACC,QAAS,MAAM,MAAM,SAAS,CAAE,EAChC,QAAS,MAAM,QAAQ,OAAO,SAAS,CAAE,QAC1C;AAAA,IACA;AAAA,IACA;AAAA,EACA;AAEJ,SACC,sCAAC,qBAAO,MAAI,MAAC,SAAU,aAAc,mBAAkB,UAAW,UAAS,QAC1E,sCAAC,0BAAY,IAAK,UAAW,SAAQ,QAAO,YAAW,UAAS,KAAM,GAAI,IAAK,EAAE,YAAY,EAAE,KAC9F,sCAAC,wCAAuB,OAAM,SAAQ,OACpC,iBAAI,sBAAsB,WAAY,CACzC,GACA,sCAAC,gCACA,sCAAC,gCAAkB,SAAQ,SAAQ,OAAM,qBACtC,iBAAI,YAAY,WAAY,GAC9B,sCAAC,yBAAW,SAAQ,aAAY,WAAU,UAAO,QACxC,OAAO,MAChB,GACE,IACH,CACD,GACA,sCAAC,gCACA,sCAAC,qBAAO,OAAM,aAAY,SAAU,mBACjC,iBAAI,WAAW,WAAY,CAC9B,GAEA;AAAA,IAAC;AAAA;AAAA,MAEA,WAAS;AAAA,MACT,SAAQ;AAAA,MACR,OAAM;AAAA,MACN,SAAU;AAAA;AAAA,QAER,iBAAI,UAAU,WAAY;AAAA,EAC7B,CACD,CACD;AAEF;AAEO,IAAM,wBAAwB,MAAM;AAC1C,QAAM,mBAAe,0BAAY,OAAQ;AAEzC,MAAK,CAAE,cAAe;AACrB,UAAM,IAAI,MAAO,wEAAyE;AAAA,EAC3F;AAEA,SAAO;AACR;;;ACnHA,IAAAC,UAAuB;AACvB,IAAAC,gBAAiC;AACjC,IAAAC,cAQO;AAEA,IAAM,mBAAmB,CAAsB,UACrD,sCAAC,wCAAyB,cAAY,MAAC,SAAQ,UAAS,sBAAuB,EAAE,SAAS,IAAI,GAAM,GAAG,OAAQ;AAKzG,IAAM,kBAAkB,CAAE,UAChC,sCAAC,yBAAwB,GAAG,OAAQ,MAAK,UAAS,WAAU,+BAA8B,cAAW,UACpG,sCAAC,kCAAiB,UAAS,QAAO,CACnC;AAQM,IAAM,eAAe,CAAE,EAAE,UAAU,IAAAC,KAAI,GAAG,MAAM,MAA0B;AAChF,SACC;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACL,IAAKA;AAAA,MACL,QAAS,CAAE;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,MAAwC;AACvC,eACC;AAAA,UAAC;AAAA;AAAA,YACE,GAAG;AAAA,YACL,OAAQ;AAAA,YACR,WAAY;AAAA,YACZ,MAAK;AAAA,YACL,IAAK;AAAA,cACJ,iBAAiB,gBAAgB,qBAAqB;AAAA,YACvD;AAAA;AAAA,UAEE,SAAU;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD,CAAE;AAAA,UACA,sBAAsB,sCAAC,yBAAsB,OAAQ,qBAAsB;AAAA,QAC9E;AAAA,MAEF;AAAA;AAAA,EACD;AAEF;AAEA,IAAM,4BAAwB,oBAAQ,KAAM,EAAG,CAAE,EAAE,MAAM,OAAS;AAAA,EACjE,UAAU;AAAA,EACV,MAAM;AAAA,EACN,KAAK;AAAA,EACL,WAAW,eAAgB,MAAM,QAAS,GAAI,CAAE;AAAA,EAChD,OAAO,MAAM,QAAQ,OAAO;AAC7B,EAAI;AAEJ,IAAM,4BAAwB,oBAAQ,eAAI;AAAA;AAAA;AAAA,qBAGpB,CAAE,EAAE,MAAM,MAAO,MAAM,QAAQ,KAAK,OAAQ;AAAA;;;AL9C3D,IAAM,YAAY,CAAE;AAAA,EAC1B,IAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,MAAuB;AACtB,QAAM,cAAU,sBAAuB,IAAK;AAC5C,QAAM;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACX,QAAI,+BAAa;AAAA,IAChB,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,EACb,CAAE;AACF,QAAM,CAAE,kBAAkB,mBAAoB,QAAI,wBAAU,EAAG;AAC/D,QAAM,EAAE,WAAW,IAAI,sBAAsB;AAE7C,QAAM,iBAAa,2BAAe;AAAA,IACjC,SAAS;AAAA,IACT,kBAAkB;AAAA,EACnB,CAAE;AAEF,QAAM,cAAe,qBAAqBA,OAAM,YAAY,WAAW,WAAY,CAAE;AAErF,SACC,8DACC,sCAAC,qBAAM,GAAI,KACV;AAAA,IAAC;AAAA;AAAA,MACA,MAAO,QAAS,KAAM;AAAA,MACtB,MAAO,SAAS;AAAA,MAChB,WAAU;AAAA,MACV,OAAQ,QAAQ,SAAS,sBAAsB,EAAE;AAAA,MACjD,QAAS,CAAE,GAAG,GAAI;AAAA;AAAA,IAElB;AAAA,MAAC;AAAA;AAAA,QACA,KAAM;AAAA,QACN,OAAK;AAAA,QACL,gBAAc;AAAA,QACd;AAAA,QACA,aAAc,cAAc;AAAA,QAC5B,OAAM;AAAA,QACN,eAAgB;AAAA,QAChB,UAAW;AAAA,QACX;AAAA,QACA,uBAAsB;AAAA;AAAA,MAEtB,sCAAC,mBAAkB,GAAG,sBAAuB;AAAA,MAC7C,sCAAC,aAAU,UAAW,WAAY,SAAU,CAAC,CAAE,SAC5C,YACD;AAAA,QAAC;AAAA;AAAA,UACA,KAAM;AAAA,UACN,IAAK;AAAA,UACL,SAAQ;AAAA,UACN,GAAG,iBAAiB;AAAA;AAAA,MACvB,IAEA,sCAAC,yCAAoB,OAAQ,OAAQ,IAAK,wBAAa,SAAQ,WAAU,CAE3E;AAAA,MACA,sCAAC,mBAAI,WAAY,wBAChB,sCAAC,wBAAqB,IAAKA,KAAK,SAAU,qBAAsB,CACjE;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA,WAAU;AAAA,UACV,WAAY;AAAA,UACZ,WAAQ,kBAAI,gBAAgB,WAAY;AAAA;AAAA,QAExC,sCAAC,0BAAW,MAAK,QAAS,OAAG,yBAAa,UAAW,GAAI,cAAW,kBACnE,sCAAC,kCAAiB,UAAS,QAAO,CACnC;AAAA,MACD;AAAA,IACD;AAAA,EACD,CACD,GACA;AAAA,IAAC;AAAA;AAAA,MACE,OAAG,sBAAU,UAAW;AAAA,MAC1B,cAAe;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA,iBAAkB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,IAAK,EAAE,UAAU,QAAQ;AAAA,QACzB,SAAU,MAAM;AACf,qBAAW,MAAM;AACjB,uBAAa;AAAA,QACd;AAAA;AAAA,MAEA,sCAAC,0BAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,eAAe,SACxD,kBAAI,UAAU,WAAY,CAC7B;AAAA,IACD;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACA,SAAU,MAAM;AACf,qBAAW,MAAM;AACjB,qBAAY,EAAE,IAAAA,KAAI,MAAM,CAAE;AAAA,QAC3B;AAAA;AAAA,MAEA,sCAAC,0BAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,cAAc,SACvD,kBAAI,UAAU,WAAY,CAC7B;AAAA,IACD;AAAA,EACD,CACD;AAEF;AAEA,IAAM,2BAAuB,oBAAQ,4BAAgB;AAAA,EACpD,mBAAmB,CAAE,SAAkB,CAAE,CAAE,eAAe,mBAAoB,EAAE,SAAU,IAAK;AAChG,CAAE;AAAA,EACD,CAAE,EAAE,aAAa,kBAAkB,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAYtB,qBAAqB,cAAc,YAAY,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAStD,oBAAoB,YAAY,QAAS;AAAA;AAAA;AAAA;AAIhE;AAEA,IAAM,gBAAY,oBAAQ,iBAAK;AAAA,EAC9B,mBAAmB,CAAE,SAAkB,CAAE,CAAE,YAAY,SAAU,EAAE,SAAU,IAAK;AACnF,CAAE,EAA8C,CAAE,EAAE,OAAO,UAAU,QAAQ,OAAS;AAAA,EACrF,SAAS;AAAA,EACT,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAc,MAAM,QAAS,GAAI;AAAA,EACjC,QAAQ,mBAAoB,EAAE,UAAU,SAAS,MAAM,CAAE;AAAA,EACzD,SAAS,KAAM,MAAM,QAAS,CAAE,CAAE;AAAA,EAClC,YAAY,WAAW,MAAM,QAAS,CAAE,IAAI;AAAA,EAC5C,UAAU;AACX,EAAI;AAEJ,IAAM,qBAAqB,CAAE,EAAE,UAAU,SAAS,MAAM,MAA8D;AACrH,MAAK,SAAU;AACd,WAAO,aAAc,MAAM,QAAQ,MAAM,IAAK;AAAA,EAC/C;AAEA,MAAK,UAAW;AACf,WAAO,aAAc,MAAM,QAAQ,UAAU,IAAK;AAAA,EACnD;AAEA,SAAO;AACR;AAEA,IAAM,gBAAgB,CAAE,aAAsB;AAC7C,QAAM,aAAS,qDAAoB,UAAU,QAAS;AAEtD,MAAK,OAAO,SAAU;AACrB,WAAO;AAAA,EACR;AAEA,SAAO,OAAO;AACf;;;AMzNA,IAAAC,UAAuB;AAGvB,IAAAC,iBAA2C;AAC3C,IAAAC,cAA6C;AAC7C,IAAAC,gBAAmB;AAIZ,IAAM,kBAAkB,CAC9B,aACA,SACA,oBAC8B;AAC9B,QAAM,iBAAiB,gBAAgB,UAAU,KAAK,YAAY,SAAS;AAC3E,QAAM,iBAAiB,WAAW,QAAQ,WAAW;AACrD,QAAM,0BAA0B,kBAAkB;AAElD,MAAK,yBAA0B;AAC9B,WAAO;AAAA,EACR;AACA,MAAK,gBAAiB;AACrB,WAAO;AAAA,EACR;AACA,MAAK,gBAAiB;AACrB,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAIA,IAAM,WAAW;AAAA,EAChB,iBAAiB;AAAA,IAChB,cAAU,kBAAI,2BAA2B,WAAY;AAAA,IACrD,iBAAa,kBAAI,uBAAuB,WAAY;AAAA,IACpD,MAAM,sCAAC,4BAAU,OAAM,WAAU,UAAS,SAAQ;AAAA,EACnD;AAAA,EACA,QAAQ;AAAA,IACP,cAAU,kBAAI,0BAA0B,WAAY;AAAA,IACpD,iBAAa,kBAAI,4CAA4C,WAAY;AAAA,IACzE,MAAM,sCAAC,4BAAU,OAAM,WAAU,UAAS,SAAQ;AAAA,EACnD;AAAA,EACA,QAAQ;AAAA,IACP,cAAU,kBAAI,uCAAuC,WAAY;AAAA,IACjE,iBAAa,kBAAI,6CAA6C,WAAY;AAAA,IAC1E,MAAM,sCAAC,kCAAgB,OAAM,WAAU,UAAS,SAAQ;AAAA,EACzD;AACD;AAMO,IAAM,WAAW,CAAE,EAAE,aAAa,MAAmD;AAC3F,QAAM;AAAA,IACL,QAAQ,EAAE,eAAe,WAAW;AAAA,IACpC,SAAS,EAAE,cAAc;AAAA,EAC1B,IAAI,oBAAoB;AAExB,UAAS,cAAe;AAAA,IACvB,KAAK;AACJ,aAAO,sCAAC,kBAAiB,GAAG,SAAS,QAAS,SAAU,eAAgB;AAAA,IACzE,KAAK;AACJ,aAAO,sCAAC,kBAAiB,GAAG,SAAS,QAAS,aAAc,YAAa,SAAU,eAAgB;AAAA,IACpG,KAAK;AACJ,aACC;AAAA,QAAC;AAAA;AAAA,UACE,GAAG,SAAS;AAAA,UACd,SAAU,MAAM;AACf,0BAAc;AACd,0BAAc;AAAA,UACf;AAAA;AAAA,MACD;AAAA,EAEH;AACD;AAUO,IAAM,iBAA4C,CAAE,EAAE,SAAS,aAAa,UAAU,aAAa,KAAK,MAC9G;AAAA,EAAC;AAAA;AAAA,IACA,OAAQ;AAAA,IACR,IAAK;AAAA,IACL,YAAW;AAAA,IACX,KAAM;AAAA,IACN,UAAW;AAAA,IACX,aAAc;AAAA;AAAA,EAEZ;AAAA,EACF;AAAA,IAAC;AAAA;AAAA,MACA,IAAK;AAAA,QACJ,OAAO;AAAA,MACR;AAAA;AAAA,IAEA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,aAAY,OAAM,aAClD,QACH;AAAA,IACE,eACD;AAAA,MAAC;AAAA;AAAA,QACA,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,IAAK;AAAA,UACJ,SAAS;AAAA,UACT,OAAO;AAAA,UACP,gBAAgB;AAAA,QACjB;AAAA;AAAA,MAEA,sCAAC,cAAK,QAAO;AAAA,MACb;AAAA,QAAC;AAAA;AAAA,UACA,OAAQ;AAAA,YACP,UAAU;AAAA,YACV,UAAU;AAAA,YACV,cAAc;AAAA,UACf;AAAA;AAAA,QAEE;AAAA,MACH;AAAA,MACA,sCAAC,cAAK,SAAQ;AAAA,IACf;AAAA,EAEF;AAAA,EACA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,WAAU,OAAM,aAChD,WACH;AAAA,EACA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,WAAU,OAAM,aAClD,sCAAC,oBAAK,OAAM,aAAY,SAAQ,WAAU,WAAU,UAAS,SAAU,eACpE,kBAAI,qBAAqB,WAAY,CACxC,CACD;AACD;;;ARlHM,IAAM,oBAAoB,CAAE,EAAE,SAAS,MAA+B;AAC5E,QAAM;AAAA,IACL,QAAQ,EAAE,gBAAgB,YAAY;AAAA,EACvC,IAAI,oBAAoB;AACxB,QAAM,aAAa,kBAAkB;AACrC,QAAMC,gBAAW,eAAAC,eAAY;AAC7B,QAAM,UAAU,WAAW;AAC3B,QAAM,CAAE,cAAc,cAAe,IAAI,WAAW;AACpD,QAAM,qBAAqB,sBAAsB;AAEjD,+BAAW,MAAM;AAChB,UAAM,UAAU,CAAE,UAA0B;AAC3C,UAAK,MAAM,QAAQ,QAAS,MAAM,WAAW,MAAM,UAAY;AAC9D,cAAM,yBAAyB;AAC/B,cAAM,eAAe;AACrB,YAAK,MAAM,UAAW;AACrB,UAAAD,UAAU,MAAM,QAAQ,KAAK,CAAE;AAC/B;AAAA,QACD;AACA,QAAAA,UAAU,MAAM,QAAQ,KAAK,CAAE;AAAA,MAChC;AAAA,IACD;AACA,WAAO,iBAAkB,WAAW,SAAS;AAAA,MAC5C,SAAS;AAAA,IACV,CAAE;AACF,WAAO,MAAM,OAAO,oBAAqB,WAAW,OAAQ;AAAA,EAC7D,GAAG,CAAEA,SAAS,CAAE;AAEhB,MAAK,CAAE,YAAY,QAAS;AAC3B,WAAO,sCAAC,gBAAW;AAAA,EACpB;AAEA,QAAM,eAAe,gBAAiB,aAAa,SAAS,kBAAmB;AAE/E,MAAK,cAAe;AACnB,WAAO,sCAAC,YAAS,cAA8B;AAAA,EAChD;AAEA,QAAM,mBAAmB,SAAS,UAAU;AAE5C,QAAM,eAAe,mBAAmB,SAAS,KAAK,CAAE;AAExD,SACC,sCAAC,kCACA,sCAAC,oBAAK,IAAK,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,IAAI,KAC/D;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ;AAAA,MACR,UAAW;AAAA,MACX,oBAAqB,CAAE;AAAA;AAAA,IAErB,oBAAoB,IAAK,CAAE,EAAE,IAAAE,KAAI,MAAM,MACxC,sCAAC,gBAAa,KAAMA,KAAK,IAAKA,OAC3B,CAAE,EAAE,WAAW,mBAAmB,cAAc,aAAa,MAC9D;AAAA,MAAC;AAAA;AAAA,QACA,IAAKA;AAAA,QACL;AAAA,QACA,aAAc,CAAE,aAAsB;AACrC,UAAAF;AAAA,YACC,MAAM,QAAQ,OAAQ;AAAA,cACrB,OAAO;AAAA,gBACN,IAAAE;AAAA,gBACA,OAAO;AAAA,cACR;AAAA,YACD,CAAE;AAAA,UACH;AAAA,QACD;AAAA,QACA,UAAW;AAAA,QACX,UAAW,YAAY;AAAA,QACvB,sBAAuB,EAAE,GAAG,cAAc,OAAO,aAAa;AAAA,QAC9D,mBAAoB;AAAA;AAAA,IACrB,CAEF,CACC;AAAA,EACH,CACD,CACD;AAEF;AAEA,IAAM,aAAa,MAClB,sCAAC,qBAAM,YAAW,UAAS,KAAM,KAAM,IAAK,IAAK,IAAK,KAAM,UAAS,SAAQ,QAAO,UACnF,sCAAC,0BAAuB,UAAS,SAAQ,GACzC,sCAAC,gBAAa,SAAQ,aAAY,WAAU,MAAK,OAAM,wBACpD,kBAAI,oCAAoC,WAAY,CACvD,GACA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,WAAU,OAAM,wBAChD;AAAA,EACD;AAAA,EACA;AACD,CACD,CACD;AAID,IAAM,mBAAe,oBAAQ,sBAAW,EAAsB,CAAE,EAAE,OAAO,QAAQ,OAAS;AAAA,EACzF,wBAAwB;AAAA,IACvB,GAAK,MAAM,WAAY,OAAyC;AAAA,EACjE;AACD,EAAI;AAEJ,IAAM,aAAa,MAAM;AACxB,QAAMF,gBAAW,eAAAC,eAAY;AAC7B,QAAM,QAAQ,gBAAgB;AAE9B,QAAM,UAAU,CAAE,WAAiC;AAClD,IAAAD,UAAU,MAAM,QAAQ,SAAU,MAAO,CAAE;AAAA,EAC5C;AAEA,SAAO,CAAE,OAAO,OAAQ;AACzB;AAEA,IAAM,wBAAwB,MAAyB;AACtD,QAAM,aAAa,kBAAkB;AACrC,QAAM;AAAA,IACL,QAAQ,EAAE,gBAAgB,YAAY;AAAA,EACvC,IAAI,oBAAoB;AACxB,QAAM,UAAU,WAAW;AAE3B,QAAM,sBAAkB;AAAA,IACvB,MACC,WAAW,IAAK,CAAE,cAAgB;AAAA,MACjC,GAAG;AAAA,MACH,YAAY,SAAS,MAAM,YAAY;AAAA,IACxC,EAAI;AAAA,IACL,CAAE,UAAW;AAAA,EACd;AAEA,QAAM,sBAAkB,uBAAS,MAAM;AACtC,QAAK,YAAY,SAAS,GAAI;AAC7B,aAAO,gBAAgB,OAAQ,CAAE,aAAc,SAAS,WAAW,SAAU,YAAY,YAAY,CAAE,CAAE;AAAA,IAC1G;AACA,WAAO;AAAA,EACR,GAAG,CAAE,aAAa,YAAY,eAAgB,CAAE;AAEhD,aAAO,uBAAS,MAAM;AACrB,QAAK,WAAW,QAAQ,SAAS,GAAI;AACpC,aAAO,gBAAgB,OAAQ,CAAE,aAAc,QAAQ,SAAU,SAAS,EAAG,CAAE;AAAA,IAChF;AACA,WAAO;AAAA,EACR,GAAG,CAAE,iBAAiB,OAAQ,CAAE;AACjC;;;ASvJO,SAAS,yBAAyB;AACxC,QAAM,iBAAiB;AAEvB,iBAAe,IAAI,YAAY,MAAO,OAAQ,GAAG,wBAAwB;AAC1E;AAEO,SAAS,2BAA2B;AAC1C,QAAM,iBAAiB;AAEvB,iBAAe,IAAI,YAAY,MAAO,OAAQ,GAAG,0BAA0B;AAC5E;;;ACvBA,IAAAG,UAAuB;AACvB,IAAAC,gBAAyB;AACzB,IAAAC,iBAAwC;AACxC,IAAAC,cASO;AAEP,IAAMC,YAAW;AAEjB,IAAM,oBAAoB,CAAE,EAAE,UAAU,QAAQ,MAC/C,sCAAC,sBAAO,MAAI,MAAC,SAAoB,mBAAkBA,WAAW,UAAS,QACpE,QACH;AAGD,IAAM,yBAAyB,CAAE,EAAE,SAAS,MAC3C,sCAAC,2BAAY,IAAKA,WAAW,SAAQ,QAAO,YAAW,UAAS,KAAM,GAAI,IAAK,EAAE,YAAY,EAAE,KAC9F,sCAAC,0CAAwB,OAAM,aAAY,GACzC,QACH;AAGD,IAAM,2BAA2B,CAAE,EAAE,SAAS,MAC7C,sCAAC,iCAAgB,QAAU;AAG5B,IAAM,+BAA+B,CAAE,UACtC,sCAAC,iCAAkB,SAAQ,SAAQ,OAAM,eAAc,SAAQ,QAAO,eAAc,UAAW,GAAG,OAAQ;AAe3G,IAAM,2BAA2B,CAAE,EAAE,QAAQ,MAAuC;AACnF,QAAM,CAAE,cAAc,eAAgB,QAAI,wBAAU,KAAM;AAC1D,QAAM,EAAE,QAAQ,SAAS,QAAQ,IAAI;AAErC,QAAM,YAAY,YAAY;AAC7B,oBAAiB,IAAK;AACtB,UAAM,QAAQ,OAAO;AACrB,oBAAiB,KAAM;AAAA,EACxB;AACA,SACC,sCAAC,iCACE,UACD,sCAAC,sBAAO,SAAQ,QAAO,OAAM,aAAY,SAAU,OAAO,UACvD,OAAO,KACV,GAEC,WACD,sCAAC,sBAAO,SAAQ,QAAO,OAAM,aAAY,SAAU,QAAQ,UACxD,QAAQ,KACX,GAED,sCAAC,sBAAO,SAAQ,aAAY,OAAM,aAAY,SAAU,WAAY,SAAU,gBAC3E,QAAQ,KACX,CACD;AAEF;AAEA,kBAAkB,QAAQ;AAC1B,kBAAkB,UAAU;AAC5B,kBAAkB,cAAc;AAChC,kBAAkB,UAAU;AAE5B,IAAM,YAAY,MAAM;AACvB,QAAM,CAAE,QAAQ,SAAU,QAAI,wBAAU,KAAM;AAE9C,QAAM,OAAO,MAAM,UAAW,IAAK;AACnC,QAAM,QAAQ,MAAM,UAAW,KAAM;AAErC,SAAO,EAAE,QAAQ,MAAM,MAAM;AAC9B;;;A3B3CA,IAAM,KAAK;AAMJ,IAAM,EAAE,OAAO,gBAAgB,QAAI,qBAAAC,eAAa;AAAA,EACtD;AAAA,EACA,WAAW;AAAA,EACX,kBAAkB,CAAE,QAAQ,EAAG;AAAA,EAC/B,QAAQ,MAAM;AACb,mDAAgB,EAAG;AAEnB,2BAAuB;AAAA,EACxB;AAAA,EACA,SAAS,MAAM;AACd,mDAAgB,MAAO;AAEvB,6BAAyB;AAAA,EAC1B;AACD,CAAE;AAEK,SAAS,oBAAoB;AACnC,QAAMC,WAAU,cAAc;AAC9B,QAAM,EAAE,OAAO,WAAW,IAAI,gBAAgB;AAC9C,QAAM,EAAE,MAAM,uBAAuB,OAAO,wBAAwB,QAAQ,wBAAwB,IAAI,UAAU;AAElH,QAAM,EAAE,aAAa,SAAS,WAAW,aAAa,IAAI,WAAW;AAErE,QAAM,qBAAqB,MAAM;AAChC,uBAAAC,YAAU,MAAM,QAAQ,oBAAqB,EAAE,SAAS,WAAW,CAAE,CAAE;AACvE,2BAAuB;AAAA,EACxB;AAEA,mBAAiB;AAEjB,SACC,sCAAC,uCACA,sCAAC,6BAAc,UAAW,sCAAC,2BAAsB,KAChD,sCAAC,kCACA,sCAAC,+BACA,sCAAC,wCACA,sCAAC,qBAAM,GAAI,GAAI,IAAK,GAAI,OAAM,QAAO,WAAU,OAAM,YAAW,YAC/D,sCAAC,qBAAM,OAAM,QAAO,WAAU,OAAM,KAAM,KACzC,sCAAC,yCAAiB,IAAK,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,IAAI,KACxE,sCAAC,0BAAuB,UAAS,WAAU,OACzC,kBAAI,iBAAiB,WAAY,CACpC,GACA,sCAAC,0BAAqB,CACvB,GACA;AAAA,IAAC;AAAA;AAAA,MACA,IAAK,EAAE,YAAY,OAAO;AAAA,MAC1B,UAAW;AAAA,MACX,SAAU,MAAM;AACf,YAAKD,UAAU;AACd,gCAAsB;AACtB;AAAA,QACD;AAEA,mBAAW;AAAA,MACZ;AAAA;AAAA,EACD,CACD,CACD,GACA;AAAA,IAAC;AAAA;AAAA,MACA,IAAK;AAAA,QACJ,SAAS;AAAA,QACT,eAAe;AAAA,QACf,QAAQ;AAAA,MACT;AAAA;AAAA,IAEA,sCAAC,mBAAI,IAAK,GAAI,IAAK,KAClB,sCAAC,qBAAM,WAAU,OAAM,gBAAe,gBAAe,KAAM,KAAM,IAAK,EAAE,IAAI,IAAI,KAC/E,sCAAC,mBAAI,IAAK,EAAE,UAAU,EAAE,KACvB,sCAAC,wBAAmB,CACrB,GACA,sCAAC,oBAAe,CACjB,GACA,sCAAC,mBAAc,CAChB;AAAA,IACA,sCAAC,yBAAQ;AAAA,IACT;AAAA,MAAC;AAAA;AAAA,QACA,IAAK;AAAA,QACL,IAAK;AAAA,UACJ,UAAU;AAAA,UACV,WAAW;AAAA,QACZ;AAAA;AAAA,MAEA,sCAAC,qBAAkB,UAAW,cAAe;AAAA,IAC9C;AAAA,EACD,GAEA,sCAAC,wCACA;AAAA,IAAC;AAAA;AAAA,MACA,WAAS;AAAA,MACT,MAAK;AAAA,MACL,OAAM;AAAA,MACN,SAAQ;AAAA,MACR,SAAU;AAAA,MACV,UAAW,CAAEA;AAAA,MACb,SAAU;AAAA;AAAA,QAER,kBAAI,gBAAgB,WAAY;AAAA,EACnC,CACD,CACD,CACD,CACD,GACA,sCAAC,8BAAyB,GACxB,2BACD,sCAAC,yBACA,sCAAC,4BAAa,SAAU,wBAAyB,MAAO,SACvD,sCAAC,kBAAkB,OAAlB,UACE,kBAAI,4BAA4B,WAAY,CAC/C,CACD,GACA,sCAAC,kBAAkB,SAAlB,MACA,sCAAC,kBAAkB,aAAlB,UACE,kBAAI,kDAAkD,WAAY,CACrE,GACA,sCAAC,kBAAkB,aAAlB,UACE,kBAAI,mEAAmE,WAAY,CACtF,CACD,GACA;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACA,SAAU;AAAA,QACT,SAAS;AAAA,UACR,WAAO,kBAAI,WAAW,WAAY;AAAA,UAClC,QAAQ,MAAM;AACb,+BAAmB;AAAA,UACpB;AAAA,QACD;AAAA,QACA,SAAS;AAAA,UACR,WAAO,kBAAI,mBAAmB,WAAY;AAAA,UAC1C,QAAQ,YAAY;AACnB,kBAAM,QAAQ;AACd,mCAAuB;AACvB,uBAAW;AAAA,UACZ;AAAA,QACD;AAAA,MACD;AAAA;AAAA,EACD,CACD,CAEF;AAEF;AAEA,IAAM,cAAc,CAAE,EAAE,SAAS,GAAG,MAAM,MACzC,sCAAC,0BAAW,MAAK,SAAQ,OAAM,aAAY,SAAU,SAAU,cAAW,SAAU,GAAG,SACtF,sCAAC,wBAAM,UAAS,SAAQ,CACzB;AAGD,IAAM,wBAAwB,MAC7B,sCAAC,mBAAI,MAAK,SAAQ,IAAK,EAAE,WAAW,QAAQ,GAAG,EAAE,KAChD,sCAAC,qBAAM,UAAS,SAAQ,IAAK,EAAE,IAAI,GAAG,UAAU,KAAK,WAAW,SAAS,KACxE,sCAAC,oBAAS,kBAAI,wBAAwB,WAAY,CAAG,CACtD,CACD;AAGD,IAAM,mBAAmB,MAAM;AAC9B,QAAMA,WAAU,cAAc;AAE9B,+BAAW,MAAM;AAChB,UAAM,qBAAqB,CAAE,UAA8B;AAC1D,UAAKA,UAAU;AACd,cAAM,eAAe;AAAA,MACtB;AAAA,IACD;AAEA,WAAO,iBAAkB,gBAAgB,kBAAmB;AAE5D,WAAO,MAAM;AACZ,aAAO,oBAAqB,gBAAgB,kBAAmB;AAAA,IAChE;AAAA,EACD,GAAG,CAAEA,QAAQ,CAAE;AAChB;AAEA,IAAM,aAAa,MAAM;AACxB,aAAO,2BAAa;AAAA,IACnB,YAAY,MAAM,kBAAmB,EAAE,SAAS,WAAW,CAAE;AAAA,IAC7D,WAAW,YAAY;AACtB,8DAA2B,KAAM;AAEjC,UAAK,gBAAgB,GAAI;AACxB,cAAM,SAAS;AAAA,MAChB;AAAA,IACD;AAAA,EACD,CAAE;AACH;AAEA,IAAM,uBAAuB,MAAM;AAClC,QAAM,UAAU,WAAW;AAC3B,QAAM,aAAa,gBAAgB;AAEnC,SACC;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,OAAQ,UAAU,GAAI,QAAQ,MAAO,MAAO,YAAY,MAAO,KAAK,YAAY;AAAA;AAAA,EACjF;AAEF;;;AX1OO,IAAM,qBAAqB,MAAM;AACvC,QAAM,eAAW,yBAAAE,qBAAkB;AACnC,QAAM,EAAE,MAAM,UAAU,IAAI,gBAAgB;AAC5C,QAAM,EAAE,MAAM,aAAa,QAAI,yBAAAC,4BAAyB;AACxD,QAAM,EAAE,MAAM,uBAAuB,OAAO,wBAAwB,QAAQ,wBAAwB,IAAI,UAAU;AAClH,QAAM,EAAE,qBAAqB,IAAI,yBAAyB;AAE1D,QAAM,EAAE,QAAQ,QAAI,0DAAwB;AAE5C,QAAM,6BAA6B,QAAS,4BAA4B,OAAO,CAAE,EAAE;AAEnF,MAAK,CAAE,4BAA6B;AACnC,WAAO;AAAA,EACR;AAEA,QAAM,kBAAkB,MAAM;AAC7B,QAAK,UAAU,SAAU;AACxB,4BAAsB;AACtB;AAAA,IACD;AAEA,cAAU;AACV,yBAAqB;AAAA,EACtB;AAEA,SACC,8DACC,sCAAC,uBAAQ,WAAQ,kBAAI,iBAAiB,WAAY,GAAI,WAAU,SAC/D,sCAAC,0BAAW,MAAK,QAAO,SAAU,iBAAkB,IAAK,EAAE,iBAAiB,MAAM,KACjF,sCAAC,0BAAuB,UAAS,QAAO,CACzC,CACD,GACE,2BACD,sCAAC,yBACA,sCAAC,kBAAkB,OAAlB,UAA0B,kBAAI,4BAA4B,WAAY,CAAG,GAC1E,sCAAC,kBAAkB,SAAlB,MACA,sCAAC,kBAAkB,aAAlB,EAA8B,IAAK,EAAE,IAAI,EAAE,SACzC;AAAA,IACD;AAAA,IACA;AAAA,EACD,CACD,CACD,GACA;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACA,SAAU;AAAA,QACT,QAAQ;AAAA,UACP,WAAO,kBAAI,aAAa,WAAY;AAAA,UACpC,QAAQ;AAAA,QACT;AAAA,QACA,SAAS;AAAA,UACR,WAAO,kBAAI,mBAAmB,WAAY;AAAA,UAC1C,QAAQ,YAAY;AACnB,kBAAM,aAAa;AACnB,mCAAuB;AACvB,sBAAU;AACV,iCAAqB;AAAA,UACtB;AAAA,QACD;AAAA,MACD;AAAA;AAAA,EACD,CACD,CAEF;AAEF;;;AuC/EA,IAAAC,UAAuB;AAEvB,IAAAC,mCAAmC;AACnC,IAAAC,oBAA6B;AAC7B,IAAAC,cAAwB;AACxB,IAAAC,gBAAmB;AAUZ,IAAM,iCAAiC,CAAE,UAAqB;AACpE,QAAM,iBAAiB,MAAM;AAE7B,QAAM,mBAAmB,MAAM;AAC9B,UAAM,eAAe,gBAAiB,kBAAmB;AAEzD,QAAK,CAAE,gBAAiB;AACvB,YAAM,IAAI,MAAO,0EAA2E;AAAA,IAC7F;AAEA,UAAM,QAAQ,4BAA4B,QAAQ,SAAU,cAAc,eAAe,QAAS;AAClG,QAAK,OAAQ;AACZ,YAAM,gBAAiB,KAAM;AAAA,IAC9B;AAAA,EACD;AAEA,SACC,8DACC;AAAA,IAAC;AAAA;AAAA,MACA,UAAW,CAAE,MAAM;AAAA,MACnB,SAAU;AAAA,MACV,OAAK;AAAA,MACL,IAAK;AAAA,QACJ,sBAAsB;AAAA,UACrB,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,iBAAiB;AAAA,QAClB;AAAA,MACD;AAAA;AAAA,QAEE,kBAAI,2BAA2B,WAAY;AAAA,EAC9C,GACA,sCAAC,yBAAQ,CACV;AAEF;AAEA,SAAS,gBAAiB,QAAyB;AAClD,MAAI,IAAI;AACR,MAAI,eAAe,GAAI,MAAO,GAAI,CAAE;AAEpC,SAAQ,KAAE,qDAAoB,cAAc,QAAS,EAAE,SAAU;AAChE,mBAAe,GAAI,MAAO,GAAI,EAAE,CAAE;AAAA,EACnC;AAEA,SAAO;AACR;;;AC7DA,IAAAC,iBAA0B;AAC1B,IAAAC,iBAA6C;AAKtC,SAAS,gBAAgB;AAC/B,QAAMC,gBAAW,eAAAC,eAAY;AAE7B,gCAAW,MAAM;AAChB,YAAQ,IAAK,CAAE,UAAU,IAAK,SAAU,GAAG,UAAU,IAAK,UAAW,CAAE,CAAE,EAAE;AAAA,MAC1E,CAAE,CAAE,YAAY,WAAY,MAAO;AAClC,cAAM,EAAE,MAAM,YAAY,IAAI;AAC9B,cAAM,EAAE,MAAM,aAAa,IAAI;AAE/B,QAAAD;AAAA,UACC,MAAM,QAAQ,KAAM;AAAA,YACnB,SAAS;AAAA,cACR,OAAO,YAAY;AAAA,cACnB,OAAO,YAAY,KAAK;AAAA,YACzB;AAAA,YACA,UAAU;AAAA,cACT,OAAO,aAAa;AAAA,cACpB,OAAO,aAAa,KAAK;AAAA,YAC1B;AAAA,UACD,CAAE;AAAA,QACH;AAAA,MACD;AAAA,IACD;AAAA,EACD,GAAG,CAAEA,SAAS,CAAE;AAEhB,SAAO;AACR;;;AChCA,IAAAE,8BAA+B;AAC/B,IAAAC,2BAA0C;AAC1C,IAAAC,6BAAiC;AACjC,IAAAC,iBAAyF;AAMlF,SAAS,uBAAuB;AACtC,QAAM,cAAc,eAAe;AAEnC,iBAAe;AAEf,SAAO;AACR;AAEA,SAAS,iBAAiB;AACzB,aAAO,eAAAC,yBAAuB,eAAe,MAAM;AAClD,QAAK,CAAE,QAAQ,GAAI;AAClB;AAAA,IACD;AAEA,4DAA2B,IAAK;AAAA,EACjC,CAAE;AACH;AAEA,SAAS,iBAAiB;AACzB,mDAAkB,SAAS,sBAAsB,CAAE,SAAU;AAC5D,UAAM,WAAO,4CAAe;AAE5B,UAAM,UAAU,MAAM,aAAa,SAAU,2BAA4B;AAEzE,QAAK,CAAE,SAAU;AAChB;AAAA,IACD;AAEA,WAAO,kBAAmB;AAAA,MACzB,SAAS,KAAK,WAAW,YAAY,aAAa;AAAA,IACnD,CAAE;AAAA,EACH,CAAE;AACH;AAEA,SAAS,UAAU;AAClB,SAAO,kBAAe,eAAAC,YAAS,CAAE;AAClC;;;A1C1BO,SAAS,OAAO;AACtB,qBAAAC,iBAAe,KAAM;AACrB,4BAAAC,iBAAe,KAAM;AAErB,oDAAiB,SAAU,2BAA4B;AAEvD,qCAAiB;AAAA,IAChB,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,6DAA2B;AAAA,IAC1B,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,kEAAgC;AAAA,IAC/B,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,iEAA+B,6BAA6B;AAAA,IAC3D,MAAM;AAAA,IACN,eAAe,CAAE,UAAW,MAAM,QAAQ,OAAO;AAAA,EAClD,CAAE;AAEF,iCAAAC,uBAAU,yCAAa,GAAG,MAAM;AAC/B,yBAAqB;AAAA,EACtB,CAAE;AACH;","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_store","createSlice","id","context","createSelector","getState","id","dispatch","subscribeWithSelector","context","React","import_react","import_editor_documents","import_editor_ui","import_editor_v1_adapters","import_icons","import_query","import_store","import_ui","import_i18n","import_store","useSelector","import_store","useSelector","import_react","import_utils","context","import_react","import_query","import_store","useActiveDocument","id","import_store","import_utils","context","getState","dispatch","id","React","import_ui","import_i18n","React","React","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_ui","import_i18n","import_editor_documents","import_editor_v1_adapters","import_store","id","dispatch","runCommand","React","import_icons","React","import_react","import_store","import_ui","import_i18n","import_store","useSelector","React","import_react","import_editor_styles_repository","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_documents","import_editor_ui","import_icons","import_ui","import_i18n","id","useOpenDocumentInNewTab","React","import_editor_ui","import_icons","import_ui","import_i18n","id","CustomIconButton","React","import_react","import_icons","import_ui","import_i18n","id","React","import_icons","import_ui","id","id","React","import_icons","import_ui","import_i18n","dispatch","useDispatch","id","React","import_react","import_icons","import_ui","TITLE_ID","createPanel","isDirty","dispatch","useActiveDocument","useActiveDocumentActions","React","import_editor_styles_repository","import_editor_ui","import_ui","import_i18n","import_react","import_store","dispatch","useDispatch","import_editor_current_user","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/hooks/use-prefetch-css-class-usage.ts","../src/api.ts","../src/components/css-class-usage/utils.ts","../service/css-class-usage-service.ts","../src/components/css-class-usage/types.ts","../src/components/class-manager/class-manager-panel.tsx","../src/hooks/use-classes-order.ts","../src/hooks/use-dirty-state.ts","../src/hooks/use-filters.ts","../src/components/search-and-filter/context.tsx","../src/hooks/use-filtered-css-class-usage.tsx","../src/hooks/use-css-class-usage.ts","../src/hooks/use-empty-css-class.ts","../src/save-global-classes.ts","../src/components/search-and-filter/components/filter/active-filters.tsx","../src/components/search-and-filter/components/filter/clear-icon-button.tsx","../src/components/search-and-filter/components/filter/filter-list.tsx","../src/components/search-and-filter/components/filter/css-class-filter.tsx","../src/components/search-and-filter/components/search/class-manager-search.tsx","../src/components/class-manager/class-manager-introduction.tsx","../src/components/class-manager/delete-class.ts","../src/components/class-manager/flipped-color-swatch-icon.tsx","../src/components/class-manager/global-classes-list.tsx","../src/hooks/use-ordered-classes.ts","../src/components/class-manager/class-item.tsx","../src/components/css-class-usage/components/css-class-usage-popover.tsx","../src/hooks/use-css-class-usage-by-id.ts","../src/components/css-class-usage/components/css-class-usage-trigger.tsx","../src/components/class-manager/delete-confirmation-dialog.tsx","../src/components/class-manager/sortable.tsx","../src/components/class-manager/not-found.tsx","../src/components/class-manager/panel-interactions.ts","../src/components/class-manager/save-changes-dialog.tsx","../src/components/convert-local-class-to-global-class.tsx","../src/components/populate-store.tsx","../src/sync-with-document-save.ts"],"sourcesContent":["export { init } from './init';\nexport { ClearIconButton } from './components/search-and-filter/components/filter/clear-icon-button';\n","import { injectIntoLogic } from '@elementor/editor';\nimport {\n\tinjectIntoClassSelectorActions,\n\tinjectIntoCssClassConvert,\n\tregisterStyleProviderToColors,\n} from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __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 { ConvertLocalClassToGlobalClass } from './components/convert-local-class-to-global-class';\nimport { PopulateStore } from './components/populate-store';\nimport { GLOBAL_CLASSES_PROVIDER_KEY, globalClassesStylesProvider } from './global-classes-styles-provider';\nimport { 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\tinjectIntoCssClassConvert( {\n\t\tid: 'global-classes-convert-from-local-class',\n\t\tcomponent: ConvertLocalClassToGlobalClass,\n\t} );\n\n\tinjectIntoClassSelectorActions( {\n\t\tid: 'global-classes-manager-button',\n\t\tcomponent: ClassManagerButton,\n\t} );\n\n\tregisterStyleProviderToColors( GLOBAL_CLASSES_PROVIDER_KEY, {\n\t\tname: 'global',\n\t\tgetThemeColor: ( theme ) => theme.palette.global.dark,\n\t} );\n\n\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 { usePrefetchCssClassUsage } from '../../hooks/use-prefetch-css-class-usage';\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\tconst { prefetchClassesUsage } = usePrefetchCssClassUsage();\n\n\tconst { userCan } = useUserStylesCapability();\n\n\tconst isUserAllowedToUpdateClass = userCan( globalClassesStylesProvider.getKey() ).update;\n\n\tif ( ! isUserAllowedToUpdateClass ) {\n\t\treturn null;\n\t}\n\n\tconst handleOpenPanel = () => {\n\t\tif ( document?.isDirty ) {\n\t\t\topenSaveChangesDialog();\n\t\t\treturn;\n\t\t}\n\n\t\topenPanel();\n\t\tprefetchClassesUsage();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip title={ __( 'Class Manager', 'elementor' ) } placement=\"top\">\n\t\t\t\t<IconButton size=\"tiny\" onClick={ handleOpenPanel } sx={ { marginInlineEnd: -0.75 } }>\n\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<SaveChangesDialog.Title>{ __( 'You have unsaved changes', 'elementor' ) }</SaveChangesDialog.Title>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText sx={ { mb: 2 } }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t\"To open the Class Manager, save your page first. You can't continue without saving.\",\n\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tcancel: {\n\t\t\t\t\t\t\t\tlabel: __( 'Stay here', 'elementor' ),\n\t\t\t\t\t\t\t\taction: closeSaveChangesDialog,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tawait saveDocument();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\topenPanel();\n\t\t\t\t\t\t\t\t\tprefetchClassesUsage();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</>\n\t);\n};\n","import { generateId, type StyleDefinition, type StyleDefinitionVariant } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\nimport {\n\t__dispatch as dispatch,\n\t__getState as getState,\n\t__subscribeWithSelector as subscribeWithSelector,\n} from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { getCapabilities } from './capabilities';\nimport { GlobalClassLabelAlreadyExistsError } from './errors';\nimport {\n\tselectClass,\n\tselectData,\n\tselectGlobalClasses,\n\tselectOrderedClasses,\n\tslice,\n\ttype StateWithGlobalClasses,\n} 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 ) => subscribeWithStates( 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\treturn selectClass( getState(), id )?.label ?? id;\n\t\t},\n\t\tcreate: ( label, variants: StyleDefinitionVariant[] = [] ) => {\n\t\t\tconst classes = selectGlobalClasses( getState() );\n\n\t\t\tconst existingLabels = Object.values( classes ).map( ( style ) => style.label );\n\n\t\t\tif ( existingLabels.includes( label ) ) {\n\t\t\t\tthrow new GlobalClassLabelAlreadyExistsError( { context: { label } } );\n\t\t\t}\n\n\t\t\tconst existingIds = Object.keys( classes );\n\t\t\tconst id = generateId( 'g-', existingIds );\n\n\t\t\tdispatch(\n\t\t\t\tslice.actions.add( {\n\t\t\t\t\tid,\n\t\t\t\t\ttype: 'class',\n\t\t\t\t\tlabel,\n\t\t\t\t\tvariants,\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\treturn id;\n\t\t},\n\t\tupdate: ( payload ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.update( {\n\t\t\t\t\tstyle: payload,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tdelete: ( id ) => {\n\t\t\tdispatch( slice.actions.delete( id ) );\n\t\t},\n\t\tupdateProps: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tprops: args.props,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tupdateCustomCss: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tcustom_css: args.custom_css,\n\t\t\t\t\tprops: {},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t},\n} );\n\nconst subscribeWithStates = (\n\tcb: ( previous: Record< string, StyleDefinition >, current: Record< string, StyleDefinition > ) => void\n) => {\n\tlet previousState = selectData( getState() );\n\n\treturn subscribeWithSelector(\n\t\t( state: StateWithGlobalClasses ) => state.globalClasses,\n\t\t( currentState ) => {\n\t\t\tcb( previousState.items, currentState.data.items );\n\t\t\tpreviousState = currentState.data;\n\t\t}\n\t);\n};\n","import { type UserCapabilities } from '@elementor/editor-styles-repository';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nconst EXPERIMENT_KEY = 'global_classes_should_enforce_capabilities';\nexport const UPDATE_CLASS_CAPABILITY_KEY = 'elementor_global_classes_update_class';\n\nexport const getCapabilities = (): UserCapabilities | undefined => {\n\tconst shouldEnforceCapabilities = isExperimentActive( EXPERIMENT_KEY );\n\n\tif ( shouldEnforceCapabilities ) {\n\t\treturn {\n\t\t\tupdate: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tcreate: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tdelete: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t\tupdateProps: UPDATE_CLASS_CAPABILITY_KEY,\n\t\t};\n\t}\n};\n","import { createError } from '@elementor/utils';\n\nexport const GlobalClassNotFoundError = createError< { styleId: string } >( {\n\tcode: 'global_class_not_found',\n\tmessage: 'Global class not found.',\n} );\n\nexport const GlobalClassLabelAlreadyExistsError = createError< { label: string } >( {\n\tcode: 'global_class_label_already_exists',\n\tmessage: 'Class with this name already exists.',\n} );\n","import { mergeProps, type Props } from '@elementor/editor-props';\nimport {\n\ttype CustomCss,\n\tgetVariantByMeta,\n\ttype StyleDefinition,\n\ttype StyleDefinitionID,\n\ttype StyleDefinitionVariant,\n} from '@elementor/editor-styles';\nimport { type UpdateActionPayload } from '@elementor/editor-styles-repository';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport type { ApiContext } from './api';\nimport { GlobalClassNotFoundError } from './errors';\nimport { SnapshotHistory } from './utils/snapshot-history';\n\nexport type GlobalClasses = {\n\titems: Record< StyleDefinitionID, StyleDefinition >;\n\torder: StyleDefinitionID[];\n};\n\ntype GlobalClassesState = {\n\tdata: GlobalClasses;\n\tinitialData: {\n\t\tfrontend: GlobalClasses;\n\t\tpreview: GlobalClasses;\n\t};\n\tisDirty: boolean;\n};\n\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< {\n\t\t\t\tid: StyleDefinitionID;\n\t\t\t\tmeta: StyleDefinitionVariant[ 'meta' ];\n\t\t\t\tprops: Props;\n\t\t\t\tcustom_css?: CustomCss | null;\n\t\t\t} >\n\t\t) {\n\t\t\tconst style = state.data.items[ payload.id ];\n\n\t\t\tif ( ! style ) {\n\t\t\t\tthrow new GlobalClassNotFoundError( { context: { styleId: payload.id } } );\n\t\t\t}\n\n\t\t\tlocalHistory.next( state.data );\n\n\t\t\tconst variant = getVariantByMeta( style, payload.meta );\n\t\t\tlet customCss = ( 'custom_css' in payload ? payload.custom_css : variant?.custom_css ) ?? null;\n\t\t\tcustomCss = customCss?.raw ? customCss : null;\n\n\t\t\tif ( variant ) {\n\t\t\t\tvariant.props = mergeProps( variant.props, payload.props );\n\t\t\t\tvariant.custom_css = customCss;\n\n\t\t\t\tstyle.variants = getNonEmptyVariants( style );\n\t\t\t} else {\n\t\t\t\tstyle.variants.push( { meta: payload.meta, props: payload.props, custom_css: customCss } );\n\t\t\t}\n\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\treset( state, { payload: { context } }: PayloadAction< { context: ApiContext } > ) {\n\t\t\tif ( context === 'frontend' ) {\n\t\t\t\tlocalHistory.reset();\n\t\t\t\tstate.initialData.frontend = state.data;\n\n\t\t\t\tstate.isDirty = false;\n\t\t\t}\n\n\t\t\tstate.initialData.preview = state.data;\n\t\t},\n\n\t\tundo( state ) {\n\t\t\tif ( localHistory.isLast() ) {\n\t\t\t\tlocalHistory.next( state.data ); // store current before undo\n\t\t\t}\n\t\t\tconst data = localHistory.prev();\n\t\t\tif ( data ) {\n\t\t\t\tstate.data = data;\n\t\t\t\tstate.isDirty = true;\n\t\t\t} else {\n\t\t\t\tstate.data = state.initialData.preview;\n\t\t\t}\n\t\t},\n\n\t\tresetToInitialState( state, { payload: { context } }: PayloadAction< { context: ApiContext } > ) {\n\t\t\tlocalHistory.reset();\n\t\t\tstate.data = state.initialData[ context ];\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tredo( state ) {\n\t\t\tconst data = localHistory.next();\n\t\t\tif ( localHistory.isLast() ) {\n\t\t\t\tlocalHistory.prev();\n\t\t\t}\n\t\t\tif ( data ) {\n\t\t\t\tstate.data = data;\n\t\t\t\tstate.isDirty = true;\n\t\t\t}\n\t\t},\n\t},\n} );\n\nconst getNonEmptyVariants = ( style: StyleDefinition ) => {\n\treturn style.variants.filter(\n\t\t( { props, custom_css: customCss }: StyleDefinitionVariant ) => Object.keys( props ).length || customCss?.raw\n\t);\n};\n\n// Selectors\nexport const selectData = ( state: SliceState< typeof slice > ) => state[ SLICE_NAME ].data;\n\nexport const selectFrontendInitialData = ( state: SliceState< typeof slice > ) =>\n\tstate[ SLICE_NAME ].initialData.frontend;\n\nexport const selectPreviewInitialData = ( state: SliceState< typeof slice > ) =>\n\tstate[ SLICE_NAME ].initialData.preview;\n\nexport const selectOrder = createSelector( selectData, ( { order } ) => order );\n\nexport const selectGlobalClasses = createSelector( selectData, ( { items } ) => items );\n\nexport const selectIsDirty = ( state: SliceState< typeof slice > ) => state[ SLICE_NAME ].isDirty;\n\nexport const selectOrderedClasses = createSelector( selectGlobalClasses, selectOrder, ( items, order ) =>\n\torder.map( ( id ) => items[ id ] )\n);\n\nexport const selectClass = ( state: SliceState< typeof slice >, id: StyleDefinitionID ) =>\n\tstate[ SLICE_NAME ].data.items[ id ] ?? null;\n\nexport const selectEmptyCssClass = createSelector( selectData, ( { items } ) =>\n\tObject.values( items ).filter( ( cssClass ) => cssClass.variants.length === 0 )\n);\n","type Link< T > = {\n\tprev: Link< T > | null;\n\tnext: Link< T > | null;\n\tvalue: T;\n};\n\nfunction createLink< T >( { value, next, prev }: { value: T; prev?: Link< T >; next?: Link< T > } ): Link< T > {\n\treturn {\n\t\tvalue,\n\t\tprev: prev || null,\n\t\tnext: next || null,\n\t};\n}\n\nexport class SnapshotHistory< T > {\n\tprivate static registry: Record< string, SnapshotHistory< unknown > > = {};\n\n\tpublic static get< K >( namespace: string ): SnapshotHistory< K > {\n\t\tif ( ! SnapshotHistory.registry[ namespace ] ) {\n\t\t\tSnapshotHistory.registry[ namespace ] = new SnapshotHistory( namespace );\n\t\t}\n\t\treturn SnapshotHistory.registry[ namespace ] as SnapshotHistory< K >;\n\t}\n\n\tprivate first: Link< T > | null = null;\n\tprivate current: Link< T > | null = null;\n\n\tprivate constructor( public readonly namespace: string ) {}\n\n\tprivate transform( item: T ): T {\n\t\treturn JSON.parse( JSON.stringify( item ) );\n\t}\n\n\tpublic reset(): void {\n\t\tthis.first = this.current = null;\n\t}\n\n\tpublic prev(): T | null {\n\t\tif ( ! this.current || this.current === this.first ) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.current = this.current.prev;\n\t\treturn this.current?.value || null;\n\t}\n\n\tpublic isLast(): boolean {\n\t\treturn ! this.current || ! this.current.next;\n\t}\n\n\tpublic next( value?: T ): T | null {\n\t\tif ( value ) {\n\t\t\tif ( ! this.current ) {\n\t\t\t\tthis.first = createLink( { value: this.transform( value ) } );\n\t\t\t\tthis.current = this.first;\n\t\t\t\treturn this.current.value;\n\t\t\t}\n\t\t\tconst nextLink = createLink( {\n\t\t\t\tvalue: this.transform( value ),\n\t\t\t\tprev: this.current,\n\t\t\t} );\n\t\t\tthis.current.next = nextLink;\n\t\t\tthis.current = nextLink;\n\t\t\treturn this.current.value;\n\t\t}\n\n\t\t// No value skip to next without setting any\n\t\tif ( ! this.current || ! this.current.next ) {\n\t\t\treturn null;\n\t\t}\n\t\tthis.current = this.current.next;\n\t\treturn this.current.value;\n\t}\n}\n","import { useQueryClient } from '@elementor/query';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { QUERY_KEY } from '../components/css-class-usage/types';\n\nexport function usePrefetchCssClassUsage() {\n\tconst queryClient = useQueryClient();\n\n\tconst prefetchClassesUsage = () =>\n\t\tqueryClient.prefetchQuery( {\n\t\t\tqueryKey: [ QUERY_KEY ],\n\t\t\tqueryFn: fetchCssClassUsage,\n\t\t} );\n\n\treturn { prefetchClassesUsage };\n}\n","import { type StyleDefinition, type StyleDefinitionID, type StyleDefinitionsMap } from '@elementor/editor-styles';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type CssClassUsage } from './components/css-class-usage/types';\nimport { type GlobalClasses } from './store';\n\nconst RESOURCE_URL = '/global-classes';\nconst BASE_URL = 'elementor/v1';\nconst RESOURCE_USAGE_URL = `${ RESOURCE_URL }/usage`;\n\ntype GlobalClassesUsageResponse = HttpResponse< CssClassUsage >;\n\nexport type GlobalClassesGetAllResponse = HttpResponse<\n\tStyleDefinitionsMap,\n\t{\n\t\torder: StyleDefinition[ 'id' ][];\n\t}\n>;\n\ntype UpdatePayload = GlobalClasses & {\n\tchanges: {\n\t\tadded: StyleDefinitionID[];\n\t\tdeleted: StyleDefinitionID[];\n\t\tmodified: StyleDefinitionID[];\n\t};\n};\n\nexport type ApiContext = 'preview' | 'frontend';\n\nexport const apiClient = {\n\tusage: () => httpService().get< GlobalClassesUsageResponse >( `${ BASE_URL }${ RESOURCE_USAGE_URL }` ),\n\n\tall: ( context: ApiContext = 'preview' ) =>\n\t\thttpService().get< GlobalClassesGetAllResponse >( `${ BASE_URL }${ RESOURCE_URL }`, {\n\t\t\tparams: { context },\n\t\t} ),\n\n\tpublish: ( payload: UpdatePayload ) =>\n\t\thttpService().put( 'elementor/v1' + RESOURCE_URL, payload, {\n\t\t\tparams: {\n\t\t\t\tcontext: 'frontend' satisfies ApiContext,\n\t\t\t},\n\t\t} ),\n\n\tsaveDraft: ( payload: UpdatePayload ) =>\n\t\thttpService().put( 'elementor/v1' + RESOURCE_URL, payload, {\n\t\t\tparams: {\n\t\t\t\tcontext: 'preview' satisfies ApiContext,\n\t\t\t},\n\t\t} ),\n};\n","import type { CssClassUsage, EnhancedCssClassUsage } from './types';\n\nexport const transformData = ( data: CssClassUsage ): EnhancedCssClassUsage =>\n\tObject.entries( data ).reduce< EnhancedCssClassUsage >( ( acc, [ key, value ] ) => {\n\t\tacc[ key ] = {\n\t\t\tcontent: value || [],\n\t\t\ttotal: value.reduce( ( total, val ) => total + ( val?.total || 0 ), 0 ),\n\t\t};\n\t\treturn acc;\n\t}, {} );\n","import { apiClient } from '../src/api';\nimport type { EnhancedCssClassUsage } from '../src/components/css-class-usage/types';\nimport { transformData } from '../src/components/css-class-usage/utils';\n\nexport const fetchCssClassUsage = async (): Promise< EnhancedCssClassUsage > => {\n\tconst response = await apiClient.usage();\n\treturn transformData( response.data.data );\n};\n","export const QUERY_KEY = 'css-classes-usage';\n\nexport type CssClassID = string;\n\nexport type ContentType = 'header' | 'footer' | 'wp-page' | 'wp-post' | 'popup';\n\nexport type CssClassUsageContent = {\n\telements: string[];\n\tpageId: string;\n\ttotal: number;\n\ttitle: string;\n\ttype: ContentType;\n};\n\nexport type CssClassUsage = Record< CssClassID, Array< CssClassUsageContent > >;\n\nexport type EnhancedCssClassUsageContent = { content: Array< CssClassUsageContent >; total: number };\n\nexport type EnhancedCssClassUsage = Record< CssClassID, EnhancedCssClassUsageContent >;\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport {\n\t__createPanel as createPanel,\n\tPanel,\n\tPanelBody,\n\tPanelFooter,\n\tPanelHeader,\n\tPanelHeaderTitle,\n} from '@elementor/editor-panels';\nimport { 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\tChip,\n\tDialogHeader,\n\tDivider,\n\tErrorBoundary,\n\tIconButton,\n\ttype IconButtonProps,\n\tStack,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useDirtyState } from '../../hooks/use-dirty-state';\nimport { useFilters } from '../../hooks/use-filters';\nimport { saveGlobalClasses } from '../../save-global-classes';\nimport { slice } from '../../store';\nimport { ActiveFilters } from '../search-and-filter/components/filter/active-filters';\nimport { CssClassFilter } from '../search-and-filter/components/filter/css-class-filter';\nimport { ClassManagerSearch } from '../search-and-filter/components/search/class-manager-search';\nimport { SearchAndFilterProvider } from '../search-and-filter/context';\nimport { ClassManagerIntroduction } from './class-manager-introduction';\nimport { hasDeletedItems, onDelete } from './delete-class';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { GlobalClassesList } from './global-classes-list';\nimport { blockPanelInteractions, unblockPanelInteractions } from './panel-interactions';\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\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst { mutateAsync: publish, isPending: isPublishing } = usePublish();\n\n\tconst resetAndClosePanel = () => {\n\t\tdispatch( slice.actions.resetToInitialState( { context: 'frontend' } ) );\n\t\tcloseSaveChangesDialog();\n\t};\n\n\tusePreventUnload();\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<ErrorBoundary fallback={ <ErrorBoundaryFallback /> }>\n\t\t\t\t<Panel>\n\t\t\t\t\t<SearchAndFilterProvider>\n\t\t\t\t\t\t<PanelHeader>\n\t\t\t\t\t\t\t<Stack p={ 1 } pl={ 2 } width=\"100%\" direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t\t\t<Stack width=\"100%\" direction=\"row\" gap={ 1 }>\n\t\t\t\t\t\t\t\t\t<PanelHeaderTitle sx={ { display: 'flex', alignItems: 'center', gap: 0.5 } }>\n\t\t\t\t\t\t\t\t\t\t<FlippedColorSwatchIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t\t\t{ __( 'Class Manager', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t\t\t<TotalCssClassCounter />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\t\tdisabled={ isPublishing }\n\t\t\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\t\t\tif ( isDirty ) {\n\t\t\t\t\t\t\t\t\t\t\topenSaveChangesDialog();\n\t\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t</PanelHeader>\n\t\t\t\t\t\t<PanelBody\n\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Box px={ 2 } pb={ 1 }>\n\t\t\t\t\t\t\t\t<Stack direction=\"row\" justifyContent=\"spaceBetween\" gap={ 0.5 } sx={ { pb: 0.5 } }>\n\t\t\t\t\t\t\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t\t\t\t\t\t\t<ClassManagerSearch />\n\t\t\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t\t\t<CssClassFilter />\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<ActiveFilters />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Divider />\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tpx={ 2 }\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t\t\t\t\toverflowY: 'auto',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GlobalClassesList disabled={ isPublishing } />\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</PanelBody>\n\n\t\t\t\t\t\t<PanelFooter>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\t\tonClick={ publish }\n\t\t\t\t\t\t\t\tdisabled={ ! isDirty }\n\t\t\t\t\t\t\t\tloading={ isPublishing }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</PanelFooter>\n\t\t\t\t\t</SearchAndFilterProvider>\n\t\t\t\t</Panel>\n\t\t\t</ErrorBoundary>\n\t\t\t<ClassManagerIntroduction />\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<DialogHeader onClose={ closeSaveChangesDialog } logo={ false }>\n\t\t\t\t\t\t<SaveChangesDialog.Title>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.Title>\n\t\t\t\t\t</DialogHeader>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes in the Class Manager.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'To avoid losing your updates, save your changes before leaving.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tdiscard: {\n\t\t\t\t\t\t\t\tlabel: __( 'Discard', 'elementor' ),\n\t\t\t\t\t\t\t\taction: () => {\n\t\t\t\t\t\t\t\t\tresetAndClosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tawait publish();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</ThemeProvider>\n\t);\n}\n\nconst CloseButton = ( { onClose, ...props }: IconButtonProps & { onClose: () => void } ) => (\n\t<IconButton size=\"small\" color=\"secondary\" onClick={ onClose } aria-label=\"Close\" { ...props }>\n\t\t<XIcon fontSize=\"small\" />\n\t</IconButton>\n);\n\nconst ErrorBoundaryFallback = () => (\n\t<Box role=\"alert\" sx={ { minHeight: '100%', p: 2 } }>\n\t\t<Alert severity=\"error\" sx={ { mb: 2, maxWidth: 400, textAlign: 'center' } }>\n\t\t\t<strong>{ __( 'Something went wrong', 'elementor' ) }</strong>\n\t\t</Alert>\n\t</Box>\n);\n\nconst usePreventUnload = () => {\n\tconst isDirty = useDirtyState();\n\n\tuseEffect( () => {\n\t\tconst handleBeforeUnload = ( event: BeforeUnloadEvent ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener( 'beforeunload', handleBeforeUnload );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'beforeunload', handleBeforeUnload );\n\t\t};\n\t}, [ isDirty ] );\n};\n\nconst usePublish = () => {\n\treturn useMutation( {\n\t\tmutationFn: () => saveGlobalClasses( { context: 'frontend' } ),\n\t\tonSuccess: async () => {\n\t\t\tsetDocumentModifiedStatus( false );\n\n\t\t\tif ( hasDeletedItems() ) {\n\t\t\t\tawait onDelete();\n\t\t\t}\n\t\t},\n\t} );\n};\n\nconst TotalCssClassCounter = () => {\n\tconst filters = useFilters();\n\tconst cssClasses = useClassesOrder();\n\n\treturn (\n\t\t<Chip\n\t\t\tsize={ 'small' }\n\t\t\tlabel={ filters ? `${ filters.length } / ${ cssClasses?.length }` : cssClasses?.length }\n\t\t/>\n\t);\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectOrder } from '../store';\n\nexport const useClassesOrder = () => {\n\treturn useSelector( selectOrder );\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectIsDirty } from '../store';\n\nexport const useDirtyState = () => {\n\treturn useSelector( selectIsDirty );\n};\n","import { useMemo } from 'react';\n\nimport { useSearchAndFilters } from '../components/search-and-filter/context';\nimport { type FilterKey, useFilteredCssClassUsage } from './use-filtered-css-class-usage';\n\nexport const useFilters = () => {\n\tconst {\n\t\tfilters: { filters },\n\t} = useSearchAndFilters();\n\tconst allFilters = useFilteredCssClassUsage();\n\n\treturn useMemo( () => {\n\t\tconst activeEntries = Object.entries( filters ).filter( ( [ , isActive ] ) => isActive ) as [\n\t\t\tFilterKey,\n\t\t\ttrue,\n\t\t][];\n\n\t\tif ( activeEntries.length === 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn activeEntries.reduce< string[] >( ( acc, [ key ], index ) => {\n\t\t\tconst current = allFilters[ key ] || [];\n\t\t\tif ( index === 0 ) {\n\t\t\t\treturn current;\n\t\t\t}\n\t\t\treturn acc.filter( ( val ) => current.includes( val ) );\n\t\t}, [] );\n\t}, [ filters, allFilters ] );\n};\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { useDebounceState } from '@elementor/utils';\n\nexport type CheckedFilters = {\n\tempty: boolean;\n\tonThisPage: boolean;\n\tunused: boolean;\n};\n\ntype SearchContextType = {\n\tdebouncedValue: string;\n\tinputValue: string;\n\thandleChange: ( value: string ) => void;\n\tonClearSearch: () => void;\n};\ntype FilterAndSortContextType = {\n\tfilters: CheckedFilters;\n\tsetFilters: React.Dispatch< React.SetStateAction< CheckedFilters > >;\n\tonClearFilter: () => void;\n};\n\nexport type SearchAndFilterContextType = {\n\tsearch: SearchContextType;\n\tfilters: FilterAndSortContextType;\n};\n\nconst SearchAndFilterContext = createContext< SearchAndFilterContextType | undefined >( undefined );\n\nconst INIT_CHECKED_FILTERS: CheckedFilters = {\n\tempty: false,\n\tonThisPage: false,\n\tunused: false,\n};\n\nexport const SearchAndFilterProvider = ( { children }: React.PropsWithChildren ) => {\n\tconst [ filters, setFilters ] = React.useState< CheckedFilters >( INIT_CHECKED_FILTERS );\n\tconst { debouncedValue, inputValue, handleChange } = useDebounceState( {\n\t\tdelay: 300,\n\t\tinitialValue: '',\n\t} );\n\n\tconst onClearSearch = () => {\n\t\thandleChange( '' );\n\t};\n\n\tconst onClearFilter = () => {\n\t\tsetFilters( INIT_CHECKED_FILTERS );\n\t};\n\n\treturn (\n\t\t<SearchAndFilterContext.Provider\n\t\t\tvalue={ {\n\t\t\t\tsearch: {\n\t\t\t\t\tdebouncedValue,\n\t\t\t\t\tinputValue,\n\t\t\t\t\thandleChange,\n\t\t\t\t\tonClearSearch,\n\t\t\t\t},\n\t\t\t\tfilters: {\n\t\t\t\t\tfilters,\n\t\t\t\t\tsetFilters,\n\t\t\t\t\tonClearFilter,\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ children }\n\t\t</SearchAndFilterContext.Provider>\n\t);\n};\n\nexport const useSearchAndFilters = () => {\n\tconst context = useContext( SearchAndFilterContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useSearchContext must be used within a SearchContextProvider' );\n\t}\n\treturn context;\n};\n","import { useMemo } from 'react';\nimport { __useActiveDocument as useActiveDocument } from '@elementor/editor-documents';\n\nimport { type CssClassUsageContent, type EnhancedCssClassUsage } from '../components/css-class-usage/types';\nimport { useCssClassUsage } from './use-css-class-usage';\nimport { useAllCssClassesIDs, useEmptyCssClass } from './use-empty-css-class';\n\nexport type FilterKey = 'empty' | 'onThisPage' | 'unused';\n\ntype FilteredCssClassUsage = Record< FilterKey, string[] >;\n\nconst findCssClassKeysByPageID = ( data: EnhancedCssClassUsage, pageId: number ) => {\n\tconst result: string[] = [];\n\tfor ( const key in data ) {\n\t\tdata[ key ].content.forEach( ( content: CssClassUsageContent ) => {\n\t\t\tif ( +content.pageId === pageId ) {\n\t\t\t\tresult.push( key );\n\t\t\t}\n\t\t} );\n\t}\n\treturn result;\n};\n\nconst getUnusedClasses = ( usedCssClass: string[], potentialUnused: string[] ): string[] => {\n\tconst set = new Set( usedCssClass );\n\treturn potentialUnused.filter( ( cssClass: string ) => ! set.has( cssClass ) );\n};\n\nconst EMPTY_FILTERED_CSS_CLASS_RESPONSE: FilteredCssClassUsage = {\n\tempty: [],\n\tonThisPage: [],\n\tunused: [],\n};\n\nexport const useFilteredCssClassUsage = (): FilteredCssClassUsage => {\n\tconst document = useActiveDocument();\n\tconst emptyCssClasses = useEmptyCssClass();\n\tconst { data, isLoading } = useCssClassUsage();\n\tconst listOfCssClasses = useAllCssClassesIDs();\n\n\tconst emptyCssClassesIDs = useMemo( () => emptyCssClasses.map( ( { id } ) => id ), [ emptyCssClasses ] );\n\n\tconst onThisPage = useMemo( () => {\n\t\tif ( ! data || ! document ) {\n\t\t\treturn [];\n\t\t}\n\t\treturn findCssClassKeysByPageID( data, document.id );\n\t}, [ data, document ] );\n\n\tconst unused = useMemo( () => {\n\t\tif ( ! data ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn getUnusedClasses( Object.keys( data ), listOfCssClasses );\n\t}, [ data, listOfCssClasses ] );\n\n\tif ( isLoading || ! data || ! document ) {\n\t\treturn EMPTY_FILTERED_CSS_CLASS_RESPONSE;\n\t}\n\n\treturn {\n\t\tonThisPage,\n\t\tunused,\n\t\tempty: emptyCssClassesIDs,\n\t};\n};\n","import { useQuery, type UseQueryResult } from '@elementor/query';\n\nimport { fetchCssClassUsage } from '../../service/css-class-usage-service';\nimport { type EnhancedCssClassUsage, QUERY_KEY } from '../components/css-class-usage/types';\n\nexport const useCssClassUsage = (): UseQueryResult< EnhancedCssClassUsage > => {\n\treturn useQuery( {\n\t\tqueryKey: [ QUERY_KEY ],\n\t\tqueryFn: fetchCssClassUsage,\n\t\trefetchOnMount: false,\n\t\trefetchOnWindowFocus: true,\n\t} );\n};\n","import { __useSelector } from '@elementor/store';\n\nimport { selectEmptyCssClass, selectGlobalClasses } from '../store';\n\nexport const useEmptyCssClass = () => {\n\treturn __useSelector( selectEmptyCssClass );\n};\n\nexport const useAllCssClassesIDs = () => {\n\tconst cssClasses = __useSelector( selectGlobalClasses );\n\treturn Object.keys( cssClasses );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { hash } from '@elementor/utils';\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","import * as React from 'react';\nimport { Chip, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport type { FilterKey } from '../../../../hooks/use-filtered-css-class-usage';\nimport { useSearchAndFilters } from '../../context';\nimport { ClearIconButton } from './clear-icon-button';\nimport { filterConfig } from './filter-list';\n\nexport const ActiveFilters = () => {\n\tconst {\n\t\tfilters: { filters, setFilters },\n\t} = useSearchAndFilters();\n\n\tconst handleRemove = ( key: FilterKey ) => {\n\t\tsetFilters( ( prev ) => ( { ...prev, [ key ]: false } ) );\n\t};\n\n\tconst activeKeys = Object.keys( filters ).filter( ( key ): key is FilterKey => filters[ key as FilterKey ] );\n\n\tconst showClearIcon = activeKeys.length > 0;\n\n\treturn (\n\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\">\n\t\t\t<Stack direction=\"row\" gap={ 0.5 } alignItems=\"center\" flexWrap=\"wrap\">\n\t\t\t\t{ activeKeys.map( ( key ) => (\n\t\t\t\t\t<Chip\n\t\t\t\t\t\tkey={ key }\n\t\t\t\t\t\tlabel={ filterConfig[ key ] }\n\t\t\t\t\t\tonDelete={ () => handleRemove( key ) }\n\t\t\t\t\t\tsx={ chipSx }\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</Stack>\n\t\t\t{ showClearIcon && (\n\t\t\t\t<ClearIconButton\n\t\t\t\t\ttooltipText={ __( 'Clear Filters', 'elementor' ) }\n\t\t\t\t\tsx={ { margin: '0 0 auto auto' } }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</Stack>\n\t);\n};\n\nconst chipSx = {\n\t'& .MuiChip-deleteIcon': {\n\t\tdisplay: 'none',\n\t\ttransition: 'opacity 0.2s',\n\t},\n\t'&:hover .MuiChip-deleteIcon': {\n\t\tdisplay: 'block',\n\t},\n};\n","import * as React from 'react';\nimport { BrushBigIcon } from '@elementor/icons';\nimport { Box, IconButton, styled, type SxProps, type Theme, Tooltip } from '@elementor/ui';\n\nimport { useSearchAndFilters } from '../../context';\n\ntype ClearIconButtonProps = { tooltipText: React.ReactNode; sx?: SxProps< Theme > };\n\nexport const ClearIconButton = ( { tooltipText, sx }: ClearIconButtonProps ) => {\n\tconst {\n\t\tfilters: { onClearFilter },\n\t} = useSearchAndFilters();\n\n\treturn (\n\t\t<Tooltip title={ tooltipText } placement=\"top\" disableInteractive>\n\t\t\t<Box>\n\t\t\t\t<CustomIconButton aria-label={ tooltipText } size=\"tiny\" onClick={ onClearFilter } sx={ sx }>\n\t\t\t\t\t<BrushBigIcon fontSize=\"tiny\" />\n\t\t\t\t</CustomIconButton>\n\t\t\t</Box>\n\t\t</Tooltip>\n\t);\n};\nconst CustomIconButton = styled( IconButton )( ( { theme } ) => ( {\n\t'&.Mui-disabled': {\n\t\tpointerEvents: 'auto',\n\t\t'&:hover': {\n\t\t\tcolor: theme.palette.action.disabled,\n\t\t},\n\t},\n} ) );\n","import * as React from 'react';\nimport { Checkbox, Chip, MenuItem, MenuList, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type FilterKey, useFilteredCssClassUsage } from '../../../../hooks/use-filtered-css-class-usage';\nimport { useSearchAndFilters } from '../../context';\n\nexport const filterConfig: Record< FilterKey, string > = {\n\tunused: __( 'Unused', 'elementor' ),\n\tempty: __( 'Empty', 'elementor' ),\n\tonThisPage: __( 'On this page', 'elementor' ),\n};\n\nexport const FilterList = () => {\n\tconst {\n\t\tfilters: { filters, setFilters },\n\t} = useSearchAndFilters();\n\tconst filteredCssClass = useFilteredCssClassUsage();\n\n\tconst handleOnClick = ( value: FilterKey ) => {\n\t\tsetFilters( ( prev ) => ( { ...prev, [ value ]: ! prev[ value ] } ) );\n\t};\n\n\treturn (\n\t\t<MenuList>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'unused' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.unused }\n\t\t\t\t\tchecked={ filters.unused }\n\t\t\t\t\tsuffix={ <Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.unused.length } /> }\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'empty' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.empty }\n\t\t\t\t\tchecked={ filters.empty }\n\t\t\t\t\tsuffix={ <Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.empty.length } /> }\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t\t<MenuItem onClick={ () => handleOnClick( 'onThisPage' ) }>\n\t\t\t\t<LabeledCheckbox\n\t\t\t\t\tlabel={ filterConfig.onThisPage }\n\t\t\t\t\tchecked={ filters.onThisPage }\n\t\t\t\t\tsuffix={\n\t\t\t\t\t\t<Chip size={ 'tiny' } sx={ { ml: 'auto' } } label={ filteredCssClass.onThisPage.length } />\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</MenuItem>\n\t\t</MenuList>\n\t);\n};\n\ntype LabeledCheckboxProps = {\n\tlabel: string;\n\tsuffix?: React.ReactNode;\n\tchecked: boolean;\n};\n\nconst LabeledCheckbox = ( { label, suffix, checked }: LabeledCheckboxProps ) => (\n\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 } flex={ 1 }>\n\t\t<Checkbox\n\t\t\tsize={ 'small' }\n\t\t\tchecked={ checked }\n\t\t\tsx={ {\n\t\t\t\tpadding: 0,\n\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t'&.Mui-checked': {\n\t\t\t\t\tcolor: 'text.tertiary',\n\t\t\t\t},\n\t\t\t} }\n\t\t/>\n\t\t<Typography variant=\"caption\" sx={ { color: 'text.secondary' } }>\n\t\t\t{ label }\n\t\t</Typography>\n\t\t{ suffix }\n\t</Stack>\n);\n","import * as React from 'react';\nimport { PopoverBody, PopoverHeader } from '@elementor/editor-ui';\nimport { FilterIcon } from '@elementor/icons';\nimport { bindPopover, bindToggle, Divider, Popover, ToggleButton, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearchAndFilters } from '../../context';\nimport { ClearIconButton } from './clear-icon-button';\nimport { FilterList } from './filter-list';\n\nexport const CssClassFilter = () => {\n\tconst {\n\t\tfilters: { filters },\n\t} = useSearchAndFilters();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst showCleanIcon = Object.values( filters ).some( ( value ) => value );\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip title={ __( 'Filters', 'elementor' ) } placement=\"top\">\n\t\t\t\t<ToggleButton\n\t\t\t\t\tvalue=\"filter\"\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tselected={ popupState.isOpen }\n\t\t\t\t\t{ ...bindToggle( popupState ) }\n\t\t\t\t>\n\t\t\t\t\t<FilterIcon fontSize=\"tiny\" />\n\t\t\t\t</ToggleButton>\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tsx={ {\n\t\t\t\t\tmaxWidth: '344px',\n\t\t\t\t} }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: -21,\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t>\n\t\t\t\t<PopoverHeader\n\t\t\t\t\tactions={\n\t\t\t\t\t\tshowCleanIcon\n\t\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t\t<ClearIconButton\n\t\t\t\t\t\t\t\t\t\tkey=\"clear-all-button\"\n\t\t\t\t\t\t\t\t\t\ttooltipText={ __( 'Clear all', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t/>,\n\t\t\t\t\t\t\t ]\n\t\t\t\t\t\t\t: []\n\t\t\t\t\t}\n\t\t\t\t\tonClose={ popupState.close }\n\t\t\t\t\ttitle={ __( 'Filters', 'elementor' ) }\n\t\t\t\t\ticon={ <FilterIcon fontSize={ 'tiny' } /> }\n\t\t\t\t/>\n\t\t\t\t<Divider\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tborderWidth: '1px 0 0 0',\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t<PopoverBody width={ 344 } height={ 125 }>\n\t\t\t\t\t<FilterList />\n\t\t\t\t</PopoverBody>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { SearchIcon } from '@elementor/icons';\nimport { Box, InputAdornment, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearchAndFilters } from '../../context';\n\nexport const ClassManagerSearch = () => {\n\tconst {\n\t\tsearch: { inputValue, handleChange },\n\t} = useSearchAndFilters();\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={ 0.5 } sx={ { width: '100%' } }>\n\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t<TextField\n\t\t\t\t\trole={ 'search' }\n\t\t\t\t\tfullWidth\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t<SearchIcon fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useSuppressedMessage } from '@elementor/editor-current-user';\nimport { IntroductionModal } from '@elementor/editor-ui';\nimport { Box, Image, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst MESSAGE_KEY = 'global-class-manager';\n\nexport const ClassManagerIntroduction = () => {\n\tconst [ isMessageSuppressed, suppressMessage ] = useSuppressedMessage( MESSAGE_KEY );\n\tconst [ shouldShowIntroduction, setShouldShowIntroduction ] = useState( ! isMessageSuppressed );\n\n\treturn (\n\t\t<IntroductionModal\n\t\t\topen={ shouldShowIntroduction }\n\t\t\ttitle={ __( 'Class Manager', 'elementor' ) }\n\t\t\thandleClose={ ( shouldShowAgain ) => {\n\t\t\t\tif ( ! shouldShowAgain ) {\n\t\t\t\t\tsuppressMessage();\n\t\t\t\t}\n\n\t\t\t\tsetShouldShowIntroduction( false );\n\t\t\t} }\n\t\t>\n\t\t\t<Image\n\t\t\t\tsx={ { width: '100%', aspectRatio: '16 / 9' } }\n\t\t\t\tsrc={ 'https://assets.elementor.com/packages/v1/images/class-manager-intro.svg' }\n\t\t\t\talt={ '' }\n\t\t\t/>\n\t\t\t<IntroductionContent />\n\t\t</IntroductionModal>\n\t);\n};\n\nconst IntroductionContent = () => {\n\treturn (\n\t\t<Box p={ 3 }>\n\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t{ __(\n\t\t\t\t\t\"The Class Manager lets you see all the classes you've created, plus adjust their priority, rename them, and delete unused classes to keep your CSS structured.\",\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<br />\n\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t{ __(\n\t\t\t\t\t'Remember, when editing an item within a specific class, any changes you make will apply across all elements in that class.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t</Box>\n\t);\n};\n","import { getCurrentDocument, getV1DocumentsManager } from '@elementor/editor-documents';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { slice } from '../../store';\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, useMemo } from 'react';\nimport { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { __useDispatch as useDispatch } from '@elementor/store';\nimport { List, Stack, styled, Typography, type TypographyProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useClassesOrder } from '../../hooks/use-classes-order';\nimport { useFilters } from '../../hooks/use-filters';\nimport { useOrderedClasses } from '../../hooks/use-ordered-classes';\nimport { slice } from '../../store';\nimport { useSearchAndFilters } from '../search-and-filter/context';\nimport { ClassItem } from './class-item';\nimport { DeleteConfirmationProvider } from './delete-confirmation-dialog';\nimport { FlippedColorSwatchIcon } from './flipped-color-swatch-icon';\nimport { getNotFoundType, NotFound } from './not-found';\nimport { SortableItem, SortableProvider } from './sortable';\n\ntype GlobalClassesListProps = {\n\tdisabled?: boolean;\n};\n\nexport const GlobalClassesList = ( { disabled }: GlobalClassesListProps ) => {\n\tconst {\n\t\tsearch: { debouncedValue: searchValue },\n\t} = useSearchAndFilters();\n\tconst cssClasses = useOrderedClasses();\n\tconst dispatch = useDispatch();\n\tconst filters = useFilters();\n\tconst [ classesOrder, reorderClasses ] = useReorder();\n\tconst filteredCssClasses = useFilteredCssClasses();\n\n\tuseEffect( () => {\n\t\tconst handler = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'z' && ( event.ctrlKey || event.metaKey ) ) {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif ( event.shiftKey ) {\n\t\t\t\t\tdispatch( slice.actions.redo() );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tdispatch( slice.actions.undo() );\n\t\t\t}\n\t\t};\n\t\twindow.addEventListener( 'keydown', handler, {\n\t\t\tcapture: true,\n\t\t} );\n\t\treturn () => window.removeEventListener( 'keydown', handler );\n\t}, [ dispatch ] );\n\n\tif ( ! cssClasses?.length ) {\n\t\treturn <EmptyState />;\n\t}\n\n\tconst notFoundType = getNotFoundType( searchValue, filters, filteredCssClasses );\n\n\tif ( notFoundType ) {\n\t\treturn <NotFound notFoundType={ notFoundType } />;\n\t}\n\n\tconst isFiltersApplied = filters?.length || searchValue;\n\n\tconst allowSorting = filteredCssClasses.length > 1 && ! isFiltersApplied;\n\n\treturn (\n\t\t<DeleteConfirmationProvider>\n\t\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 0.5 } }>\n\t\t\t\t<SortableProvider\n\t\t\t\t\tvalue={ classesOrder }\n\t\t\t\t\tonChange={ reorderClasses }\n\t\t\t\t\tdisableDragOverlay={ ! allowSorting }\n\t\t\t\t>\n\t\t\t\t\t{ filteredCssClasses?.map( ( { id, label } ) => (\n\t\t\t\t\t\t<SortableItem key={ id } id={ id }>\n\t\t\t\t\t\t\t{ ( { isDragged, isDragPlaceholder, triggerProps, triggerStyle } ) => (\n\t\t\t\t\t\t\t\t<ClassItem\n\t\t\t\t\t\t\t\t\tid={ id }\n\t\t\t\t\t\t\t\t\tlabel={ label }\n\t\t\t\t\t\t\t\t\trenameClass={ ( newLabel: string ) => {\n\t\t\t\t\t\t\t\t\t\tdispatch(\n\t\t\t\t\t\t\t\t\t\t\tslice.actions.update( {\n\t\t\t\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tselected={ isDragged }\n\t\t\t\t\t\t\t\t\tdisabled={ disabled || isDragPlaceholder }\n\t\t\t\t\t\t\t\t\tsortableTriggerProps={ { ...triggerProps, style: triggerStyle } }\n\t\t\t\t\t\t\t\t\tshowSortIndicator={ allowSorting }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t) ) }\n\t\t\t\t</SortableProvider>\n\t\t\t</List>\n\t\t</DeleteConfirmationProvider>\n\t);\n};\n\nconst EmptyState = () => (\n\t<Stack alignItems=\"center\" gap={ 1.5 } pt={ 10 } px={ 0.5 } maxWidth=\"260px\" margin=\"auto\">\n\t\t<FlippedColorSwatchIcon fontSize=\"large\" />\n\t\t<StyledHeader variant=\"subtitle2\" component=\"h2\" color=\"text.secondary\">\n\t\t\t{ __( 'There are no global classes yet.', 'elementor' ) }\n\t\t</StyledHeader>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t{ __(\n\t\t\t\t'CSS classes created in the editor panel will appear here. Once they are available, you can arrange their hierarchy, rename them, or delete them as needed.',\n\t\t\t\t'elementor'\n\t\t\t) }\n\t\t</Typography>\n\t</Stack>\n);\n\n// Override panel reset styles.\nconst StyledHeader = styled( Typography )< TypographyProps >( ( { theme, variant } ) => ( {\n\t'&.MuiTypography-root': {\n\t\t...( theme.typography[ variant as keyof typeof theme.typography ] as React.CSSProperties ),\n\t},\n} ) );\n\nconst useReorder = () => {\n\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\nconst useFilteredCssClasses = (): StyleDefinition[] => {\n\tconst cssClasses = useOrderedClasses();\n\tconst {\n\t\tsearch: { debouncedValue: searchValue },\n\t} = useSearchAndFilters();\n\tconst filters = useFilters();\n\n\tconst lowercaseLabels = useMemo(\n\t\t() =>\n\t\t\tcssClasses.map( ( cssClass ) => ( {\n\t\t\t\t...cssClass,\n\t\t\t\tlowerLabel: cssClass.label.toLowerCase(),\n\t\t\t} ) ),\n\t\t[ cssClasses ]\n\t);\n\n\tconst filteredClasses = useMemo( () => {\n\t\tif ( searchValue.length > 1 ) {\n\t\t\treturn lowercaseLabels.filter( ( cssClass ) => cssClass.lowerLabel.includes( searchValue.toLowerCase() ) );\n\t\t}\n\t\treturn cssClasses;\n\t}, [ searchValue, cssClasses, lowercaseLabels ] );\n\n\treturn useMemo( () => {\n\t\tif ( filters && filters.length > 0 ) {\n\t\t\treturn filteredClasses.filter( ( cssClass ) => filters.includes( cssClass.id ) );\n\t\t}\n\t\treturn filteredClasses;\n\t}, [ filteredClasses, filters ] );\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectOrderedClasses } from '../store';\n\nexport const useOrderedClasses = () => {\n\treturn useSelector( selectOrderedClasses );\n};\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { EditableField, EllipsisWithTooltip, MenuListItem, useEditable, WarningInfotip } from '@elementor/editor-ui';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tListItemButton,\n\ttype ListItemButtonProps,\n\tMenu,\n\tStack,\n\tstyled,\n\ttype Theme,\n\tTooltip,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { CssClassUsageTrigger } from '../css-class-usage/components';\nimport { useDeleteConfirmation } from './delete-confirmation-dialog';\nimport { SortableTrigger, type SortableTriggerProps } from './sortable';\n\ntype ClassItemProps = React.PropsWithChildren< {\n\tid: string;\n\tlabel: string;\n\trenameClass: ( newLabel: string ) => void;\n\tselected?: boolean;\n\tdisabled?: boolean;\n\tsortableTriggerProps: SortableTriggerProps;\n\tshowSortIndicator?: boolean;\n} >;\n\nexport const ClassItem = ( {\n\tid,\n\tlabel,\n\trenameClass,\n\tselected,\n\tdisabled,\n\tsortableTriggerProps,\n\tshowSortIndicator,\n}: ClassItemProps ) => {\n\tconst itemRef = useRef< HTMLElement >( null );\n\tconst {\n\t\tref: editableRef,\n\t\topenEditMode,\n\t\tisEditing,\n\t\terror,\n\t\tgetProps: getEditableProps,\n\t} = useEditable( {\n\t\tvalue: label,\n\t\tonSubmit: renameClass,\n\t\tvalidation: validateLabel,\n\t} );\n\tconst [ selectedCssUsage, setSelectedCssUsage ] = useState( '' );\n\tconst { openDialog } = useDeleteConfirmation();\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst isSelected = ( selectedCssUsage === id || selected || popupState.isOpen ) && ! disabled;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack p={ 0 }>\n\t\t\t\t<WarningInfotip\n\t\t\t\t\topen={ Boolean( error ) }\n\t\t\t\t\ttext={ error ?? '' }\n\t\t\t\t\tplacement=\"bottom\"\n\t\t\t\t\twidth={ itemRef.current?.getBoundingClientRect().width }\n\t\t\t\t\toffset={ [ 0, -15 ] }\n\t\t\t\t>\n\t\t\t\t\t<StyledListItemButton\n\t\t\t\t\t\tref={ itemRef }\n\t\t\t\t\t\tdense\n\t\t\t\t\t\tdisableGutters\n\t\t\t\t\t\tshowSortIndicator={ showSortIndicator }\n\t\t\t\t\t\tshowActions={ isSelected || isEditing }\n\t\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t\t\tonDoubleClick={ openEditMode }\n\t\t\t\t\t\tselected={ isSelected }\n\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t\tfocusVisibleClassName=\"visible-class-item\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<SortableTrigger { ...sortableTriggerProps } />\n\t\t\t\t\t\t<Indicator isActive={ isEditing } isError={ !! error }>\n\t\t\t\t\t\t\t{ isEditing ? (\n\t\t\t\t\t\t\t\t<EditableField\n\t\t\t\t\t\t\t\t\tref={ editableRef }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\t{ ...getEditableProps() }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<EllipsisWithTooltip title={ label } as={ Typography } variant=\"caption\" />\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Indicator>\n\t\t\t\t\t\t<Box className={ 'class-item-locator' }>\n\t\t\t\t\t\t\t<CssClassUsageTrigger id={ id } onClick={ setSelectedCssUsage } />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\tclassName={ 'class-item-more-actions' }\n\t\t\t\t\t\t\ttitle={ __( 'More actions', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconButton size=\"tiny\" { ...bindTrigger( popupState ) } aria-label=\"More actions\">\n\t\t\t\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t</StyledListItemButton>\n\t\t\t\t</WarningInfotip>\n\t\t\t</Stack>\n\t\t\t<Menu\n\t\t\t\t{ ...bindMenu( popupState ) }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<MenuListItem\n\t\t\t\t\tsx={ { minWidth: '160px' } }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tpopupState.close();\n\t\t\t\t\t\topenEditMode();\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t{ __( 'Rename', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t\t<MenuListItem\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tpopupState.close();\n\t\t\t\t\t\topenDialog( { id, label } );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'error.light' } }>\n\t\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n\nconst StyledListItemButton = styled( ListItemButton, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'showActions', 'showSortIndicator' ].includes( prop ),\n} )< ListItemButtonProps & { showActions: boolean; showSortIndicator: boolean } >(\n\t( { showActions, showSortIndicator } ) => `\n min-height: 36px;\n\n &.visible-class-item {\n box-shadow: none !important;\n }\n\n .class-item-locator {\n visibility: hidden;\n }\n\n .class-item-sortable-trigger {\n visibility: ${ showSortIndicator && showActions ? 'visible' : 'hidden' };\n }\n\n &:hover:not(:disabled) {\n .class-item-locator {\n visibility: visible;\n }\n\n .class-item-sortable-trigger {\n visibility: ${ showSortIndicator ? 'visible' : 'hidden' };\n }\n }\n `\n);\n\nconst Indicator = styled( Box, {\n\tshouldForwardProp: ( prop: string ) => ! [ 'isActive', 'isError' ].includes( prop ),\n} )< { isActive: boolean; isError: boolean } >( ( { theme, isActive, isError } ) => ( {\n\tdisplay: 'flex',\n\twidth: '100%',\n\tflexGrow: 1,\n\tborderRadius: theme.spacing( 0.5 ),\n\tborder: getIndicatorBorder( { isActive, isError, theme } ),\n\tpadding: `0 ${ theme.spacing( 1 ) }`,\n\tmarginLeft: isActive ? theme.spacing( 1 ) : 0,\n\tminWidth: 0,\n} ) );\n\nconst getIndicatorBorder = ( { isActive, isError, theme }: { isActive: boolean; isError: boolean; theme: Theme } ) => {\n\tif ( isError ) {\n\t\treturn `2px solid ${ theme.palette.error.main }`;\n\t}\n\n\tif ( isActive ) {\n\t\treturn `2px solid ${ theme.palette.secondary.main }`;\n\t}\n\n\treturn 'none';\n};\n\nconst validateLabel = ( newLabel: string ) => {\n\tconst result = validateStyleLabel( newLabel, 'rename' );\n\n\tif ( result.isValid ) {\n\t\treturn null;\n\t}\n\n\treturn result.errorMessage;\n};\n","import * as React from 'react';\nimport { __useOpenDocumentInNewTab as useOpenDocumentInNewTab } from '@elementor/editor-documents';\nimport {\n\tEllipsisWithTooltip,\n\tPopoverBody,\n\tPopoverHeader,\n\tPopoverMenuList,\n\ttype VirtualizedItem,\n} from '@elementor/editor-ui';\nimport {\n\tCurrentLocationIcon,\n\tExternalLinkIcon,\n\tFooterTemplateIcon,\n\tHeaderTemplateIcon,\n\tPagesIcon,\n\tPopupTemplateIcon,\n\tPostTypeIcon,\n} from '@elementor/icons';\nimport { Box, Chip, Divider, Icon, MenuList, Stack, styled, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../../hooks/use-css-class-usage-by-id';\nimport { type ContentType } from '../types';\n\ntype CssClassUsageRecord = VirtualizedItem< 'item', string > & { docType: ContentType };\n\nconst iconMapper: Record< ContentType, { label: string; icon: React.ReactElement } > = {\n\t'wp-post': {\n\t\tlabel: __( 'Post', 'elementor' ),\n\t\ticon: <PostTypeIcon fontSize={ 'inherit' } />,\n\t},\n\t'wp-page': {\n\t\tlabel: __( 'Page', 'elementor' ),\n\t\ticon: <PagesIcon fontSize={ 'inherit' } />,\n\t},\n\tpopup: {\n\t\tlabel: __( 'Popup', 'elementor' ),\n\t\ticon: <PopupTemplateIcon fontSize={ 'inherit' } />,\n\t},\n\theader: {\n\t\tlabel: __( 'Header', 'elementor' ),\n\t\ticon: <HeaderTemplateIcon fontSize={ 'inherit' } />,\n\t},\n\tfooter: {\n\t\tlabel: __( 'Footer', 'elementor' ),\n\t\ticon: <FooterTemplateIcon fontSize={ 'inherit' } />,\n\t},\n};\n\nexport const CssClassUsagePopover = ( {\n\tcssClassID,\n\tonClose,\n}: {\n\tonClose: React.ComponentProps< typeof PopoverHeader >[ 'onClose' ];\n\tcssClassID: string;\n} ) => {\n\tconst { data: classUsage } = useCssClassUsageByID( cssClassID );\n\tconst onNavigate = useOpenDocumentInNewTab();\n\n\tconst cssClassUsageRecords: CssClassUsageRecord[] =\n\t\tclassUsage?.content.map(\n\t\t\t( { title, elements, pageId, type } ) =>\n\t\t\t\t( {\n\t\t\t\t\ttype: 'item',\n\t\t\t\t\tvalue: pageId,\n\t\t\t\t\tlabel: title,\n\t\t\t\t\tsecondaryText: elements.length.toString(),\n\t\t\t\t\tdocType: type,\n\t\t\t\t} ) as CssClassUsageRecord\n\t\t) ?? [];\n\n\treturn (\n\t\t<>\n\t\t\t<PopoverHeader\n\t\t\t\ticon={ <CurrentLocationIcon fontSize={ 'tiny' } /> }\n\t\t\t\ttitle={\n\t\t\t\t\t<Stack flexDirection={ 'row' } gap={ 1 } alignItems={ 'center' }>\n\t\t\t\t\t\t<Box aria-label={ 'header-title' }>{ __( 'Locator', 'elementor' ) }</Box>\n\t\t\t\t\t\t<Box>\n\t\t\t\t\t\t\t<Chip sx={ { lineHeight: 1 } } size={ 'tiny' } label={ classUsage.total } />\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Stack>\n\t\t\t\t}\n\t\t\t\tonClose={ onClose }\n\t\t\t/>\n\t\t\t<Divider />\n\t\t\t<PopoverBody width={ 300 }>\n\t\t\t\t<PopoverMenuList\n\t\t\t\t\tonSelect={ ( value ) => onNavigate( +value ) }\n\t\t\t\t\titems={ cssClassUsageRecords }\n\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\tmenuListTemplate={ StyledCssClassUsageItem }\n\t\t\t\t\tmenuItemContentTemplate={ ( cssClassUsageRecord ) => (\n\t\t\t\t\t\t<Stack flexDirection={ 'row' } flex={ 1 } alignItems={ 'center' }>\n\t\t\t\t\t\t\t<Box display={ 'flex' } sx={ { pr: 1 } }>\n\t\t\t\t\t\t\t\t<Tooltip\n\t\t\t\t\t\t\t\t\tdisableInteractive\n\t\t\t\t\t\t\t\t\ttitle={\n\t\t\t\t\t\t\t\t\t\ticonMapper?.[ cssClassUsageRecord.docType as ContentType ]?.label ??\n\t\t\t\t\t\t\t\t\t\tcssClassUsageRecord.docType\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tplacement=\"top\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Icon fontSize={ 'small' }>\n\t\t\t\t\t\t\t\t\t\t{ iconMapper?.[ cssClassUsageRecord.docType as ContentType ]?.icon || (\n\t\t\t\t\t\t\t\t\t\t\t<PagesIcon fontSize={ 'inherit' } />\n\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t</Icon>\n\t\t\t\t\t\t\t\t</Tooltip>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box sx={ { pr: 0.5, maxWidth: '173px' } } display={ 'flex' }>\n\t\t\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\t\t\ttitle={ cssClassUsageRecord.label }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\tmaxWidth=\"173px\"\n\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<ExternalLinkIcon className={ 'hover-only-icon' } fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t<Chip\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tml: 'auto',\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t\t\tlabel={ cssClassUsageRecord.secondaryText }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t</PopoverBody>\n\t\t</>\n\t);\n};\n\nconst StyledCssClassUsageItem = styled( MenuList )( ( { theme } ) => ( {\n\t'& > li': {\n\t\tdisplay: 'flex',\n\t\tcursor: 'pointer',\n\t\theight: 32,\n\t\twidth: '100%',\n\t},\n\t'& > [role=\"option\"]': {\n\t\t...theme.typography.caption,\n\t\tlineHeight: 'inherit',\n\t\tpadding: theme.spacing( 0.5, 1, 0.5, 2 ),\n\t\ttextOverflow: 'ellipsis',\n\t\tposition: 'absolute',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\topacity: 1,\n\t\t'.hover-only-icon': {\n\t\t\tcolor: theme.palette.text.disabled,\n\t\t\topacity: 0,\n\t\t},\n\t\t'&:hover': {\n\t\t\tborderRadius: theme.spacing( 0.5 ),\n\t\t\tbackgroundColor: theme.palette.action.hover,\n\t\t\t'.hover-only-icon': {\n\t\t\t\tcolor: theme.palette.text.disabled,\n\t\t\t\topacity: 1,\n\t\t\t},\n\t\t},\n\t},\n\twidth: '100%',\n\tposition: 'relative',\n} ) );\n","import { type EnhancedCssClassUsageContent } from '../components/css-class-usage/types';\nimport { useCssClassUsage } from './use-css-class-usage';\n\nconst EMPTY_CLASS_USAGE: EnhancedCssClassUsageContent = {\n\ttotal: 0,\n\tcontent: [],\n};\n\nexport const useCssClassUsageByID = (\n\tid: string\n): { data: EnhancedCssClassUsageContent; isLoading: boolean; isSuccess?: boolean } => {\n\tconst { data, ...rest } = useCssClassUsage();\n\tconst classData = data?.[ id ] ?? EMPTY_CLASS_USAGE;\n\treturn { ...rest, data: classData };\n};\n","import * as React from 'react';\nimport { type MouseEvent, type PropsWithChildren } from 'react';\nimport { InfoAlert } from '@elementor/editor-ui';\nimport { CurrentLocationIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tInfotip,\n\tPopover,\n\tstyled,\n\tTooltip,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCssClassUsageByID } from '../../../hooks/use-css-class-usage-by-id';\nimport { type CssClassID } from '../types';\nimport { CssClassUsagePopover } from './css-class-usage-popover';\n\nexport const CssClassUsageTrigger = ( { id, onClick }: { id: CssClassID; onClick: ( id: CssClassID ) => void } ) => {\n\tconst {\n\t\tdata: { total },\n\t\tisLoading,\n\t} = useCssClassUsageByID( id );\n\tconst cssClassUsagePopover = usePopupState( { variant: 'popover', popupId: 'css-class-usage-popover' } );\n\n\tif ( isLoading ) {\n\t\treturn null;\n\t}\n\n\tconst WrapperComponent = total !== 0 ? TooltipWrapper : InfoAlertMessage;\n\n\treturn (\n\t\t<>\n\t\t\t<Box position={ 'relative' }>\n\t\t\t\t<WrapperComponent total={ total }>\n\t\t\t\t\t<CustomIconButton\n\t\t\t\t\t\tdisabled={ total === 0 }\n\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t{ ...bindTrigger( cssClassUsagePopover ) }\n\t\t\t\t\t\tonClick={ ( e: MouseEvent ) => {\n\t\t\t\t\t\t\tif ( total !== 0 ) {\n\t\t\t\t\t\t\t\tbindTrigger( cssClassUsagePopover ).onClick( e );\n\t\t\t\t\t\t\t\tonClick( id );\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\t\t<CurrentLocationIcon fontSize={ 'tiny' } />\n\t\t\t\t\t</CustomIconButton>\n\t\t\t\t</WrapperComponent>\n\t\t\t</Box>\n\t\t\t<Box>\n\t\t\t\t<Popover\n\t\t\t\t\tanchorOrigin={ {\n\t\t\t\t\t\tvertical: 'center',\n\t\t\t\t\t\thorizontal: 'right',\n\t\t\t\t\t} }\n\t\t\t\t\ttransformOrigin={ {\n\t\t\t\t\t\tvertical: 15,\n\t\t\t\t\t\thorizontal: -50,\n\t\t\t\t\t} }\n\t\t\t\t\t{ ...bindPopover( cssClassUsagePopover ) }\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tbindPopover( cssClassUsagePopover ).onClose();\n\t\t\t\t\t\tonClick( '' );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<CssClassUsagePopover\n\t\t\t\t\t\tonClose={ cssClassUsagePopover.close }\n\t\t\t\t\t\taria-label=\"css-class-usage-popover\"\n\t\t\t\t\t\tcssClassID={ id }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t</Box>\n\t\t</>\n\t);\n};\n\nconst CustomIconButton = styled( IconButton )( ( { theme } ) => ( {\n\t'&.Mui-disabled': {\n\t\tpointerEvents: 'auto', // Enable hover\n\t\t'&:hover': {\n\t\t\tcolor: theme.palette.action.disabled, // optional\n\t\t},\n\t},\n\theight: '22px',\n\twidth: '22px',\n} ) );\n\nconst TooltipWrapper = ( { children, total }: PropsWithChildren< { total: number } > ) => (\n\t<Tooltip\n\t\tdisableInteractive\n\t\tplacement={ 'top' }\n\t\ttitle={ `${ __( 'Show {{number}} {{locations}}', 'elementor' )\n\t\t\t.replace( '{{number}}', total.toString() )\n\t\t\t.replace(\n\t\t\t\t'{{locations}}',\n\t\t\t\ttotal === 1 ? __( 'location', 'elementor' ) : __( 'locations', 'elementor' )\n\t\t\t) }` }\n\t>\n\t\t<span>{ children }</span>\n\t</Tooltip>\n);\n\nconst InfoAlertMessage = ( { children }: PropsWithChildren ) => (\n\t<Infotip\n\t\tdisableInteractive\n\t\tplacement={ 'top' }\n\t\tcolor={ 'secondary' }\n\t\tcontent={ <InfoAlert sx={ { mt: 1 } }>{ __( 'This class isn’t being used yet.', 'elementor' ) }</InfoAlert> }\n\t>\n\t\t<span>{ children }</span>\n\t</Infotip>\n);\n","import * as React from 'react';\nimport { createContext, useContext, useState } from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { 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 { useCssClassUsageByID } from '../../hooks/use-css-class-usage-by-id';\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\tconst {\n\t\tdata: { total, content },\n\t} = useCssClassUsageByID( id );\n\tconst onConfirm = () => {\n\t\tdeleteClass( id );\n\n\t\tcloseDialog();\n\t};\n\t// translators: %1: total usage count, %2: number of pages\n\tconst text =\n\t\ttotal && content.length\n\t\t\t? __(\n\t\t\t\t\t'Will permanently remove it from your project and may affect the design across all elements using it. Used %1 times across %2 pages. This action cannot be undone.',\n\t\t\t\t\t'elementor'\n\t\t\t )\n\t\t\t\t\t.replace( '%1', total.toString() )\n\t\t\t\t\t.replace( '%2', content.length.toString() )\n\t\t\t: __(\n\t\t\t\t\t'Will permanently remove it from your project and may affect the design across all elements using it. This action cannot be undone.',\n\t\t\t\t\t'elementor'\n\t\t\t );\n\n\treturn (\n\t\t<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 { label } \n\t\t\t\t\t</Typography>\n\t\t\t\t\t{ text }\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\n\t\t\t\t<Button\n\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\tautoFocus\n\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\tcolor=\"error\"\n\t\t\t\t\tonClick={ onConfirm }\n\t\t\t\t>\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\" aria-label=\"sort\">\n\t\t<GripVerticalIcon fontSize=\"tiny\" />\n\t</StyledSortableTrigger>\n);\n\ntype SortableItemProps = {\n\tid: UnstableSortableItemProps[ 'id' ];\n\tchildren: ( props: Partial< UnstableSortableItemRenderProps > ) => React.ReactNode;\n};\n\nexport const SortableItem = ( { children, id, ...props }: SortableItemProps ) => {\n\treturn (\n\t\t<UnstableSortableItem\n\t\t\t{ ...props }\n\t\t\tid={ id }\n\t\t\trender={ ( {\n\t\t\t\titemProps,\n\t\t\t\tisDragged,\n\t\t\t\ttriggerProps,\n\t\t\t\titemStyle,\n\t\t\t\ttriggerStyle,\n\t\t\t\tdropIndicationStyle,\n\t\t\t\tshowDropIndication,\n\t\t\t\tisDragOverlay,\n\t\t\t\tisDragPlaceholder,\n\t\t\t}: UnstableSortableItemRenderProps ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Box\n\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\tstyle={ itemStyle }\n\t\t\t\t\t\tcomponent={ 'li' }\n\t\t\t\t\t\trole=\"listitem\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tbackgroundColor: isDragOverlay ? 'background.paper' : undefined,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ children( {\n\t\t\t\t\t\t\titemProps,\n\t\t\t\t\t\t\tisDragged,\n\t\t\t\t\t\t\ttriggerProps,\n\t\t\t\t\t\t\titemStyle,\n\t\t\t\t\t\t\ttriggerStyle,\n\t\t\t\t\t\t\tisDragPlaceholder,\n\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t{ showDropIndication && <SortableItemIndicator style={ dropIndicationStyle } /> }\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t} }\n\t\t/>\n\t);\n};\n\nconst StyledSortableTrigger = styled( 'div' )( ( { theme } ) => ( {\n\tposition: 'absolute',\n\tleft: 0,\n\ttop: '50%',\n\ttransform: `translate( -${ theme.spacing( 1.5 ) }, -50% )`,\n\tcolor: theme.palette.action.active,\n} ) );\n\nconst SortableItemIndicator = styled( Box )`\n\twidth: 100%;\n\theight: 1px;\n\tbackground-color: ${ ( { theme } ) => theme.palette.text.primary };\n`;\n","import * as React from 'react';\nimport { type FC } from 'react';\nimport type { StyleDefinition } from '@elementor/editor-styles';\nimport { ColorSwatchIcon, PhotoIcon } from '@elementor/icons';\nimport { Box, Link, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearchAndFilters } from '../search-and-filter/context';\n\nexport const getNotFoundType = (\n\tsearchValue: string,\n\tfilters: string[] | null | undefined,\n\tfilteredClasses: StyleDefinition[]\n): NotFoundType | undefined => {\n\tconst searchNotFound = filteredClasses.length <= 0 && searchValue.length > 1;\n\tconst filterNotFound = filters && filters.length === 0;\n\tconst filterAndSearchNotFound = searchNotFound && filterNotFound;\n\n\tif ( filterAndSearchNotFound ) {\n\t\treturn 'filterAndSearch';\n\t}\n\tif ( searchNotFound ) {\n\t\treturn 'search';\n\t}\n\tif ( filterNotFound ) {\n\t\treturn 'filter';\n\t}\n\treturn undefined;\n};\n\nexport type NotFoundType = 'filter' | 'search' | 'filterAndSearch';\n\nconst notFound = {\n\tfilterAndSearch: {\n\t\tmainText: __( 'Sorry, nothing matched.', 'elementor' ),\n\t\tsceneryText: __( 'Try something else.', 'elementor' ),\n\t\ticon: <PhotoIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n\tsearch: {\n\t\tmainText: __( 'Sorry, nothing matched', 'elementor' ),\n\t\tsceneryText: __( 'Clear your input and try something else.', 'elementor' ),\n\t\ticon: <PhotoIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n\tfilter: {\n\t\tmainText: __( 'Sorry, nothing matched that search.', 'elementor' ),\n\t\tsceneryText: __( 'Clear the filters and try something else.', 'elementor' ),\n\t\ticon: <ColorSwatchIcon color=\"inherit\" fontSize=\"large\" />,\n\t},\n};\n\ntype GetNotFoundConfigProps = {\n\tnotFoundType: NotFoundType;\n};\n\nexport const NotFound = ( { notFoundType }: GetNotFoundConfigProps ): React.ReactElement => {\n\tconst {\n\t\tsearch: { onClearSearch, inputValue },\n\t\tfilters: { onClearFilter },\n\t} = useSearchAndFilters();\n\n\tswitch ( notFoundType ) {\n\t\tcase 'filter':\n\t\t\treturn <NotFoundLayout { ...notFound.filter } onClear={ onClearFilter } />;\n\t\tcase 'search':\n\t\t\treturn <NotFoundLayout { ...notFound.search } searchValue={ inputValue } onClear={ onClearSearch } />;\n\t\tcase 'filterAndSearch':\n\t\t\treturn (\n\t\t\t\t<NotFoundLayout\n\t\t\t\t\t{ ...notFound.filterAndSearch }\n\t\t\t\t\tonClear={ () => {\n\t\t\t\t\t\tonClearFilter();\n\t\t\t\t\t\tonClearSearch();\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t);\n\t}\n};\n\ntype NotFoundLayoutProps = {\n\tsearchValue?: string;\n\tonClear: () => void;\n\tmainText: string;\n\tsceneryText: string;\n\ticon: React.ReactElement;\n};\n\nexport const NotFoundLayout: FC< NotFoundLayoutProps > = ( { onClear, searchValue, mainText, sceneryText, icon } ) => (\n\t<Stack\n\t\tcolor={ 'text.secondary' }\n\t\tpt={ 5 }\n\t\talignItems=\"center\"\n\t\tgap={ 1 }\n\t\toverflow={ 'hidden' }\n\t\tjustifySelf={ 'center' }\n\t>\n\t\t{ icon }\n\t\t<Box\n\t\t\tsx={ {\n\t\t\t\twidth: '100%',\n\t\t\t} }\n\t\t>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t{ mainText }\n\t\t\t</Typography>\n\t\t\t{ searchValue && (\n\t\t\t\t<Typography\n\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<span>“</span>\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t</span>\n\t\t\t\t\t<span>”.</span>\n\t\t\t\t</Typography>\n\t\t\t) }\n\t\t</Box>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t{ sceneryText }\n\t\t</Typography>\n\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ onClear }>\n\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t</Link>\n\t\t</Typography>\n\t</Stack>\n);\n","type ExtendedWindow = Window & {\n\t$e?: {\n\t\tcomponents?: {\n\t\t\tget?: ( name: 'panel' ) =>\n\t\t\t\t| {\n\t\t\t\t\t\tblockUserInteractions?: () => void;\n\t\t\t\t\t\tunblockUserInteractions?: () => void;\n\t\t\t\t }\n\t\t\t\t| undefined;\n\t\t};\n\t};\n};\n\nexport function blockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.blockUserInteractions?.();\n}\n\nexport function unblockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.unblockUserInteractions?.();\n}\n","import * as React from 'react';\nimport { 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 * as React from 'react';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { validateStyleLabel } from '@elementor/editor-styles-repository';\nimport { MenuListItem } from '@elementor/editor-ui';\nimport { Divider } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { globalClassesStylesProvider } from '../global-classes-styles-provider';\n\ntype OwnProps = {\n\tsuccessCallback: ( _: string ) => void;\n\tstyleDef: StyleDefinition | null;\n\tcanConvert: boolean;\n};\n\nexport const ConvertLocalClassToGlobalClass = ( props: OwnProps ) => {\n\tconst localStyleData = props.styleDef;\n\n\tconst handleConversion = () => {\n\t\tconst newClassName = createClassName( `converted-class-` );\n\n\t\tif ( ! localStyleData ) {\n\t\t\tthrow new Error( 'Style definition is required for converting local class to global class.' );\n\t\t}\n\n\t\tconst newId = globalClassesStylesProvider.actions.create?.( newClassName, localStyleData.variants );\n\t\tif ( newId ) {\n\t\t\tprops.successCallback( newId );\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<MenuListItem\n\t\t\t\tdisabled={ ! props.canConvert }\n\t\t\t\tonClick={ handleConversion }\n\t\t\t\tdense\n\t\t\t\tsx={ {\n\t\t\t\t\t'&.Mui-focusVisible': {\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tboxShadow: 'none !important',\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ __( 'Convert to global class', 'elementor' ) }\n\t\t\t</MenuListItem>\n\t\t\t<Divider />\n\t\t</>\n\t);\n};\n\nfunction createClassName( prefix: string ): string {\n\tlet i = 1;\n\tlet newClassName = `${ prefix }${ i }`;\n\n\twhile ( ! validateStyleLabel( newClassName, 'create' ).isValid ) {\n\t\tnewClassName = `${ prefix }${ ++i }`;\n\t}\n\n\treturn newClassName;\n}\n","import { useEffect } from 'react';\nimport { __useDispatch as useDispatch } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { slice } from '../store';\n\nexport function PopulateStore() {\n\tconst dispatch = useDispatch();\n\n\tuseEffect( () => {\n\t\tPromise.all( [ apiClient.all( 'preview' ), apiClient.all( 'frontend' ) ] ).then(\n\t\t\t( [ previewRes, frontendRes ] ) => {\n\t\t\t\tconst { data: previewData } = previewRes;\n\t\t\t\tconst { data: frontendData } = frontendRes;\n\n\t\t\t\tdispatch(\n\t\t\t\t\tslice.actions.load( {\n\t\t\t\t\t\tpreview: {\n\t\t\t\t\t\t\titems: previewData.data,\n\t\t\t\t\t\t\torder: previewData.meta.order,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfrontend: {\n\t\t\t\t\t\t\titems: frontendData.data,\n\t\t\t\t\t\t\torder: frontendData.meta.order,\n\t\t\t\t\t\t},\n\t\t\t\t\t} )\n\t\t\t\t);\n\t\t\t}\n\t\t);\n\t}, [ dispatch ] );\n\n\treturn null;\n}\n","import { getCurrentUser } from '@elementor/editor-current-user';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { UPDATE_CLASS_CAPABILITY_KEY } from './capabilities';\nimport { saveGlobalClasses } from './save-global-classes';\nimport { selectIsDirty } from './store';\n\nexport function syncWithDocumentSave() {\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\tconst user = getCurrentUser();\n\n\t\tconst canEdit = user?.capabilities.includes( UPDATE_CLASS_CAPABILITY_KEY );\n\n\t\tif ( ! canEdit ) {\n\t\t\treturn;\n\t\t}\n\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_store","createSlice","id","context","createSelector","getState","id","dispatch","subscribeWithSelector","context","React","import_react","import_editor_documents","import_editor_ui","import_editor_v1_adapters","import_icons","import_query","import_store","import_ui","import_i18n","import_store","useSelector","import_store","useSelector","import_react","import_utils","context","import_react","import_query","import_store","useActiveDocument","id","import_store","import_utils","context","getState","dispatch","id","React","import_ui","import_i18n","React","React","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_ui","import_i18n","import_editor_documents","import_editor_v1_adapters","import_store","id","dispatch","runCommand","React","import_icons","React","import_react","import_store","import_ui","import_i18n","import_store","useSelector","React","import_react","import_editor_styles_repository","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_documents","import_editor_ui","import_icons","import_ui","import_i18n","id","useOpenDocumentInNewTab","React","import_editor_ui","import_icons","import_ui","import_i18n","id","CustomIconButton","React","import_react","import_icons","import_ui","import_i18n","id","React","import_icons","import_ui","id","id","React","import_icons","import_ui","import_i18n","dispatch","useDispatch","id","React","import_react","import_icons","import_ui","TITLE_ID","createPanel","isDirty","dispatch","useActiveDocument","useActiveDocumentActions","React","import_editor_styles_repository","import_editor_ui","import_ui","import_i18n","import_react","import_store","dispatch","useDispatch","import_editor_current_user","import_editor_documents","import_editor_v1_adapters","import_store","subscribeWithSelector","getState","registerSlice","registerPanel","listenTo"]}
|
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-global-classes",
|
|
3
|
-
"version": "3.33.0-
|
|
3
|
+
"version": "3.33.0-116",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -39,22 +39,22 @@
|
|
|
39
39
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@elementor/editor": "3.33.0-
|
|
43
|
-
"@elementor/editor-current-user": "3.33.0-
|
|
44
|
-
"@elementor/editor-documents": "3.33.0-
|
|
45
|
-
"@elementor/editor-editing-panel": "3.33.0-
|
|
46
|
-
"@elementor/editor-panels": "3.33.0-
|
|
47
|
-
"@elementor/editor-props": "3.33.0-
|
|
48
|
-
"@elementor/editor-styles": "3.33.0-
|
|
49
|
-
"@elementor/editor-styles-repository": "3.33.0-
|
|
50
|
-
"@elementor/editor-ui": "3.33.0-
|
|
51
|
-
"@elementor/editor-v1-adapters": "3.33.0-
|
|
52
|
-
"@elementor/http-client": "3.33.0-
|
|
42
|
+
"@elementor/editor": "3.33.0-116",
|
|
43
|
+
"@elementor/editor-current-user": "3.33.0-116",
|
|
44
|
+
"@elementor/editor-documents": "3.33.0-116",
|
|
45
|
+
"@elementor/editor-editing-panel": "3.33.0-116",
|
|
46
|
+
"@elementor/editor-panels": "3.33.0-116",
|
|
47
|
+
"@elementor/editor-props": "3.33.0-116",
|
|
48
|
+
"@elementor/editor-styles": "3.33.0-116",
|
|
49
|
+
"@elementor/editor-styles-repository": "3.33.0-116",
|
|
50
|
+
"@elementor/editor-ui": "3.33.0-116",
|
|
51
|
+
"@elementor/editor-v1-adapters": "3.33.0-116",
|
|
52
|
+
"@elementor/http-client": "3.33.0-116",
|
|
53
53
|
"@elementor/icons": "1.46.0",
|
|
54
|
-
"@elementor/query": "3.33.0-
|
|
55
|
-
"@elementor/store": "3.33.0-
|
|
54
|
+
"@elementor/query": "3.33.0-116",
|
|
55
|
+
"@elementor/store": "3.33.0-116",
|
|
56
56
|
"@elementor/ui": "1.36.12",
|
|
57
|
-
"@elementor/utils": "3.33.0-
|
|
57
|
+
"@elementor/utils": "3.33.0-116",
|
|
58
58
|
"@wordpress/i18n": "^5.13.0"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|
package/src/index.ts
CHANGED