@elementor/editor-components 3.35.0-360 → 3.35.0-361

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/component-instance-transformer.ts","../src/store/store.ts","../src/store/thunks.ts","../src/api.ts","../src/utils/component-document-data.ts","../src/component-overridable-transformer.ts","../src/component-override-transformer.ts","../src/components/component-panel-header/component-panel-header.tsx","../src/hooks/use-navigate-back.ts","../src/utils/switch-to-component.ts","../src/components/component-panel-header/component-badge.tsx","../src/components/component-panel-header/use-overridable-props.ts","../src/components/components-tab/components.tsx","../src/components/components-tab/component-search.tsx","../src/components/components-tab/search-provider.tsx","../src/components/components-tab/components-list.tsx","../src/hooks/use-components.ts","../src/components/components-tab/components-item.tsx","../src/store/actions/archive-component.ts","../src/store/actions/load-components-assets.ts","../src/create-component-type.ts","../src/utils/tracking.ts","../src/utils/get-component-ids.ts","../src/store/actions/load-components-overridable-props.ts","../src/store/actions/load-components-styles.ts","../src/utils/get-container-for-new-element.ts","../src/components/create-component-form/utils/replace-element-with-component.ts","../src/components/components-tab/loading-components.tsx","../src/components/consts.ts","../src/components/create-component-form/create-component-form.tsx","../src/store/actions/create-unpublished-component.ts","../src/components/create-component-form/hooks/use-form.ts","../src/components/create-component-form/utils/component-form-schema.ts","../src/components/create-component-form/utils/get-component-event-data.ts","../src/components/edit-component/edit-component.tsx","../src/store/actions/update-current-component.ts","../src/components/edit-component/component-modal.tsx","../src/hooks/use-canvas-document.ts","../src/hooks/use-element-rect.ts","../src/components/in-edit-mode.tsx","../src/components/instance-editing-panel/instance-editing-panel.tsx","../src/prop-types/component-instance-prop-type.ts","../src/prop-types/component-instance-overrides-prop-type.ts","../src/prop-types/component-instance-override-prop-type.ts","../src/components/instance-editing-panel/empty-state.tsx","../src/components/instance-editing-panel/override-props-group.tsx","../src/components/overridable-props/overridable-prop-control.tsx","../src/prop-types/component-overridable-prop-type.ts","../src/provider/overridable-prop-context.tsx","../src/store/actions/update-overridable-prop-origin-value.ts","../src/components/overridable-props/overridable-prop-indicator.tsx","../src/store/actions/set-overridable-prop.ts","../src/components/overridable-props/indicator.tsx","../src/components/overridable-props/overridable-prop-form.tsx","../src/components/overridable-props/utils/get-overridable-prop.ts","../src/mcp/index.ts","../src/mcp/save-as-component-tool.ts","../src/populate-store.ts","../src/store/actions/remove-component-styles.ts","../src/store/components-styles-provider.ts","../src/sync/create-components-before-save.ts","../src/sync/set-component-overridable-props-settings-before-save.ts","../src/sync/update-archived-component-before-save.ts","../src/sync/update-components-before-save.ts","../src/sync/before-save.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoLogic, injectIntoTop } from '@elementor/editor';\nimport {\n\ttype CreateTemplatedElementTypeOptions,\n\tregisterElementType,\n\tsettingsTransformersRegistry,\n} from '@elementor/editor-canvas';\nimport { getV1CurrentDocument } from '@elementor/editor-documents';\nimport {\n\tFIELD_TYPE,\n\tinjectIntoPanelHeaderTop,\n\tregisterControlReplacement,\n\tregisterEditingPanelReplacement,\n\tregisterFieldIndicator,\n} from '@elementor/editor-editing-panel';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { injectTab } from '@elementor/editor-elements-panel';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __registerSlice as registerSlice } from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstanceTransformer } from './component-instance-transformer';\nimport { componentOverridableTransformer } from './component-overridable-transformer';\nimport { componentOverrideTransformer } from './component-override-transformer';\nimport { ComponentPanelHeader } from './components/component-panel-header/component-panel-header';\nimport { Components } from './components/components-tab/components';\nimport { COMPONENT_DOCUMENT_TYPE } from './components/consts';\nimport { CreateComponentForm } from './components/create-component-form/create-component-form';\nimport { EditComponent } from './components/edit-component/edit-component';\nimport { openEditModeDialog } from './components/in-edit-mode';\nimport { InstanceEditingPanel } from './components/instance-editing-panel/instance-editing-panel';\nimport { OverridablePropControl } from './components/overridable-props/overridable-prop-control';\nimport { OverridablePropIndicator } from './components/overridable-props/overridable-prop-indicator';\nimport { createComponentType, TYPE } from './create-component-type';\nimport { initMcp } from './mcp';\nimport { PopulateStore } from './populate-store';\nimport { componentOverridablePropTypeUtil } from './prop-types/component-overridable-prop-type';\nimport { loadComponentsAssets } from './store/actions/load-components-assets';\nimport { removeComponentStyles } from './store/actions/remove-component-styles';\nimport { componentsStylesProvider } from './store/components-styles-provider';\nimport { slice } from './store/store';\nimport { beforeSave } from './sync/before-save';\nimport { type ExtendedWindow } from './types';\nimport { onElementDrop } from './utils/tracking';\n\nexport function init() {\n\tstylesRepository.register( componentsStylesProvider );\n\n\tregisterSlice( slice );\n\n\tregisterElementType( TYPE, ( options: CreateTemplatedElementTypeOptions ) =>\n\t\tcreateComponentType( { ...options, showLockedByModal: openEditModeDialog } )\n\t);\n\n\tregisterDataHook( 'dependency', 'editor/documents/close', ( args ) => {\n\t\tconst document = getV1CurrentDocument();\n\t\tif ( document.config.type === COMPONENT_DOCUMENT_TYPE ) {\n\t\t\targs.mode = 'autosave';\n\t\t}\n\t\treturn true;\n\t} );\n\n\tregisterDataHook( 'after', 'preview/drop', onElementDrop );\n\n\t( window as unknown as ExtendedWindow ).elementorCommon.__beforeSave = beforeSave;\n\n\tinjectTab( {\n\t\tid: 'components',\n\t\tlabel: __( 'Components', 'elementor' ),\n\t\tcomponent: Components,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'create-component-popup',\n\t\tcomponent: CreateComponentForm,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'components-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'edit-component',\n\t\tcomponent: EditComponent,\n\t} );\n\n\tinjectIntoPanelHeaderTop( {\n\t\tid: 'component-panel-header',\n\t\tcomponent: ComponentPanelHeader,\n\t} );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\tconst { id, config } = getV1CurrentDocument();\n\n\t\tif ( id ) {\n\t\t\tremoveComponentStyles( id );\n\t\t}\n\n\t\tawait loadComponentsAssets( ( config?.elements as V1ElementData[] ) ?? [] );\n\t} );\n\n\tregisterFieldIndicator( {\n\t\tfieldType: FIELD_TYPE.SETTINGS,\n\t\tid: 'component-overridable-prop',\n\t\tpriority: 1,\n\t\tindicator: OverridablePropIndicator,\n\t} );\n\n\tregisterControlReplacement( {\n\t\tcomponent: OverridablePropControl,\n\t\tcondition: ( { value } ) => componentOverridablePropTypeUtil.isValid( value ),\n\t} );\n\n\tregisterEditingPanelReplacement( {\n\t\tid: 'component-instance-edit-panel',\n\t\tcondition: ( _, elementType ) => elementType.key === 'e-component',\n\t\tcomponent: InstanceEditingPanel,\n\t} );\n\n\tsettingsTransformersRegistry.register( 'component-instance', componentInstanceTransformer );\n\tsettingsTransformersRegistry.register( 'overridable', componentOverridableTransformer );\n\tsettingsTransformersRegistry.register( 'override', componentOverrideTransformer );\n\n\tinitMcp();\n}\n","import { createTransformer, RenderContext } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectUnpublishedComponents } from './store/store';\nimport { type ComponentOverridePropValue } from './types';\nimport { getComponentDocumentData } from './utils/component-document-data';\n\ntype ComponentInstanceContext = {\n\toverrides?: Record< string, unknown >;\n};\n\nexport const componentInstanceContext = new RenderContext< ComponentInstanceContext >( 'component-instance', {\n\toverrides: {},\n} );\n\nexport const componentInstanceTransformer = createTransformer(\n\tasync ( {\n\t\tcomponent_id: id,\n\t\toverrides: overridesValue,\n\t}: {\n\t\tcomponent_id: number | string;\n\t\toverrides?: ComponentOverridePropValue[];\n\t} ) => {\n\t\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\t\tconst unpublishedComponent = unpublishedComponents.find( ( { uid } ) => uid === id );\n\n\t\tconst overrides = overridesValue?.reduce( ( acc, override ) => ( { ...acc, ...override } ), {} );\n\n\t\tif ( unpublishedComponent ) {\n\t\t\treturn {\n\t\t\t\telements: structuredClone( unpublishedComponent.elements ),\n\t\t\t\toverrides,\n\t\t\t};\n\t\t}\n\n\t\tif ( typeof id !== 'number' ) {\n\t\t\tthrow new Error( `Component ID \"${ id }\" not valid.` );\n\t\t}\n\n\t\tconst data = await getComponentDocumentData( id );\n\n\t\treturn {\n\t\t\telements: data?.elements ?? [],\n\t\t\toverrides,\n\t\t};\n\t}\n);\n","import { type V1Document } from '@elementor/editor-documents';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport {\n\ttype Component,\n\ttype ComponentId,\n\ttype OverridableProps,\n\ttype PublishedComponent,\n\ttype StylesDefinition,\n\ttype UnpublishedComponent,\n} from '../types';\nimport { loadComponents } from './thunks';\n\ntype GetComponentResponse = PublishedComponent[];\n\ntype Status = 'idle' | 'pending' | 'error';\n\ntype ComponentsState = {\n\tdata: PublishedComponent[];\n\tunpublishedData: UnpublishedComponent[];\n\tloadStatus: Status;\n\tstyles: StylesDefinition;\n\tcreatedThisSession: Component[ 'uid' ][];\n\tarchivedData: PublishedComponent[];\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n};\n\nexport type ComponentsSlice = SliceState< typeof slice >;\n\nexport type ComponentsPathItem = {\n\tinstanceId?: string;\n\tcomponentId: V1Document[ 'id' ];\n};\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\n\tcreatedThisSession: [],\n\tarchivedData: [],\n\tpath: [],\n\tcurrentComponentId: null,\n};\n\nexport const SLICE_NAME = 'components';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tadd: ( state, { payload }: PayloadAction< PublishedComponent | PublishedComponent[] > ) => {\n\t\t\tif ( Array.isArray( payload ) ) {\n\t\t\t\tstate.data = [ ...state.data, ...payload ];\n\t\t\t} else {\n\t\t\t\tstate.data.unshift( payload );\n\t\t\t}\n\t\t},\n\t\tload: ( state, { payload }: PayloadAction< PublishedComponent[] > ) => {\n\t\t\tstate.data = payload;\n\t\t},\n\t\taddUnpublished: ( state, { payload }: PayloadAction< UnpublishedComponent > ) => {\n\t\t\tstate.unpublishedData.unshift( payload );\n\t\t},\n\t\tresetUnpublished: ( state ) => {\n\t\t\tstate.unpublishedData = [];\n\t\t},\n\t\tremoveStyles( state, { payload }: PayloadAction< { id: ComponentId } > ) {\n\t\t\tconst { [ payload.id ]: _, ...rest } = state.styles;\n\n\t\t\tstate.styles = rest;\n\t\t},\n\t\taddStyles: ( state, { payload } ) => {\n\t\t\tstate.styles = { ...state.styles, ...payload };\n\t\t},\n\t\taddCreatedThisSession: ( state, { payload }: PayloadAction< string > ) => {\n\t\t\tstate.createdThisSession.push( payload );\n\t\t},\n\t\tarchive: ( state, { payload }: PayloadAction< number > ) => {\n\t\t\tstate.data = state.data.filter( ( component ) => {\n\t\t\t\tconst isArchived = component.id === payload;\n\t\t\t\tif ( isArchived ) {\n\t\t\t\t\tstate.archivedData.push( component );\n\t\t\t\t}\n\n\t\t\t\treturn ! isArchived;\n\t\t\t} );\n\t\t},\n\t\tsetCurrentComponentId: ( state, { payload }: PayloadAction< V1Document[ 'id' ] | null > ) => {\n\t\t\tstate.currentComponentId = payload;\n\t\t},\n\t\tsetPath: ( state, { payload }: PayloadAction< ComponentsPathItem[] > ) => {\n\t\t\tstate.path = payload;\n\t\t},\n\t\tsetOverridableProps: (\n\t\t\tstate,\n\t\t\t{ payload }: PayloadAction< { componentId: ComponentId; overridableProps: OverridableProps } >\n\t\t) => {\n\t\t\tconst component = state.data.find( ( comp ) => comp.id === payload.componentId );\n\n\t\t\tif ( ! component ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcomponent.overridableProps = payload.overridableProps;\n\t\t},\n\t},\n\textraReducers: ( builder ) => {\n\t\tbuilder.addCase( loadComponents.fulfilled, ( state, { payload }: PayloadAction< GetComponentResponse > ) => {\n\t\t\tstate.data = payload;\n\t\t\tstate.loadStatus = 'idle';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.pending, ( state ) => {\n\t\t\tstate.loadStatus = 'pending';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.rejected, ( state ) => {\n\t\t\tstate.loadStatus = 'error';\n\t\t} );\n\t},\n} );\n\nconst selectData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].data;\nconst selectArchivedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].archivedData;\nconst selectLoadStatus = ( state: ComponentsSlice ) => state[ SLICE_NAME ].loadStatus;\nconst selectStylesDefinitions = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nconst selectUnpublishedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].unpublishedData;\nconst getCreatedThisSession = ( state: ComponentsSlice ) => state[ SLICE_NAME ].createdThisSession;\nconst getPath = ( state: ComponentsSlice ) => state[ SLICE_NAME ].path;\nconst getCurrentComponentId = ( state: ComponentsSlice ) => state[ SLICE_NAME ].currentComponentId;\nexport const selectComponent = ( state: ComponentsSlice, componentId: ComponentId ) =>\n\tstate[ SLICE_NAME ].data.find( ( component ) => component.id === componentId );\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: PublishedComponent[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( {\n\t\t\tuid: item.uid,\n\t\t\tname: item.name,\n\t\t\toverridableProps: item.overridableProps,\n\t\t} ) ),\n\t\t...data,\n\t]\n);\nexport const selectUnpublishedComponents = createSelector(\n\tselectUnpublishedData,\n\t( unpublishedData: UnpublishedComponent[] ) => unpublishedData\n);\nexport const selectLoadIsPending = createSelector( selectLoadStatus, ( status ) => status === 'pending' );\nexport const selectLoadIsError = createSelector( selectLoadStatus, ( status ) => status === 'error' );\nexport const selectStyles = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nexport const selectFlatStyles = createSelector( selectStylesDefinitions, ( data ) => Object.values( data ).flat() );\nexport const selectCreatedThisSession = createSelector(\n\tgetCreatedThisSession,\n\t( createdThisSession ) => createdThisSession\n);\n\nconst DEFAULT_OVERRIDABLE_PROPS: OverridableProps = {\n\tprops: {},\n\tgroups: {\n\t\titems: {},\n\t\torder: [],\n\t},\n};\n\nexport const selectOverridableProps = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\tif ( ! component ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;\n\t}\n);\nexport const selectIsOverridablePropsLoaded = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\treturn !! component?.overridableProps;\n\t}\n);\nexport const selectPath = createSelector( getPath, ( path ) => path );\nexport const selectCurrentComponentId = createSelector(\n\tgetCurrentComponentId,\n\t( currentComponentId ) => currentComponentId\n);\n\nexport const selectArchivedComponents = createSelector(\n\tselectArchivedData,\n\t( archivedData: PublishedComponent[] ) => archivedData\n);\n","import { __createAsyncThunk as createAsyncThunk } from '@elementor/store';\n\nimport { apiClient } from '../api';\n\nconst loadComponents = createAsyncThunk( 'components/load', async () => {\n\tconst response = await apiClient.get();\n\treturn response;\n} );\n\nexport { loadComponents };\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { ajax } from '@elementor/editor-v1-adapters';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type DocumentSaveStatus, type OverridableProps, type PublishedComponent } from './types';\n\nconst BASE_URL = 'elementor/v1/components';\n\nexport type ComponentItems = Array< {\n\tuid: string;\n\ttitle: string;\n\telements: V1ElementData[];\n\tsettings?: {\n\t\toverridable_props?: OverridableProps;\n\t};\n} >;\n\nexport type CreateComponentPayload = {\n\tstatus: DocumentSaveStatus;\n\titems: ComponentItems;\n};\n\ntype ComponentLockStatusResponse = {\n\tis_current_user_allow_to_edit: boolean;\n\tlocked_by: string;\n};\n\ntype GetComponentResponse = Array< PublishedComponent >;\n\nexport type CreateComponentResponse = Record< string, number >;\n\nexport type ValidateComponentsPayload = {\n\titems: ComponentItems;\n};\n\nexport type ValidateComponentsResponse = {\n\tcode: string;\n\tmessage: string;\n\tdata: {\n\t\tstatus: number;\n\t\tmeta: Record< string, unknown >;\n\t};\n};\n\nexport const getParams = ( id: number ) => ( {\n\taction: 'get_document_config',\n\tunique_id: `document-config-${ id }`,\n\tdata: { id },\n} );\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< HttpResponse< GetComponentResponse > >( `${ BASE_URL }` )\n\t\t\t.then( ( res ) => res.data.data ),\n\tcreate: ( payload: CreateComponentPayload ) =>\n\t\thttpService()\n\t\t\t.post< HttpResponse< CreateComponentResponse > >( `${ BASE_URL }`, payload )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateStatuses: ( ids: number[], status: DocumentSaveStatus ) =>\n\t\thttpService().put( `${ BASE_URL }/status`, {\n\t\t\tids,\n\t\t\tstatus,\n\t\t} ),\n\tgetComponentConfig: ( id: number ) => ajax.load< { id: number }, V1ElementData >( getParams( id ) ),\n\tinvalidateComponentConfigCache: ( id: number ) => ajax.invalidateCache< { id: number } >( getParams( id ) ),\n\tgetComponentLockStatus: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< { data: ComponentLockStatusResponse } >( `${ BASE_URL }/lock-status`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId,\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => {\n\t\t\t\tconst { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data;\n\t\t\t\treturn { isAllowedToSwitchDocument, lockedBy: lockedBy || '' };\n\t\t\t} ),\n\tlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/lock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tunlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/unlock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tgetOverridableProps: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< HttpResponse< OverridableProps > >( `${ BASE_URL }/overridable-props`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId: componentId.toString(),\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateArchivedComponents: async ( componentIds: number[] ) =>\n\t\tawait httpService()\n\t\t\t.post< { data: { failedIds: number[]; successIds: number[]; success: boolean } } >(\n\t\t\t\t`${ BASE_URL }/archive`,\n\t\t\t\t{\n\t\t\t\t\tcomponentIds,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then( ( res ) => res.data.data ),\n\tvalidate: async ( payload: ValidateComponentsPayload ) =>\n\t\tawait httpService()\n\t\t\t.post< HttpResponse< ValidateComponentsResponse > >( `${ BASE_URL }/create-validate`, payload )\n\t\t\t.then( ( res ) => res.data ),\n};\n","import { type Document, getV1DocumentsManager } from '@elementor/editor-documents';\n\ntype ComponentDocumentData = Document;\n\nexport const getComponentDocumentData = async ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\ttry {\n\t\treturn await documentManager.request< ComponentDocumentData >( id );\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const invalidateComponentDocumentData = ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\tdocumentManager.invalidateCache( id );\n};\n","import { createTransformer, settingsTransformersRegistry } from '@elementor/editor-canvas';\nimport { type PropValue, type TransformablePropValue } from '@elementor/editor-props';\n\nimport { componentInstanceContext } from './component-instance-transformer';\nimport { type ComponentOverridable } from './types';\n\nexport const componentOverridableTransformer = createTransformer(\n\t( value: ComponentOverridable, options: { key: string } ) => {\n\t\tconst { overrides } = componentInstanceContext.get();\n\n\t\tconst overrideValue = overrides?.[ value.override_key ];\n\n\t\tif ( overrideValue ) {\n\t\t\tconst isOverride = isOriginValueOverride( value.origin_value );\n\n\t\t\tif ( isOverride ) {\n\t\t\t\treturn transformOverride( value, options, overrideValue );\n\t\t\t}\n\n\t\t\treturn overrideValue;\n\t\t}\n\n\t\treturn value.origin_value;\n\t}\n);\n\nfunction transformOverride(\n\tvalue: ComponentOverridable,\n\toptions: {\n\t\tkey: string;\n\t},\n\toverrideValue: PropValue\n) {\n\tconst transformer = settingsTransformersRegistry.get( 'override' );\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\tconst transformedValue = transformer( value.origin_value.value, options );\n\n\tif ( ! transformedValue ) {\n\t\treturn null;\n\t}\n\n\tconst [ key ] = Object.keys( transformedValue as Record< string, unknown > );\n\n\treturn {\n\t\t[ key ]: overrideValue,\n\t};\n}\n\nfunction isOriginValueOverride( originValue: TransformablePropValue< string > ): boolean {\n\treturn originValue.$$type === 'override';\n}\n","import { createTransformer } from '@elementor/editor-canvas';\n\nimport { type ComponentOverridePropValue } from './types';\n\nexport const componentOverrideTransformer = createTransformer( ( override: ComponentOverridePropValue ) => {\n\tconst { override_key: key, override_value: overrideValue } = override;\n\n\treturn { [ key ]: overrideValue };\n} );\n","import * as React from 'react';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { ArrowLeftIcon, ComponentsFilledIcon } from '@elementor/icons';\nimport { __useSelector as useSelector } from '@elementor/store';\nimport { Box, Divider, IconButton, Stack, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { selectCurrentComponentId } from '../../store/store';\nimport { ComponentsBadge } from './component-badge';\nimport { useOverridableProps } from './use-overridable-props';\n\nexport const ComponentPanelHeader = () => {\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\tconst onBack = useNavigateBack();\n\tconst componentName = getComponentName();\n\n\tconst overridesCount = overridableProps ? Object.keys( overridableProps.props ).length : 0;\n\n\tif ( ! currentComponentId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Box>\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"center\"\n\t\t\t\tjustifyContent=\"space-between\"\n\t\t\t\tsx={ { height: 48, pl: 1.5, pr: 2, py: 1 } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t<Tooltip title={ __( 'Back', 'elementor' ) }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onBack } aria-label={ __( 'Back', 'elementor' ) }>\n\t\t\t\t\t\t\t<ArrowLeftIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 }>\n\t\t\t\t\t\t<ComponentsFilledIcon fontSize=\"tiny\" stroke=\"currentColor\" />\n\t\t\t\t\t\t<Typography variant=\"caption\" sx={ { fontWeight: 500 } }>\n\t\t\t\t\t\t\t{ componentName }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t\t<ComponentsBadge overridesCount={ overridesCount } />\n\t\t\t</Stack>\n\t\t\t<Divider />\n\t\t</Box>\n\t);\n};\n\nfunction getComponentName() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentDocument = documentsManager.getCurrent();\n\n\treturn currentDocument?.container?.settings?.get( 'post_title' ) ?? '';\n}\n","import { useCallback } from 'react';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectPath } from '../store/store';\nimport { switchToComponent } from '../utils/switch-to-component';\n\nexport function useNavigateBack() {\n\tconst path = useSelector( selectPath );\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\treturn useCallback( () => {\n\t\tconst { componentId: prevComponentId, instanceId: prevComponentInstanceId } = path.at( -2 ) ?? {};\n\n\t\tif ( prevComponentId && prevComponentInstanceId ) {\n\t\t\tswitchToComponent( prevComponentId, prevComponentInstanceId );\n\n\t\t\treturn;\n\t\t}\n\n\t\tswitchToComponent( documentsManager.getInitialId() );\n\t}, [ path, documentsManager ] );\n}\n","import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport function switchToComponent( componentId: number | string, componentInstanceId?: string | null ) {\n\trunCommand( 'editor/documents/switch', {\n\t\tid: componentId,\n\t\tselector: componentInstanceId ? `[data-id=\"${ componentInstanceId }\"]` : undefined,\n\t\tmode: 'autosave',\n\t\tsetAsInitial: false,\n\t\tshouldScroll: false,\n\t} );\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { ComponentPropListIcon } from '@elementor/icons';\nimport { Badge, Box, keyframes, styled, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const ComponentsBadge = ( { overridesCount }: { overridesCount: number } ) => {\n\tconst prevCount = usePrevious( overridesCount );\n\n\tconst isFirstOverride = prevCount === 0 && overridesCount === 1;\n\n\treturn (\n\t\t<StyledBadge\n\t\t\tcolor=\"primary\"\n\t\t\tkey={ overridesCount }\n\t\t\tinvisible={ overridesCount === 0 }\n\t\t\tanimate={ isFirstOverride }\n\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\tbadgeContent={\n\t\t\t\t<Box sx={ { animation: ! isFirstOverride ? `${ slideUp } 300ms ease-out` : 'none' } }>\n\t\t\t\t\t{ overridesCount }\n\t\t\t\t</Box>\n\t\t\t}\n\t\t>\n\t\t\t<ToggleButton value=\"overrides\" size=\"tiny\" aria-label={ __( 'View overrides', 'elementor' ) }>\n\t\t\t\t<ComponentPropListIcon fontSize=\"tiny\" />\n\t\t\t</ToggleButton>\n\t\t</StyledBadge>\n\t);\n};\n\nconst StyledBadge = styled( Badge, { shouldForwardProp: ( prop ) => prop !== 'animate' } )(\n\t( { theme, animate } ) => ( {\n\t\t'& .MuiBadge-badge': {\n\t\t\tminWidth: theme.spacing( 2 ),\n\t\t\theight: theme.spacing( 2 ),\n\t\t\tminHeight: theme.spacing( 2 ),\n\t\t\tmaxWidth: theme.spacing( 2 ),\n\t\t\tfontSize: theme.typography.caption.fontSize as string,\n\t\t\tanimation: animate ? `${ bounceIn } 300ms ease-out` : 'none',\n\t\t},\n\t} )\n);\n\nfunction usePrevious< T >( value: T ) {\n\tconst ref = useRef< T >( value );\n\tuseEffect( () => {\n\t\tref.current = value;\n\t}, [ value ] );\n\treturn ref.current;\n}\n\nconst bounceIn = keyframes`\n\t0% { transform: scale(0) translate(50%, 50%); opacity: 0; }\n\t70% { transform: scale(1.1) translate(50%, -50%); opacity: 1; }\n\t100% { transform: scale(1) translate(50%, -50%); opacity: 1; }\n`;\n\nconst slideUp = keyframes`\n\tfrom { transform: translateY(100%); opacity: 0; }\n\tto { transform: translateY(0); opacity: 1; }\n`;\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { type ComponentsSlice, selectOverridableProps } from '../../store/store';\nimport { type ComponentId, type OverridableProps } from '../../types';\n\nexport function useOverridableProps( componentId: ComponentId | null ): OverridableProps | undefined {\n\treturn useSelector( ( state: ComponentsSlice ) => {\n\t\tif ( ! componentId ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn selectOverridableProps( state, componentId );\n\t} );\n}\n","import * as React from 'react';\nimport { ThemeProvider } from '@elementor/editor-ui';\n\nimport { ComponentSearch } from './component-search';\nimport { ComponentsList } from './components-list';\nimport { SearchProvider } from './search-provider';\n\nexport const Components = () => {\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<SearchProvider localStorageKey=\"elementor-components-search\">\n\t\t\t\t<ComponentSearch />\n\t\t\t\t<ComponentsList />\n\t\t\t</SearchProvider>\n\t\t</ThemeProvider>\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 { useSearch } from './search-provider';\n\nexport const ComponentSearch = () => {\n\tconst { inputValue, handleChange } = useSearch();\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={ 0.5 } sx={ { width: '100%', px: 2, py: 1.5 } }>\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 { createContext, useContext } from 'react';\nimport { useSearchState, type UseSearchStateResult } from '@elementor/utils';\n\ntype SearchContextType = Pick< UseSearchStateResult, 'handleChange' | 'inputValue' > & {\n\tsearchValue: UseSearchStateResult[ 'debouncedValue' ];\n\tclearSearch: () => void;\n};\n\nconst SearchContext = createContext< SearchContextType | undefined >( undefined );\n\nexport const SearchProvider = ( {\n\tchildren,\n\tlocalStorageKey,\n}: {\n\tchildren: React.ReactNode;\n\tlocalStorageKey: string;\n} ) => {\n\tconst { debouncedValue, handleChange, inputValue } = useSearchState( { localStorageKey } );\n\n\tconst clearSearch = () => {\n\t\thandleChange( '' );\n\t};\n\n\treturn (\n\t\t<SearchContext.Provider value={ { handleChange, clearSearch, searchValue: debouncedValue, inputValue } }>\n\t\t\t{ children }\n\t\t</SearchContext.Provider>\n\t);\n};\n\nexport const useSearch = () => {\n\tconst context = useContext( SearchContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useSearch must be used within a SearchProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { ComponentsIcon, EyeIcon } from '@elementor/icons';\nimport { Box, Divider, Icon, Link, List, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { ComponentItem } from './components-item';\nimport { LoadingComponents } from './loading-components';\nimport { useSearch } from './search-provider';\n\nexport function ComponentsList() {\n\tconst { components, isLoading, searchValue } = useFilteredComponents();\n\n\tif ( isLoading ) {\n\t\treturn <LoadingComponents />;\n\t}\n\tconst isEmpty = ! components || components.length === 0;\n\tif ( isEmpty ) {\n\t\tif ( searchValue.length > 0 ) {\n\t\t\treturn <EmptySearchResult />;\n\t\t}\n\t\treturn <EmptyState />;\n\t}\n\n\treturn (\n\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 1, px: 2 } }>\n\t\t\t{ components.map( ( component ) => (\n\t\t\t\t<ComponentItem key={ component.uid } component={ component } />\n\t\t\t) ) }\n\t\t</List>\n\t);\n}\n\nconst EmptyState = () => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tsx={ { px: 2.5, pt: 10 } }\n\t\t\tgap={ 1.75 }\n\t\t\toverflow=\"hidden\"\n\t\t>\n\t\t\t<Icon fontSize=\"large\">\n\t\t\t\t<EyeIcon fontSize=\"large\" />\n\t\t\t</Icon>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"text.secondary\" fontWeight=\"bold\">\n\t\t\t\t{ __( 'Text that explains that there are no Components yet.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography variant=\"caption\" align=\"center\" color=\"text.secondary\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Once you have Components, this is where you can manage them—rearrange, duplicate, rename and delete irrelevant classes.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<Divider sx={ { width: '100%' } } color=\"text.secondary\" />\n\t\t\t<Typography align=\"left\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t{ __( 'To create a component, first design it, then choose one of three options:', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography\n\t\t\t\talign=\"left\"\n\t\t\t\tvariant=\"caption\"\n\t\t\t\tcolor=\"text.secondary\"\n\t\t\t\tsx={ { display: 'flex', flexDirection: 'column' } }\n\t\t\t>\n\t\t\t\t<span>{ __( '1. Right-click and select Create Component', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '2. Use the component icon in the Structure panel', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '3. Use the component icon in the Edit panel header', 'elementor' ) }</span>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst EmptySearchResult = () => {\n\tconst { searchValue, clearSearch } = useSearch();\n\treturn (\n\t\t<Stack\n\t\t\tcolor={ 'text.secondary' }\n\t\t\tpt={ 5 }\n\t\t\talignItems=\"center\"\n\t\t\tgap={ 1 }\n\t\t\toverflow={ 'hidden' }\n\t\t\tjustifySelf={ 'center' }\n\t\t>\n\t\t\t<ComponentsIcon />\n\t\t\t<Box\n\t\t\t\tsx={ {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t\t{ searchValue && (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>&ldquo;</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span>&rdquo;.</span>\n\t\t\t\t\t</Typography>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t{ __( 'Try something else.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ clearSearch }>\n\t\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t\t</Link>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst useFilteredComponents = () => {\n\tconst { components, isLoading } = useComponents();\n\tconst { searchValue } = useSearch();\n\n\treturn {\n\t\tcomponents: components.filter( ( component ) =>\n\t\t\tcomponent.name.toLowerCase().includes( searchValue.toLowerCase() )\n\t\t),\n\t\tisLoading,\n\t\tsearchValue,\n\t};\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectComponents, selectLoadIsPending } from '../store/store';\n\nexport const useComponents = () => {\n\tconst components = useSelector( selectComponents );\n\tconst isLoading = useSelector( selectLoadIsPending );\n\n\treturn { components, isLoading };\n};\n","import * as React from 'react';\nimport { endDragElementFromPanel, startDragElementFromPanel } from '@elementor/editor-canvas';\nimport { dropElement, type DropElementParams, type V1ElementData } from '@elementor/editor-elements';\nimport { EllipsisWithTooltip, MenuListItem } from '@elementor/editor-ui';\nimport { ComponentsIcon, DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tListItemButton,\n\tListItemIcon,\n\tMenu,\n\tStack,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { archiveComponent } from '../../store/actions/archive-component';\nimport { loadComponentsAssets } from '../../store/actions/load-components-assets';\nimport { type Component } from '../../types';\nimport { getContainerForNewElement } from '../../utils/get-container-for-new-element';\nimport { createComponentModel } from '../create-component-form/utils/replace-element-with-component';\n\ntype ComponentItemProps = {\n\tcomponent: Omit< Component, 'id' > & { id?: number };\n};\n\nexport const ComponentItem = ( { component }: ComponentItemProps ) => {\n\tconst componentModel = createComponentModel( component );\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst handleClick = () => {\n\t\taddComponentToPage( componentModel );\n\t};\n\n\tconst handleDragEnd = () => {\n\t\tloadComponentsAssets( [ componentModel as V1ElementData ] );\n\n\t\tendDragElementFromPanel();\n\t};\n\n\tconst handleArchiveClick = () => {\n\t\tpopupState.close();\n\n\t\tif ( ! component.id ) {\n\t\t\tthrow new Error( 'Component ID is required' );\n\t\t}\n\n\t\tarchiveComponent( component.id );\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<ListItemButton\n\t\t\t\tdraggable\n\t\t\t\tonDragStart={ () => startDragElementFromPanel( componentModel ) }\n\t\t\t\tonDragEnd={ handleDragEnd }\n\t\t\t\tshape=\"rounded\"\n\t\t\t\tsx={ {\n\t\t\t\t\tborder: 'solid 1px',\n\t\t\t\t\tborderColor: 'divider',\n\t\t\t\t\tpy: 0.5,\n\t\t\t\t\tpx: 1,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 1,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Box\n\t\t\t\t\tonClick={ handleClick }\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tgap: 1,\n\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<ListItemIcon size=\"tiny\">\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"tiny\" />\n\t\t\t\t\t</ListItemIcon>\n\t\t\t\t\t<Box display=\"flex\" flex={ 1 } minWidth={ 0 } flexGrow={ 1 }>\n\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\ttitle={ component.name }\n\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\tcolor=\"text.primary\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t\t<IconButton size=\"tiny\" { ...bindTrigger( popupState ) } aria-label=\"More actions\">\n\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</ListItemButton>\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 sx={ { minWidth: '160px' } } onClick={ handleArchiveClick }>\n\t\t\t\t\t{ __( 'Archive', 'elementor' ) }\n\t\t\t\t</MenuListItem>\n\t\t\t</Menu>\n\t\t</Stack>\n\t);\n};\n\nconst addComponentToPage = ( model: DropElementParams[ 'model' ] ) => {\n\tconst { container, options } = getContainerForNewElement();\n\n\tif ( ! container ) {\n\t\tthrow new Error( `Can't find container to drop new component instance at` );\n\t}\n\n\tloadComponentsAssets( [ model as V1ElementData ] );\n\n\tdropElement( {\n\t\tcontainerId: container.id,\n\t\tmodel,\n\t\toptions: { ...options, useHistory: false, scrollIntoView: true },\n\t} );\n};\n","import { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { slice } from '../store';\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import { isDocumentDirty, setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { getComponentDocumentData } from '../../utils/component-document-data';\nimport { getComponentIds } from '../../utils/get-component-ids';\nimport { loadComponentsOverridableProps } from './load-components-overridable-props';\nimport { loadComponentsStyles } from './load-components-styles';\n\nexport async function loadComponentsAssets( elements: V1ElementData[] ) {\n\tconst componentIds = await getComponentIds( elements );\n\n\treturn Promise.all( [\n\t\tupdateDocumentState( componentIds ),\n\t\tloadComponentsOverridableProps( componentIds ),\n\t\tloadComponentsStyles( componentIds ),\n\t] );\n}\n\nasync function updateDocumentState( componentIds: number[] ) {\n\tconst components = ( await Promise.all( componentIds.map( getComponentDocumentData ) ) ).filter(\n\t\t( document ) => !! document\n\t);\n\n\tconst isDrafted = components.some( isDocumentDirty );\n\n\tif ( isDrafted ) {\n\t\tsetDocumentModifiedStatus( true );\n\t}\n}\n","import {\n\ttype BackboneModel,\n\ttype CreateTemplatedElementTypeOptions,\n\tcreateTemplatedElementView,\n\ttype ElementModel,\n\ttype ElementType,\n\ttype ElementView,\n\ttype LegacyWindow,\n} from '@elementor/editor-canvas';\nimport { getCurrentDocument } from '@elementor/editor-documents';\nimport { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\nimport { type ComponentInstancePropValue, type ExtendedWindow } from './types';\nimport { switchToComponent } from './utils/switch-to-component';\nimport { trackComponentEvent } from './utils/tracking';\n\ntype ContextMenuEventData = { location: string; secondaryLocation: string; trigger: string };\n\nexport type ContextMenuAction = {\n\tname: string;\n\ticon: string;\n\ttitle: string | ( () => string );\n\tisEnabled: () => boolean;\n\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => void;\n};\n\ntype ContextMenuGroupConfig = {\n\tdisable: Record< string, string[] >;\n\tadd: Record< string, { index: number; action: ContextMenuAction } >;\n};\n\ntype ContextMenuGroup = {\n\tname: string;\n\tactions: ContextMenuAction[];\n};\n\nexport const TYPE = 'e-component';\n\nconst updateGroups = ( groups: ContextMenuGroup[], config: ContextMenuGroupConfig ): ContextMenuGroup[] => {\n\tconst disableMap = new Map( Object.entries( config.disable ?? {} ) );\n\tconst addMap = new Map( Object.entries( config.add ?? {} ) );\n\n\treturn groups.map( ( group ) => {\n\t\tconst disabledActions = disableMap.get( group.name ) ?? [];\n\t\tconst addConfig = addMap.get( group.name );\n\n\t\t// Update disabled actions\n\t\tconst updatedActions = group.actions.map( ( action ) =>\n\t\t\tdisabledActions.includes( action.name ) ? { ...action, isEnabled: () => false } : action\n\t\t);\n\n\t\t// Insert additional action if needed\n\t\tif ( addConfig ) {\n\t\t\tupdatedActions.splice( addConfig.index, 0, addConfig.action );\n\t\t}\n\n\t\treturn { ...group, actions: updatedActions };\n\t} );\n};\n\nexport function createComponentType(\n\toptions: CreateTemplatedElementTypeOptions & { showLockedByModal?: ( lockedBy: string ) => void }\n): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn options.type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createComponentView( { ...options } );\n\t\t}\n\t};\n}\n\nfunction createComponentView(\n\toptions: CreateTemplatedElementTypeOptions & {\n\t\tshowLockedByModal?: ( lockedBy: string ) => void;\n\t}\n): typeof ElementView {\n\treturn class extends createTemplatedElementView( options ) {\n\t\tlegacyWindow = window as unknown as LegacyWindow & ExtendedWindow;\n\t\teventsManagerConfig = this.legacyWindow.elementorCommon.eventsManager.config;\n\n\t\tisComponentCurrentlyEdited() {\n\t\t\tconst currentDocument = getCurrentDocument();\n\n\t\t\treturn currentDocument?.id === this.getComponentId();\n\t\t}\n\n\t\tafterSettingsResolve( settings: { [ key: string ]: unknown } ) {\n\t\t\tconst componentInstance = settings.component_instance as\n\t\t\t\t| {\n\t\t\t\t\t\toverrides?: Record< string, unknown >;\n\t\t\t\t\t\telements?: unknown[];\n\t\t\t\t }\n\t\t\t\t| undefined;\n\n\t\t\tif ( componentInstance ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection(\n\t\t\t\t\tcomponentInstance.elements\n\t\t\t\t);\n\n\t\t\t\tthis.collection.models.forEach( setInactiveRecursively );\n\n\t\t\t\tsettings.component_instance = '<template data-children-placeholder></template>';\n\t\t\t}\n\n\t\t\treturn settings;\n\t\t}\n\n\t\tgetDomElement() {\n\t\t\t// Component does not have a DOM element, so we return the first child's DOM element.\n\t\t\treturn this.children.findByIndex( 0 )?.getDomElement() ?? this.$el;\n\t\t}\n\n\t\tattachBuffer( collectionView: this, buffer: DocumentFragment ): void {\n\t\t\tconst childrenPlaceholder = collectionView.$el.find( '[data-children-placeholder]' ).get( 0 );\n\n\t\t\tif ( ! childrenPlaceholder ) {\n\t\t\t\tsuper.attachBuffer( collectionView, buffer );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tchildrenPlaceholder.replaceWith( buffer );\n\t\t}\n\n\t\tgetComponentId() {\n\t\t\tconst componentInstance = (\n\t\t\t\tthis.options?.model?.get( 'settings' )?.get( 'component_instance' ) as ComponentInstancePropValue\n\t\t\t )?.value;\n\n\t\t\treturn componentInstance.component_id.value;\n\t\t}\n\n\t\tgetContextMenuGroups() {\n\t\t\tconst filteredGroups = super.getContextMenuGroups().filter( ( group ) => group.name !== 'save' );\n\t\t\tconst componentId = this.getComponentId();\n\t\t\tif ( ! componentId ) {\n\t\t\t\treturn filteredGroups;\n\t\t\t}\n\n\t\t\tconst newGroups = updateGroups(\n\t\t\t\tfilteredGroups as ContextMenuGroup[],\n\t\t\t\tthis._getContextMenuConfig() as unknown as ContextMenuGroupConfig\n\t\t\t);\n\t\t\treturn newGroups;\n\t\t}\n\n\t\t_getContextMenuConfig() {\n\t\t\tconst legacyWindow = this.legacyWindow || ( window as unknown as LegacyWindow & ExtendedWindow );\n\t\t\tconst elementorWithConfig = legacyWindow.elementor as typeof legacyWindow.elementor & {\n\t\t\t\tconfig?: { user?: { is_administrator?: boolean } };\n\t\t\t};\n\t\t\tconst isAdministrator = elementorWithConfig.config?.user?.is_administrator ?? false;\n\n\t\t\tconst addedGroup = {\n\t\t\t\tgeneral: {\n\t\t\t\t\tindex: 1,\n\t\t\t\t\taction: {\n\t\t\t\t\t\tname: 'edit component',\n\t\t\t\t\t\ticon: 'eicon-edit',\n\t\t\t\t\t\ttitle: () => __( 'Edit Component', 'elementor' ),\n\t\t\t\t\t\tisEnabled: () => true,\n\t\t\t\t\t\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => this.editComponent( eventData ),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst disabledGroup = {\n\t\t\t\tclipboard: [ 'pasteStyle', 'resetStyle' ],\n\t\t\t};\n\n\t\t\treturn { add: isAdministrator ? addedGroup : {}, disable: disabledGroup };\n\t\t}\n\n\t\tasync switchDocument() {\n\t\t\t//todo: handle unpublished\n\t\t\tconst { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(\n\t\t\t\tthis.getComponentId() as number\n\t\t\t);\n\n\t\t\tif ( ! isAllowedToSwitchDocument ) {\n\t\t\t\toptions.showLockedByModal?.( lockedBy || '' );\n\t\t\t} else {\n\t\t\t\tswitchToComponent( this.getComponentId(), this.model.get( 'id' ) );\n\t\t\t}\n\t\t}\n\n\t\teditComponent( { trigger, location, secondaryLocation }: ContextMenuEventData ) {\n\t\t\tif ( this.isComponentCurrentlyEdited() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.switchDocument();\n\n\t\t\tconst editorSettings = this.model.get( 'editor_settings' );\n\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'edited',\n\t\t\t\tcomponent_uid: editorSettings?.component_uid,\n\t\t\t\tcomponent_name: editorSettings?.title,\n\t\t\t\tlocation,\n\t\t\t\tsecondary_location: secondaryLocation,\n\t\t\t\ttrigger,\n\t\t\t} );\n\t\t}\n\n\t\thandleDblClick( e: MouseEvent ) {\n\t\t\te.stopPropagation();\n\n\t\t\tconst { triggers, locations, secondaryLocations } = this.eventsManagerConfig;\n\n\t\t\tthis.editComponent( {\n\t\t\t\ttrigger: triggers.doubleClick,\n\t\t\t\tlocation: locations.canvas,\n\t\t\t\tsecondaryLocation: secondaryLocations.canvasElement,\n\t\t\t} );\n\t\t}\n\n\t\tevents() {\n\t\t\treturn {\n\t\t\t\t...super.events(),\n\t\t\t\tdblclick: this.handleDblClick,\n\t\t\t};\n\t\t}\n\n\t\tattributes() {\n\t\t\treturn {\n\t\t\t\t...super.attributes(),\n\t\t\t\t'data-elementor-id': this.getComponentId(),\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction setInactiveRecursively( model: BackboneModel< ElementModel > ) {\n\tconst editSettings = model.get( 'editSettings' );\n\n\tif ( editSettings ) {\n\t\teditSettings.set( 'inactive', true );\n\t}\n\n\tconst elements = model.get( 'elements' );\n\n\tif ( elements ) {\n\t\telements.forEach( ( childModel ) => {\n\t\t\tsetInactiveRecursively( childModel );\n\t\t} );\n\t}\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport { getMixpanel } from '@elementor/mixpanel';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectCreatedThisSession } from '../store/store';\nimport { type ExtendedWindow } from '../types';\n\ntype ComponentEventData = Record< string, unknown > & {\n\taction: 'createClicked' | 'created' | 'createCancelled' | 'instanceAdded' | 'edited';\n};\n\nexport const trackComponentEvent = ( { action, ...data }: ComponentEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.components?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.components[ action ];\n\tdispatchEvent?.( name, data );\n};\n\nexport const onElementDrop = ( _args: unknown, element: V1Element ) => {\n\tif ( ! ( element.model.get( 'widgetType' ) === 'e-component' ) ) {\n\t\treturn;\n\t}\n\n\tconst editorSettings = element.model.get( 'editor_settings' );\n\tconst componentName = editorSettings?.title;\n\tconst componentUID = editorSettings?.component_uid;\n\tconst instanceId = element.id;\n\n\tconst createdThisSession = selectCreatedThisSession( getState() );\n\tconst isSameSessionReuse = componentUID && createdThisSession.includes( componentUID );\n\n\tconst eventsManagerConfig = ( window as unknown as ExtendedWindow ).elementorCommon.eventsManager.config;\n\tconst { locations, secondaryLocations } = eventsManagerConfig;\n\n\ttrackComponentEvent( {\n\t\taction: 'instanceAdded',\n\t\tinstance_id: instanceId,\n\t\tcomponent_uid: componentUID,\n\t\tcomponent_name: componentName,\n\t\tis_same_session_reuse: isSameSessionReuse,\n\t\tlocation: locations.widgetPanel,\n\t\tsecondary_location: secondaryLocations.componentsTab,\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nimport { TYPE } from '../create-component-type';\nimport { type ComponentInstancePropValue } from '../types';\nimport { getComponentDocumentData } from './component-document-data';\n\nexport const getComponentIds = async ( elements: V1ElementData[] ) => {\n\tconst components = elements.map( async ( { widgetType, elType, elements: childElements, settings } ) => {\n\t\tconst ids: number[] = [];\n\n\t\tconst isComponent = [ widgetType, elType ].includes( TYPE );\n\n\t\tif ( isComponent ) {\n\t\t\tconst componentId = ( settings?.component_instance as ComponentInstancePropValue< number > )?.value\n\t\t\t\t?.component_id.value;\n\n\t\t\tconst document = await getComponentDocumentData( componentId );\n\n\t\t\tchildElements = document?.elements;\n\n\t\t\tif ( Boolean( componentId ) ) {\n\t\t\t\tids.push( componentId );\n\t\t\t}\n\t\t}\n\n\t\tif ( !! childElements?.length ) {\n\t\t\tids.push( ...( await getComponentIds( childElements ) ) );\n\t\t}\n\n\t\treturn ids;\n\t} );\n\n\tconst result = ( await Promise.all( components ) ).flat();\n\n\treturn Array.from( new Set( result ) );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { selectIsOverridablePropsLoaded, slice } from '../store';\n\nexport function loadComponentsOverridableProps( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tcomponentIds.forEach( loadComponentOverrides );\n}\n\nasync function loadComponentOverrides( componentId: number ) {\n\tconst isOverridablePropsLoaded = selectIsOverridablePropsLoaded( getState(), componentId );\n\n\tif ( isOverridablePropsLoaded ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = await apiClient.getOverridableProps( componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps,\n\t\t} )\n\t);\n}\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { type ComponentId } from '../../types';\nimport { selectStyles, slice } from '../store';\n\nexport async function loadComponentsStyles( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tconst knownComponents = selectStyles( getState() );\n\tconst unknownComponentIds = componentIds.filter( ( id ) => ! knownComponents[ id ] );\n\n\tif ( ! unknownComponentIds.length ) {\n\t\treturn;\n\t}\n\n\taddComponentStyles( unknownComponentIds );\n}\n\nasync function addComponentStyles( ids: ComponentId[] ) {\n\tconst newComponents = await loadStyles( ids );\n\n\taddStyles( newComponents );\n}\n\nasync function loadStyles( ids: number[] ): Promise< [ number, V1ElementData ][] > {\n\treturn Promise.all( ids.map( async ( id ) => [ id, await apiClient.getComponentConfig( id ) ] ) );\n}\n\nfunction addStyles( data: ( readonly [ ComponentId, V1ElementData ] )[] ) {\n\tconst styles = Object.fromEntries(\n\t\tdata.map( ( [ componentId, componentData ] ) => [ componentId, extractStyles( componentData ) ] )\n\t);\n\n\tdispatch( slice.actions.addStyles( styles ) );\n}\n\nfunction extractStyles( element: V1ElementData ): Array< StyleDefinition > {\n\treturn [ ...Object.values( element.styles ?? {} ), ...( element.elements ?? [] ).flatMap( extractStyles ) ];\n}\n","import {\n\tgetContainer,\n\tgetCurrentDocumentContainer,\n\tgetSelectedElements,\n\ttype V1Element,\n} from '@elementor/editor-elements';\n\nexport const getContainerForNewElement = (): { container: V1Element | null; options?: { at: number } } => {\n\tconst currentDocumentContainer = getCurrentDocumentContainer();\n\tconst selectedElement = getSelectedElementContainer();\n\n\tlet container, options;\n\n\tif ( selectedElement ) {\n\t\tswitch ( selectedElement.model.get( 'elType' ) ) {\n\t\t\tcase 'widget': {\n\t\t\t\tcontainer = selectedElement?.parent;\n\n\t\t\t\tconst selectedElIndex = selectedElement.view?._index ?? -1;\n\n\t\t\t\tif ( selectedElIndex > -1 ) {\n\t\t\t\t\toptions = { at: selectedElIndex + 1 };\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'section': {\n\t\t\t\tcontainer = selectedElement?.children?.[ 0 ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tcontainer = selectedElement;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { container: container ?? currentDocumentContainer, options };\n};\n\nfunction getSelectedElementContainer() {\n\tconst selectedElements = getSelectedElements();\n\n\tif ( selectedElements.length !== 1 ) {\n\t\treturn undefined;\n\t}\n\n\treturn getContainer( selectedElements[ 0 ].id );\n}\n","import { replaceElement, type V1ElementData, type V1ElementModelProps } from '@elementor/editor-elements';\n\nimport { type OverridableProps } from '../../../types';\n\ntype ComponentInstanceParams = {\n\tid?: number;\n\tname: string;\n\tuid: string;\n\toverridableProps?: OverridableProps;\n};\n\nexport const replaceElementWithComponent = ( element: V1ElementData, component: ComponentInstanceParams ) => {\n\treplaceElement( {\n\t\tcurrentElement: element,\n\t\tnewElement: createComponentModel( component ),\n\t\twithHistory: false,\n\t} );\n};\n\nexport const createComponentModel = ( component: ComponentInstanceParams ): Omit< V1ElementModelProps, 'id' > => {\n\treturn {\n\t\telType: 'widget',\n\t\twidgetType: 'e-component',\n\t\tsettings: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: {\n\t\t\t\t\t\t$$type: 'number',\n\t\t\t\t\t\tvalue: component.id ?? component.uid,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\toverridable_props: component.overridableProps,\n\t\t},\n\t\teditor_settings: {\n\t\t\ttitle: component.name,\n\t\t\tcomponent_uid: component.uid,\n\t\t},\n\t};\n};\n","import * as React from 'react';\nimport { Box, ListItemButton, Skeleton, Stack } from '@elementor/ui';\nconst ROWS_COUNT = 6;\n\nconst rows = Array.from( { length: ROWS_COUNT }, ( _, index ) => index );\n\nexport const LoadingComponents = () => {\n\treturn (\n\t\t<Stack\n\t\t\taria-label=\"Loading components\"\n\t\t\tgap={ 1 }\n\t\t\tsx={ {\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tposition: 'relative',\n\t\t\t\tmaxHeight: '300px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t'&:after': {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tcontent: '\"\"',\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '300px',\n\t\t\t\t\tbackground: 'linear-gradient(to top, white, transparent)',\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ rows.map( ( row ) => (\n\t\t\t\t<ListItemButton\n\t\t\t\t\tkey={ row }\n\t\t\t\t\tsx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t>\n\t\t\t\t\t<Box display=\"flex\" gap={ 1 } width=\"100%\">\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '24px' } height={ '36px' } />\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '100%' } height={ '36px' } />\n\t\t\t\t\t</Box>\n\t\t\t\t</ListItemButton>\n\t\t\t) ) }\n\t\t</Stack>\n\t);\n};\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n","import * as React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getElementLabel, type V1ElementData } from '@elementor/editor-elements';\nimport { Form as FormElement, ThemeProvider } from '@elementor/editor-ui';\nimport { StarIcon } from '@elementor/icons';\nimport { Alert, Button, FormLabel, Grid, Popover, Snackbar, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { createUnpublishedComponent } from '../../store/actions/create-unpublished-component';\nimport { type ComponentFormValues } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { useForm } from './hooks/use-form';\nimport { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';\nimport {\n\ttype ComponentEventData,\n\ttype ContextMenuEventOptions,\n\tgetComponentEventData,\n} from './utils/get-component-event-data';\n\ntype SaveAsComponentEventData = {\n\telement: V1ElementData;\n\tanchorPosition: { top: number; left: number };\n\toptions?: ContextMenuEventOptions;\n};\n\ntype ResultNotification = {\n\tshow: boolean;\n\tmessage: string;\n\ttype: 'success' | 'error';\n};\n\nexport function CreateComponentForm() {\n\tconst [ element, setElement ] = useState< {\n\t\telement: V1ElementData;\n\t\telementLabel: string;\n\t} | null >( null );\n\n\tconst [ anchorPosition, setAnchorPosition ] = useState< { top: number; left: number } >();\n\n\tconst [ resultNotification, setResultNotification ] = useState< ResultNotification | null >( null );\n\n\tconst eventData = useRef< ComponentEventData | null >( null );\n\n\tuseEffect( () => {\n\t\tconst OPEN_SAVE_AS_COMPONENT_FORM_EVENT = 'elementor/editor/open-save-as-component-form';\n\n\t\tconst openPopup = ( event: CustomEvent< SaveAsComponentEventData > ) => {\n\t\t\tsetElement( { element: event.detail.element, elementLabel: getElementLabel( event.detail.element.id ) } );\n\t\t\tsetAnchorPosition( event.detail.anchorPosition );\n\n\t\t\teventData.current = getComponentEventData( event.detail.element, event.detail.options );\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'createClicked',\n\t\t\t\t...eventData.current,\n\t\t\t} );\n\t\t};\n\n\t\twindow.addEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\t\t};\n\t}, [] );\n\n\tconst handleSave = ( values: ComponentFormValues ) => {\n\t\ttry {\n\t\t\tif ( ! element ) {\n\t\t\t\tthrow new Error( `Can't save element as component: element not found` );\n\t\t\t}\n\n\t\t\tconst uid = createUnpublishedComponent( values.componentName, element.element, eventData.current );\n\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\t// Translators: %1$s: Component name, %2$s: Component UID\n\t\t\t\tmessage: __( 'Component saved successfully as: %1$s (UID: %2$s)', 'elementor' )\n\t\t\t\t\t.replace( '%1$s', values.componentName )\n\t\t\t\t\t.replace( '%2$s', uid ),\n\t\t\t\ttype: 'success',\n\t\t\t} );\n\n\t\t\tresetAndClosePopup();\n\t\t} catch {\n\t\t\tconst errorMessage = __( 'Failed to save component. Please try again.', 'elementor' );\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t\ttype: 'error',\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst resetAndClosePopup = () => {\n\t\tsetElement( null );\n\t\tsetAnchorPosition( undefined );\n\t};\n\n\tconst cancelSave = () => {\n\t\tresetAndClosePopup();\n\n\t\ttrackComponentEvent( {\n\t\t\taction: 'createCancelled',\n\t\t\t...eventData.current,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Popover\n\t\t\t\topen={ element !== null }\n\t\t\t\tonClose={ cancelSave }\n\t\t\t\tanchorReference=\"anchorPosition\"\n\t\t\t\tanchorPosition={ anchorPosition }\n\t\t\t>\n\t\t\t\t{ element !== null && (\n\t\t\t\t\t<Form\n\t\t\t\t\t\tinitialValues={ { componentName: element.elementLabel } }\n\t\t\t\t\t\thandleSave={ handleSave }\n\t\t\t\t\t\tclosePopup={ cancelSave }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</Popover>\n\t\t\t<Snackbar open={ resultNotification?.show } onClose={ () => setResultNotification( null ) }>\n\t\t\t\t<Alert\n\t\t\t\t\tonClose={ () => setResultNotification( null ) }\n\t\t\t\t\tseverity={ resultNotification?.type }\n\t\t\t\t\tsx={ { width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t{ resultNotification?.message }\n\t\t\t\t</Alert>\n\t\t\t</Snackbar>\n\t\t</ThemeProvider>\n\t);\n}\n\nconst FONT_SIZE = 'tiny';\n\nconst Form = ( {\n\tinitialValues,\n\thandleSave,\n\tclosePopup,\n}: {\n\tinitialValues: ComponentFormValues;\n\thandleSave: ( values: ComponentFormValues ) => void;\n\tclosePopup: () => void;\n} ) => {\n\tconst { values, errors, isValid, handleChange, validateForm } = useForm< ComponentFormValues >( initialValues );\n\n\tconst { components } = useComponents();\n\n\tconst existingComponentNames = useMemo( () => {\n\t\treturn components?.map( ( component ) => component.name ) ?? [];\n\t}, [ components ] );\n\n\tconst changeValidationSchema = useMemo(\n\t\t() => createBaseComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\tconst submitValidationSchema = useMemo(\n\t\t() => createSubmitComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\n\tconst handleSubmit = () => {\n\t\tconst { success, parsedValues } = validateForm( submitValidationSchema );\n\n\t\tif ( success ) {\n\t\t\thandleSave( parsedValues );\n\t\t}\n\t};\n\n\tconst texts = {\n\t\theading: __( 'Save as a component', 'elementor' ),\n\t\tname: __( 'Name', 'elementor' ),\n\t\tcancel: __( 'Cancel', 'elementor' ),\n\t\tcreate: __( 'Create', 'elementor' ),\n\t};\n\n\tconst nameInputId = 'component-name';\n\n\treturn (\n\t\t<FormElement onSubmit={ handleSubmit }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t<StarIcon fontSize={ FONT_SIZE } />\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ texts.heading }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" p={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel htmlFor={ nameInputId } size=\"tiny\">\n\t\t\t\t\t\t\t{ texts.name }\n\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tid={ nameInputId }\n\t\t\t\t\t\t\tsize={ FONT_SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ values.componentName }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\t\thandleChange( e, 'componentName', changeValidationSchema )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinputProps={ { style: { color: 'text.primary', fontWeight: '600' } } }\n\t\t\t\t\t\t\terror={ Boolean( errors.componentName ) }\n\t\t\t\t\t\t\thelperText={ errors.componentName }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button onClick={ closePopup } color=\"secondary\" variant=\"text\" size=\"small\">\n\t\t\t\t\t\t{ texts.cancel }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! isValid } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ texts.create }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</FormElement>\n\t);\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { type ComponentEventData } from '../../components/create-component-form/utils/get-component-event-data';\nimport { replaceElementWithComponent } from '../../components/create-component-form/utils/replace-element-with-component';\nimport { type OverridableProps } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { slice } from '../store';\n\nexport function createUnpublishedComponent(\n\tname: string,\n\telement: V1ElementData,\n\teventData: ComponentEventData | null,\n\toverridableProps?: OverridableProps,\n\tuid?: string | null\n) {\n\tconst generatedUid = uid ?? generateUniqueId( 'component' );\n\tconst componentBase = { uid: generatedUid, name, overridableProps };\n\n\tdispatch(\n\t\tslice.actions.addUnpublished( {\n\t\t\t...componentBase,\n\t\t\telements: [ element ],\n\t\t} )\n\t);\n\n\tdispatch( slice.actions.addCreatedThisSession( generatedUid ) );\n\n\treplaceElementWithComponent( element, componentBase );\n\n\ttrackComponentEvent( {\n\t\taction: 'created',\n\t\tcomponent_uid: generatedUid,\n\t\tcomponent_name: name,\n\t\t...eventData,\n\t} );\n\n\trunCommand( 'document/save/auto' );\n\n\treturn generatedUid;\n}\n","import { useMemo, useState } from 'react';\nimport { type z } from '@elementor/schema';\n\nexport const useForm = < TValues extends Record< string, unknown > >( initialValues: TValues ) => {\n\tconst [ values, setValues ] = useState< TValues >( initialValues );\n\tconst [ errors, setErrors ] = useState< Partial< Record< keyof TValues, string > > >( {} );\n\n\tconst isValid = useMemo( () => {\n\t\treturn ! Object.values( errors ).some( ( error ) => error );\n\t}, [ errors ] );\n\n\tconst handleChange = (\n\t\te: React.ChangeEvent< HTMLInputElement >,\n\t\tfield: keyof TValues,\n\t\tvalidationSchema: z.ZodType< TValues >\n\t) => {\n\t\tconst updated = { ...values, [ field ]: e.target.value };\n\t\tsetValues( updated );\n\n\t\tconst { success, errors: validationErrors } = validateForm( updated, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t} else {\n\t\t\tsetErrors( {} );\n\t\t}\n\t};\n\n\tconst validate = (\n\t\tvalidationSchema: z.ZodType< TValues >\n\t): { success: true; parsedValues: TValues } | { success: false; parsedValues?: never } => {\n\t\tconst { success, errors: validationErrors, parsedValues } = validateForm( values, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t\treturn { success };\n\t\t}\n\t\tsetErrors( {} );\n\t\treturn { success, parsedValues };\n\t};\n\n\treturn {\n\t\tvalues,\n\t\terrors,\n\t\tisValid,\n\t\thandleChange,\n\t\tvalidateForm: validate,\n\t};\n};\n\nconst validateForm = < TValues extends Record< string, unknown > >(\n\tvalues: TValues,\n\tschema: z.ZodType< TValues >\n):\n\t| { success: false; parsedValues?: never; errors: Partial< Record< keyof TValues, string > > }\n\t| { success: true; parsedValues: TValues; errors?: never } => {\n\tconst result = schema.safeParse( values );\n\n\tif ( result.success ) {\n\t\treturn { success: true, parsedValues: result.data };\n\t}\n\n\tconst errors = {} as Partial< Record< keyof TValues, string > >;\n\n\t( Object.entries( result.error.formErrors.fieldErrors ) as Array< [ keyof TValues, string[] ] > ).forEach(\n\t\t( [ field, error ] ) => {\n\t\t\terrors[ field ] = error[ 0 ];\n\t\t}\n\t);\n\n\treturn { success: false, errors };\n};\n","import { z } from '@elementor/schema';\nimport { __ } from '@wordpress/i18n';\n\nconst MIN_NAME_LENGTH = 2;\nconst MAX_NAME_LENGTH = 50;\n\nexport const createBaseComponentSchema = ( existingNames: string[] ) => {\n\treturn z.object( {\n\t\tcomponentName: z\n\t\t\t.string()\n\t\t\t.trim()\n\t\t\t.max(\n\t\t\t\tMAX_NAME_LENGTH,\n\t\t\t\t__( 'Component name is too long. Please keep it under 50 characters.', 'elementor' )\n\t\t\t)\n\t\t\t.refine( ( value ) => ! existingNames.includes( value ), {\n\t\t\t\tmessage: __( 'Component name already exists', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n\nexport const createSubmitComponentSchema = ( existingNames: string[] ) => {\n\tconst baseSchema = createBaseComponentSchema( existingNames );\n\n\treturn baseSchema.extend( {\n\t\tcomponentName: baseSchema.shape.componentName\n\t\t\t.refine( ( value ) => value.length > 0, {\n\t\t\t\tmessage: __( 'Component name is required.', 'elementor' ),\n\t\t\t} )\n\t\t\t.refine( ( value ) => value.length >= MIN_NAME_LENGTH, {\n\t\t\t\tmessage: __( 'Component name is too short. Please enter at least 2 characters.', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nexport type ComponentEventData = {\n\tnested_elements_count: number;\n\tnested_components_count: number;\n\ttop_element_type: string;\n\tlocation?: string;\n\tsecondary_location?: string;\n\ttrigger?: string;\n};\n\nexport type ContextMenuEventOptions = Record< string, unknown > & {\n\tlocation: string;\n\tsecondaryLocation: string;\n\ttrigger: string;\n};\n\nexport const getComponentEventData = (\n\tcontainerElement: V1ElementData,\n\toptions?: ContextMenuEventOptions\n): ComponentEventData => {\n\tconst { elementsCount, componentsCount } = countNestedElements( containerElement );\n\n\treturn {\n\t\tnested_elements_count: elementsCount,\n\t\tnested_components_count: componentsCount,\n\t\ttop_element_type: containerElement.elType,\n\t\tlocation: options?.location,\n\t\tsecondary_location: options?.secondaryLocation,\n\t\ttrigger: options?.trigger,\n\t};\n};\n\nfunction countNestedElements( container: V1ElementData ): { elementsCount: number; componentsCount: number } {\n\tif ( ! container.elements || container.elements.length === 0 ) {\n\t\treturn { elementsCount: 0, componentsCount: 0 };\n\t}\n\n\tlet elementsCount = container.elements.length;\n\tlet componentsCount = 0;\n\n\tfor ( const element of container.elements ) {\n\t\tif ( element.widgetType === 'e-component' ) {\n\t\t\tcomponentsCount++;\n\t\t}\n\n\t\tconst { elementsCount: nestedElementsCount, componentsCount: nestedComponentsCount } =\n\t\t\tcountNestedElements( element );\n\t\telementsCount += nestedElementsCount;\n\t\tcomponentsCount += nestedComponentsCount;\n\t}\n\n\treturn { elementsCount, componentsCount };\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { getV1DocumentsManager, type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { updateCurrentComponent } from '../../store/actions/update-current-component';\nimport { type ComponentsPathItem, selectCurrentComponentId, selectPath } from '../../store/store';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { ComponentModal } from './component-modal';\n\nexport function EditComponent() {\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\n\tuseHandleDocumentSwitches();\n\n\tconst onBack = useNavigateBack();\n\n\tconst elementDom = getComponentDOMElement( currentComponentId ?? undefined );\n\n\tif ( ! elementDom ) {\n\t\treturn null;\n\t}\n\n\treturn <ComponentModal element={ elementDom } onClose={ onBack } />;\n}\n\nfunction useHandleDocumentSwitches() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\tconst path = useSelector( selectPath );\n\n\tuseEffect( () => {\n\t\treturn listenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => {\n\t\t\tconst nextDocument = documentsManager.getCurrent();\n\n\t\t\tif ( nextDocument.id === currentComponentId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( currentComponentId ) {\n\t\t\t\tapiClient.unlockComponent( currentComponentId );\n\t\t\t}\n\n\t\t\tconst isComponent = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;\n\n\t\t\tif ( ! isComponent ) {\n\t\t\t\tupdateCurrentComponent( { path: [], currentComponentId: null } );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateCurrentComponent( {\n\t\t\t\tpath: getUpdatedComponentPath( path, nextDocument ),\n\t\t\t\tcurrentComponentId: nextDocument.id,\n\t\t\t} );\n\t\t} );\n\t}, [ path, documentsManager, currentComponentId ] );\n}\n\nfunction getUpdatedComponentPath( path: ComponentsPathItem[], nextDocument: V1Document ): ComponentsPathItem[] {\n\tconst componentIndex = path.findIndex( ( { componentId } ) => componentId === nextDocument.id );\n\n\tif ( componentIndex >= 0 ) {\n\t\t// When exiting the editing of a nested component - we in fact go back a step\n\t\t// so we need to make sure the path is cleaned up of any newer items\n\t\t// By doing it with the slice and not a simple pop() - we could jump to any component in the path and make sure it becomes the current one\n\t\treturn path.slice( 0, componentIndex + 1 );\n\t}\n\n\treturn [\n\t\t...path,\n\t\t{\n\t\t\tinstanceId: nextDocument?.container.view?.el?.dataset.id,\n\t\t\tcomponentId: nextDocument.id,\n\t\t},\n\t];\n}\n\nfunction getComponentDOMElement( id: V1Document[ 'id' ] | undefined ) {\n\tif ( ! id ) {\n\t\treturn null;\n\t}\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\tconst currentComponent = documentsManager.get( id );\n\n\tconst widget = currentComponent?.container as V1Element;\n\tconst container = ( widget?.view?.el?.children?.[ 0 ] ?? null ) as HTMLElement | null;\n\tconst elementDom = container?.children[ 0 ] as HTMLElement | null;\n\n\treturn elementDom ?? null;\n}\n","import { setDocumentModifiedStatus, type V1Document } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { type ComponentsPathItem, slice } from '../store';\n\nexport function updateCurrentComponent( {\n\tpath,\n\tcurrentComponentId,\n}: {\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n} ) {\n\tconst dispatch = getStore()?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.setPath( path ) );\n\tdispatch( slice.actions.setCurrentComponentId( currentComponentId ) );\n}\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import * as React from 'react';\nimport { type CSSProperties, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCanvasDocument } from '../../hooks/use-canvas-document';\nimport { useElementRect } from '../../hooks/use-element-rect';\n\ntype ModalProps = {\n\telement: HTMLElement;\n\tonClose: () => void;\n};\nexport function ComponentModal( { element, onClose }: ModalProps ) {\n\tconst canvasDocument = useCanvasDocument();\n\n\tuseEffect( () => {\n\t\tconst handleEsc = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tcanvasDocument?.body.addEventListener( 'keydown', handleEsc );\n\n\t\treturn () => {\n\t\t\tcanvasDocument?.body.removeEventListener( 'keydown', handleEsc );\n\t\t};\n\t}, [ canvasDocument, onClose ] );\n\n\tif ( ! canvasDocument?.body ) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<>\n\t\t\t<BlockEditPage />\n\t\t\t<Backdrop canvas={ canvasDocument } element={ element } onClose={ onClose } />\n\t\t</>,\n\t\tcanvasDocument.body\n\t);\n}\n\nfunction Backdrop( { canvas, element, onClose }: { canvas: HTMLDocument; element: HTMLElement; onClose: () => void } ) {\n\tconst rect = useElementRect( element );\n\tconst backdropStyle: CSSProperties = {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\twidth: '100vw',\n\t\theight: '100vh',\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\t\tzIndex: 999,\n\t\tpointerEvents: 'painted',\n\t\tcursor: 'pointer',\n\t\tclipPath: getRoundedRectPath( rect, canvas.defaultView as Window, 5 ),\n\t};\n\n\tconst handleKeyDown = ( event: React.KeyboardEvent ) => {\n\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\tevent.preventDefault();\n\t\t\tonClose();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tstyle={ backdropStyle }\n\t\t\tonClick={ onClose }\n\t\t\tonKeyDown={ handleKeyDown }\n\t\t\trole=\"button\"\n\t\t\ttabIndex={ 0 }\n\t\t\taria-label={ __( 'Exit component editing mode', 'elementor' ) }\n\t\t/>\n\t);\n}\n\nfunction getRoundedRectPath( rect: DOMRect, viewport: Window, borderRadius: number ) {\n\tconst padding = borderRadius / 2;\n\tconst { x: originalX, y: originalY, width: originalWidth, height: originalHeight } = rect;\n\tconst x = originalX - padding;\n\tconst y = originalY - padding;\n\tconst width = originalWidth + 2 * padding;\n\tconst height = originalHeight + 2 * padding;\n\tconst radius = Math.min( borderRadius, width / 2, height / 2 );\n\n\tconst { innerWidth: vw, innerHeight: vh } = viewport;\n\n\tconst path = `path(evenodd, 'M 0 0 \n\t\tL ${ vw } 0\n\t\tL ${ vw } ${ vh }\n\t\tL 0 ${ vh }\n\t\tZ\n\t\tM ${ x + radius } ${ y }\n\t\tL ${ x + width - radius } ${ y }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width } ${ y + radius }\n\t\tL ${ x + width } ${ y + height - radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width - radius } ${ y + height }\n\t\tL ${ x + radius } ${ y + height }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x } ${ y + height - radius }\n\t\tL ${ x } ${ y + radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + radius } ${ y }\n \tZ'\n\t)`;\n\n\treturn path.replace( /\\s{2,}/g, ' ' );\n}\n\n/**\n * when switching to another document id, we get a document handler when hovering\n * this functionality originates in Pro, and is intended for editing templates, e.g. header/footer\n * in components we don't want that, so the easy way out is to prevent it of being displayed via a CSS rule\n */\nfunction BlockEditPage() {\n\tconst blockV3DocumentHandlesStyles = `\n\t.elementor-editor-active {\n\t\t& .elementor-section-wrap.ui-sortable {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\t& *[data-editable-elementor-document]:not(.elementor-edit-mode):hover {\n\t\t\t& .elementor-document-handle:not(.elementor-document-save-back-handle) {\n\t\t\t\tdisplay: none;\n\n\t\t\t\t&::before,\n\t\t\t\t& .elementor-document-handle__inner {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t`;\n\n\treturn <style data-e-style-id=\"e-block-v3-document-handles-styles\">{ blockV3DocumentHandlesStyles }</style>;\n}\n","import { getCanvasIframeDocument } from '@elementor/editor-canvas';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\n\nexport function useCanvasDocument() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument() );\n}\n","import { useEffect, useState } from 'react';\nimport { throttle } from '@elementor/utils';\n\nexport function useElementRect( element: HTMLElement | null ) {\n\tconst [ rect, setRect ] = useState< DOMRect >( new DOMRect( 0, 0, 0, 0 ) );\n\n\tconst onChange = throttle(\n\t\t() => {\n\t\t\tsetRect( element?.getBoundingClientRect() ?? new DOMRect( 0, 0, 0, 0 ) );\n\t\t},\n\t\t20,\n\t\ttrue\n\t);\n\n\tuseScrollListener( { element, onChange } );\n\tuseResizeListener( { element, onChange } );\n\tuseMutationsListener( { element, onChange } );\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tonChange.cancel();\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\treturn rect;\n}\n\ntype ListenerProps = {\n\telement: HTMLElement | null;\n\tonChange: () => void;\n};\n\nfunction useScrollListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'scroll', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\twin?.removeEventListener( 'scroll', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useResizeListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeObserver = new ResizeObserver( onChange );\n\t\tresizeObserver.observe( element );\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'resize', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\twin?.removeEventListener( 'resize', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useMutationsListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mutationObserver = new MutationObserver( onChange );\n\t\tmutationObserver.observe( element, { childList: true, subtree: true } );\n\n\t\treturn () => {\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, [ element, onChange ] );\n}\n","import * as React from 'react';\nimport { closeDialog, openDialog } from '@elementor/editor-ui';\nimport { InfoCircleFilledIcon } from '@elementor/icons';\nimport { Box, Button, DialogActions, DialogContent, DialogHeader, Icon, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const openEditModeDialog = ( lockedBy: string ) => {\n\topenDialog( {\n\t\tcomponent: <EditModeDialog lockedBy={ lockedBy } />,\n\t} );\n};\n\nconst EditModeDialog = ( { lockedBy }: { lockedBy: string } ) => {\n\t/* translators: %s is the name of the user who is currently editing the document */\n\tconst content = __( '%s is currently editing this document', 'elementor' ).replace( '%s', lockedBy );\n\treturn (\n\t\t<>\n\t\t\t<DialogHeader logo={ false }>\n\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t\t<Icon color=\"secondary\">\n\t\t\t\t\t\t<InfoCircleFilledIcon fontSize=\"medium\" />\n\t\t\t\t\t</Icon>\n\t\t\t\t\t<Typography variant=\"subtitle1\">{ content }</Typography>\n\t\t\t\t</Box>\n\t\t\t</DialogHeader>\n\t\t\t<DialogContent>\n\t\t\t\t<Stack spacing={ 2 } direction=\"column\">\n\t\t\t\t\t<Typography variant=\"body2\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'You can wait for them to finish or reach out to coordinate your changes together.',\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<DialogActions>\n\t\t\t\t\t\t<Button color=\"secondary\" variant=\"contained\" onClick={ closeDialog }>\n\t\t\t\t\t\t\t{ __( 'Close', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</DialogActions>\n\t\t\t\t</Stack>\n\t\t\t</DialogContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { useElementSetting, useSelectedElement } from '@elementor/editor-elements';\nimport { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { type NumberPropValue } from '@elementor/editor-props';\nimport { ComponentsIcon, PencilIcon } from '@elementor/icons';\nimport { __getState as getState } from '@elementor/store';\nimport { IconButton, Stack, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstancePropTypeUtil } from '../../prop-types/component-instance-prop-type';\nimport { selectComponent, selectOverridableProps } from '../../store/store';\nimport { type OverridablePropsGroup } from '../../types';\nimport { switchToComponent } from '../../utils/switch-to-component';\nimport { EmptyState } from './empty-state';\nimport { OverridePropsGroup } from './override-props-group';\n\nexport function InstanceEditingPanel() {\n\tconst { element } = useElement();\n\tconst settings = useElementSetting( element.id, 'component_instance' );\n\tconst componentId = ( componentInstancePropTypeUtil.extract( settings )?.component_id as NumberPropValue ).value;\n\n\tconst component = componentId ? selectComponent( getState(), componentId ) : null;\n\tconst overridableProps = componentId ? selectOverridableProps( getState(), componentId ) : null;\n\n\tconst componentInstanceId = useSelectedElement()?.element?.id ?? null;\n\n\tif ( ! componentId || ! overridableProps || ! component ) {\n\t\treturn null;\n\t}\n\n\t/* translators: %s: component name. */\n\tconst panelTitle = __( 'Edit %s', 'elementor' ).replace( '%s', component.name );\n\n\tconst handleEditComponent = () => switchToComponent( componentId, componentInstanceId );\n\n\tconst groups = overridableProps.groups.order\n\t\t.map( ( groupId ) =>\n\t\t\toverridableProps.groups.items[ groupId ] ? overridableProps.groups.items[ groupId ] : null\n\t\t)\n\t\t.filter( Boolean ) as OverridablePropsGroup[];\n\n\tconst isEmpty = groups.length === 0 || Object.keys( overridableProps.props ).length === 0;\n\n\treturn (\n\t\t<>\n\t\t\t<PanelHeader sx={ { justifyContent: 'start', px: 2 } }>\n\t\t\t\t<Stack direction=\"row\" alignContent=\"space-between\" flexGrow={ 1 }>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"start\" gap={ 1 } flexGrow={ 1 }>\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"small\" sx={ { color: 'text.tertiary' } } />\n\t\t\t\t\t\t<PanelHeaderTitle>{ component.name }</PanelHeaderTitle>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Tooltip title={ panelTitle }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ handleEditComponent } aria-label={ panelTitle }>\n\t\t\t\t\t\t\t<PencilIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</Stack>\n\t\t\t</PanelHeader>\n\t\t\t<PanelBody>\n\t\t\t\t{ isEmpty ? (\n\t\t\t\t\t<EmptyState onEditComponent={ handleEditComponent } />\n\t\t\t\t) : (\n\t\t\t\t\t<Stack direction=\"column\" alignItems=\"stretch\">\n\t\t\t\t\t\t{ groups.map( ( group ) => (\n\t\t\t\t\t\t\t<OverridePropsGroup key={ group.id } group={ group } props={ overridableProps.props } />\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</Stack>\n\t\t\t\t) }\n\t\t\t</PanelBody>\n\t\t</>\n\t);\n}\n","import { createPropUtils, numberPropTypeUtil } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridesPropTypeUtil } from './component-instance-overrides-prop-type';\n\nexport const componentInstancePropTypeUtil = createPropUtils(\n\t'component-instance',\n\tz.object( {\n\t\tcomponent_id: numberPropTypeUtil.schema,\n\t\toverrides: z.optional( componentInstanceOverridesPropTypeUtil.schema ),\n\t} )\n);\n\nexport type ComponentInstancePropValue = z.infer< typeof componentInstancePropTypeUtil.schema >[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridePropTypeUtil } from './component-instance-override-prop-type';\n\nexport const componentInstanceOverridesPropTypeUtil = createPropUtils(\n\t'overrides',\n\tz.array( componentInstanceOverridePropTypeUtil.schema ).optional().default( [] )\n);\n\nexport type ComponentInstanceOverridesPropValue = z.infer<\n\ttypeof componentInstanceOverridesPropTypeUtil.schema\n>[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentInstanceOverridePropTypeUtil = createPropUtils(\n\t'override',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\toverride_value: z.unknown(),\n\t\tschema_source: z.object( {\n\t\t\ttype: z.literal( 'component' ),\n\t\t\tid: z.number(),\n\t\t} ),\n\t} )\n);\n\nexport type ComponentInstanceOverridePropValue = z.infer<\n\ttypeof componentInstanceOverridePropTypeUtil.schema\n>[ 'value' ];\n","import * as React from 'react';\nimport { ComponentPropListIcon, PencilIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onEditComponent }: { onEditComponent: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"start\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5, mt: 1 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<ComponentPropListIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'No properties yet', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Edit the component to add properties, manage them or update the design across all instances.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onEditComponent }>\n\t\t\t\t<PencilIcon fontSize=\"small\" />\n\t\t\t\t{ __( 'Edit component', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useId } from 'react';\nimport { useStateByElement } from '@elementor/editor-editing-panel';\nimport { CollapseIcon } from '@elementor/editor-ui';\nimport { Collapse, ListItemButton, ListItemText, Stack } from '@elementor/ui';\n\nimport { type OverridableProp, type OverridablePropsGroup } from '../../types';\n\ntype Props = {\n\tgroup: OverridablePropsGroup;\n\tprops: Record< string, OverridableProp >;\n};\n\nexport function OverridePropsGroup( { group, props }: Props ) {\n\tconst [ isOpen, setIsOpen ] = useStateByElement( group.id, true );\n\n\tconst handleClick = () => {\n\t\tsetIsOpen( ! isOpen );\n\t};\n\n\tconst id = useId();\n\tconst labelId = `label-${ id }`;\n\tconst contentId = `content-${ id }`;\n\n\tconst title = group.label;\n\n\treturn (\n\t\t<>\n\t\t\t<ListItemButton\n\t\t\t\tid={ labelId }\n\t\t\t\taria-controls={ contentId }\n\t\t\t\taria-label={ `${ title } section` }\n\t\t\t\tonClick={ handleClick }\n\t\t\t\tp={ 0 }\n\t\t\t\tsx={ { '&:hover': { backgroundColor: 'transparent' } } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyItems=\"start\" flexGrow={ 1 } gap={ 0.5 }>\n\t\t\t\t\t<ListItemText\n\t\t\t\t\t\tsecondary={ title }\n\t\t\t\t\t\tsecondaryTypographyProps={ { color: 'text.primary', variant: 'caption', fontWeight: 'bold' } }\n\t\t\t\t\t\tsx={ { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 } }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t<CollapseIcon open={ isOpen } color=\"secondary\" fontSize=\"tiny\" />\n\t\t\t</ListItemButton>\n\t\t\t<Collapse id={ contentId } aria-labelledby={ labelId } in={ isOpen } timeout=\"auto\">\n\t\t\t\t<Stack direction=\"column\" gap={ 1 } p={ 2 }>\n\t\t\t\t\t{ group.props.map( ( propId ) => (\n\t\t\t\t\t\t// TODO: Render actual controls\n\t\t\t\t\t\t<pre key={ propId }>{ JSON.stringify( props[ propId ], null, 2 ) }</pre>\n\t\t\t\t\t) ) }\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { type ComponentType } from 'react';\nimport { ControlReplacementsProvider, PropKeyProvider, PropProvider, useBoundProp } from '@elementor/editor-controls';\nimport { createTopLevelObjectType, useElement } from '@elementor/editor-editing-panel';\nimport { type PropValue } from '@elementor/editor-props';\nimport { __getState as getState } from '@elementor/store';\n\nimport {\n\tcomponentOverridablePropTypeUtil,\n\ttype ComponentOverridablePropValue,\n} from '../../prop-types/component-overridable-prop-type';\nimport { OverridablePropProvider } from '../../provider/overridable-prop-context';\nimport { updateOverridablePropOriginValue } from '../../store/actions/update-overridable-prop-origin-value';\nimport { selectCurrentComponentId } from '../../store/store';\n\nexport function OverridablePropControl< T extends object >( {\n\tOriginalControl,\n\t...props\n}: T & { OriginalControl: ComponentType< T > } ) {\n\tconst { elementType } = useElement();\n\n\tconst { value, bind, setValue, placeholder, ...propContext } = useBoundProp( componentOverridablePropTypeUtil );\n\tconst componentId = selectCurrentComponentId( getState() );\n\n\tif ( ! componentId ) {\n\t\tthrow new Error( 'Component ID is required' );\n\t}\n\n\tif ( ! value?.override_key ) {\n\t\tthrow new Error( 'Override key is required' );\n\t}\n\n\tconst setOverridableValue = ( newValue: Record< typeof bind, PropValue | null > ) => {\n\t\tconst propValue = {\n\t\t\t...value,\n\t\t\torigin_value: newValue[ bind ],\n\t\t} as ComponentOverridablePropValue;\n\n\t\tsetValue( propValue );\n\t\tupdateOverridablePropOriginValue( componentId, propValue );\n\t};\n\n\tconst propType = createTopLevelObjectType( {\n\t\tschema: {\n\t\t\t[ bind ]: elementType.propsSchema[ bind ],\n\t\t},\n\t} );\n\n\tconst objectPlaceholder: Record< string, PropValue > | undefined = placeholder\n\t\t? { [ bind ]: placeholder }\n\t\t: undefined;\n\n\treturn (\n\t\t<OverridablePropProvider value={ value }>\n\t\t\t<PropProvider\n\t\t\t\t{ ...propContext }\n\t\t\t\tpropType={ propType }\n\t\t\t\tsetValue={ setOverridableValue }\n\t\t\t\tvalue={ { [ bind ]: value.origin_value } }\n\t\t\t\tplaceholder={ objectPlaceholder }\n\t\t\t>\n\t\t\t\t<PropKeyProvider bind={ bind }>\n\t\t\t\t\t<ControlReplacementsProvider replacements={ [] }>\n\t\t\t\t\t\t<OriginalControl { ...( props as T ) } />\n\t\t\t\t\t</ControlReplacementsProvider>\n\t\t\t\t</PropKeyProvider>\n\t\t\t</PropProvider>\n\t\t</OverridablePropProvider>\n\t);\n}\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentOverridablePropTypeUtil = createPropUtils(\n\t'overridable',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\torigin_value: z\n\t\t\t.object( {\n\t\t\t\t$$type: z.string(),\n\t\t\t\tvalue: z.unknown(),\n\t\t\t} )\n\t\t\t.nullable(),\n\t} )\n);\n\nexport type ComponentOverridablePropValue = z.infer< typeof componentOverridablePropTypeUtil.schema >[ 'value' ];\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { type ComponentOverridablePropValue } from '../prop-types/component-overridable-prop-type';\n\ntype OverridablePropData = {\n\tvalue: ComponentOverridablePropValue;\n};\n\nconst OverridablePropContext = createContext< OverridablePropData | null >( null );\n\nexport function OverridablePropProvider( { children, ...props }: PropsWithChildren< OverridablePropData > ) {\n\treturn <OverridablePropContext.Provider value={ props }>{ children }</OverridablePropContext.Provider>;\n}\n\nexport const useOverridablePropValue = () => useContext( OverridablePropContext )?.value;\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentOverridablePropValue } from '../../prop-types/component-overridable-prop-type';\nimport { type OverridableProps } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\nexport function updateOverridablePropOriginValue( componentId: number, propValue: ComponentOverridablePropValue ) {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overridableProps.props[ propValue.override_key ];\n\n\tif ( ! existingOverridableProp ) {\n\t\treturn;\n\t}\n\n\tconst newOverridableProps = {\n\t\t...overridableProps,\n\t\tprops: {\n\t\t\t...overridableProps.props,\n\t\t\t[ existingOverridableProp.overrideKey ]: {\n\t\t\t\t...existingOverridableProp,\n\t\t\t\toriginValue: propValue.origin_value,\n\t\t\t},\n\t\t},\n\t} satisfies OverridableProps;\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: newOverridableProps,\n\t\t} )\n\t);\n}\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { getWidgetsCache } from '@elementor/editor-elements';\nimport { type TransformablePropValue } from '@elementor/editor-props';\nimport { __getState as getState } from '@elementor/store';\nimport { bindPopover, bindTrigger, Popover, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentOverridablePropTypeUtil } from '../../prop-types/component-overridable-prop-type';\nimport { useOverridablePropValue } from '../../provider/overridable-prop-context';\nimport { setOverridableProp } from '../../store/actions/set-overridable-prop';\nimport { selectCurrentComponentId, selectOverridableProps } from '../../store/store';\nimport { type OverridableProps } from '../../types';\nimport { Indicator } from './indicator';\nimport { OverridablePropForm } from './overridable-prop-form';\nimport { getOverridableProp } from './utils/get-overridable-prop';\n\nconst FORBIDDEN_KEYS = [ '_cssid', 'attributes' ];\n\nexport function OverridablePropIndicator() {\n\tconst { bind } = useBoundProp();\n\tconst componentId = selectCurrentComponentId( getState() );\n\n\tif ( ! isPropAllowed( bind ) || ! componentId ) {\n\t\treturn null;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\treturn <Content componentId={ componentId } overridableProps={ overridableProps } />;\n}\n\ntype Props = {\n\tcomponentId: number;\n\toverridableProps?: OverridableProps;\n};\nexport function Content( { componentId, overridableProps }: Props ) {\n\tconst {\n\t\telement: { id: elementId },\n\t\telementType,\n\t} = useElement();\n\tconst { value, bind, propType } = useBoundProp();\n\n\tconst contextOverridableValue = useOverridablePropValue();\n\tconst { value: boundPropOverridableValue, setValue: setOverridableValue } = useBoundProp(\n\t\tcomponentOverridablePropTypeUtil\n\t);\n\n\t/**\n\t * This is intended to handle custom layout controls, such as <LinkControl />, which has <ControlLabel /> nested within it\n\t * i.e. its bound prop value would be the one manipulated by the new <PropProvider /> thus won't be considered overridable\n\t */\n\tconst overridableValue = boundPropOverridableValue ?? contextOverridableValue;\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\tconst triggerProps = bindTrigger( popupState );\n\tconst popoverProps = bindPopover( popupState );\n\n\tconst { elType } = getWidgetsCache()?.[ elementType.key ] ?? { elType: 'widget' };\n\n\tconst handleSubmit = ( { label, group }: { label: string; group: string | null } ) => {\n\t\tconst originValue = ! overridableValue ? value ?? propType.default : overridableValue?.origin_value ?? {};\n\n\t\tconst overridablePropConfig = setOverridableProp( {\n\t\t\tcomponentId,\n\t\t\toverrideKey: overridableValue?.override_key ?? null,\n\t\t\telementId,\n\t\t\tlabel,\n\t\t\tgroupId: group,\n\t\t\tpropKey: bind,\n\t\t\telType: elType ?? 'widget',\n\t\t\twidgetType: elementType.key,\n\t\t\toriginValue,\n\t\t} );\n\n\t\tif ( ! overridableValue && overridablePropConfig ) {\n\t\t\tsetOverridableValue( {\n\t\t\t\toverride_key: overridablePropConfig.overrideKey,\n\t\t\t\torigin_value: originValue as TransformablePropValue< string, unknown >,\n\t\t\t} );\n\t\t}\n\n\t\tpopupState.close();\n\t};\n\n\tconst overridableConfig = overridableValue\n\t\t? getOverridableProp( { componentId, overrideKey: overridableValue.override_key } )\n\t\t: undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip placement=\"top\" title={ __( 'Override Property', 'elementor' ) }>\n\t\t\t\t<Indicator { ...triggerProps } isOpen={ !! popoverProps.open } isOverridable={ !! overridableValue } />\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\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\tPaperProps={ {\n\t\t\t\t\tsx: { my: 2.5 },\n\t\t\t\t} }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<OverridablePropForm\n\t\t\t\t\tonSubmit={ handleSubmit }\n\t\t\t\t\tgroups={ overridableProps?.groups.order.map( ( groupId ) => ( {\n\t\t\t\t\t\tvalue: groupId,\n\t\t\t\t\t\tlabel: overridableProps.groups.items[ groupId ].label,\n\t\t\t\t\t} ) ) }\n\t\t\t\t\tcurrentValue={ overridableConfig }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nfunction isPropAllowed( bind: string ) {\n\treturn ! FORBIDDEN_KEYS.includes( bind );\n}\n","import { type PropValue } from '@elementor/editor-props';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp, type OverridableProps, type OverridablePropsGroup } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype Props = {\n\tcomponentId: number;\n\toverrideKey: string | null;\n\telementId: string;\n\tlabel: string;\n\tgroupId: string | null;\n\tpropKey: string;\n\telType: string;\n\twidgetType: string;\n\toriginValue: PropValue;\n};\nexport function setOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n\telementId,\n\tlabel,\n\tgroupId,\n\tpropKey,\n\telType,\n\twidgetType,\n\toriginValue,\n}: Props ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overrideKey ? overridableProps.props[ overrideKey ] : null;\n\tconst duplicatedTargetProps = Object.values( overridableProps.props ).filter(\n\t\t( prop ) => prop.elementId === elementId && prop.propKey === propKey && prop !== existingOverridableProp\n\t);\n\n\tconst { props: prevProps, groups: prevGroups } = { ...overridableProps };\n\n\tconst { groups: updatedGroups, currentGroupId } = getUpdatedGroups(\n\t\tprevGroups,\n\t\tgroupId || existingOverridableProp?.groupId\n\t);\n\n\tconst overridableProp = {\n\t\toverrideKey: existingOverridableProp?.overrideKey || generateUniqueId( 'prop' ),\n\t\tlabel,\n\t\telementId,\n\t\tpropKey,\n\t\twidgetType,\n\t\telType,\n\t\toriginValue,\n\t\tgroupId: currentGroupId,\n\t};\n\n\tconst { props: propsWithoutDuplicates, groups: groupsWithoutDuplicates } = removeProps( {\n\t\tprops: prevProps,\n\t\tgroups: updatedGroups,\n\t\tpropsToRemove: duplicatedTargetProps,\n\t} );\n\n\tconst props = {\n\t\t...propsWithoutDuplicates,\n\t\t[ overridableProp.overrideKey ]: overridableProp,\n\t};\n\n\tconst groups = {\n\t\titems: {\n\t\t\t...groupsWithoutDuplicates.items,\n\t\t\t[ currentGroupId ]: getGroupWithProp( groupsWithoutDuplicates, currentGroupId, overridableProp ),\n\t\t},\n\t\torder: groupsWithoutDuplicates.order.includes( currentGroupId )\n\t\t\t? groupsWithoutDuplicates.order\n\t\t\t: [ ...groupsWithoutDuplicates.order, currentGroupId ],\n\t};\n\n\tconst isChangingGroups = existingOverridableProp && existingOverridableProp.groupId !== currentGroupId;\n\n\tif ( isChangingGroups ) {\n\t\tgroups.items[ existingOverridableProp.groupId ] = getGroupWithoutProp(\n\t\t\tgroupsWithoutDuplicates,\n\t\t\texistingOverridableProp.groupId,\n\t\t\toverridableProp\n\t\t);\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\tprops,\n\t\t\t\tgroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn overridableProp;\n}\n\ntype UpdatedGroups = { groups: OverridableProps[ 'groups' ]; currentGroupId: string };\n\nfunction getUpdatedGroups( groups: OverridableProps[ 'groups' ], groupId: string | undefined ): UpdatedGroups {\n\tif ( ! groupId ) {\n\t\t// use first existing group\n\t\tif ( groups.order.length > 0 ) {\n\t\t\treturn { groups, currentGroupId: groups.order[ 0 ] };\n\t\t}\n\n\t\t// create the first group (default)\n\t\treturn addNewGroup( groups );\n\t}\n\n\tif ( ! groups.items[ groupId ] ) {\n\t\t// fallback - if for any reason there's no such group - create it\n\t\treturn addNewGroup( groups, groupId );\n\t}\n\n\t// use the existing group\n\treturn { groups, currentGroupId: groupId };\n}\n\nfunction addNewGroup( groups: OverridableProps[ 'groups' ], groupId?: string | undefined ): UpdatedGroups {\n\tconst currentGroupId = groupId || generateUniqueId( 'group' );\n\tconst updatedGroups = {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ currentGroupId ]: {\n\t\t\t\tid: currentGroupId,\n\t\t\t\tlabel: __( 'Default', 'elementor' ),\n\t\t\t\tprops: [],\n\t\t\t},\n\t\t},\n\t\torder: [ ...groups.order, currentGroupId ],\n\t};\n\n\treturn { groups: updatedGroups, currentGroupId };\n}\n\nfunction getGroupWithProp(\n\tgroups: OverridableProps[ 'groups' ],\n\tgroupId: string,\n\toverridableProp: OverridableProp\n): OverridablePropsGroup {\n\tconst group: OverridablePropsGroup = { ...groups.items[ groupId ] };\n\n\tif ( ! group.props.includes( overridableProp.overrideKey ) ) {\n\t\tgroup.props = [ ...group.props, overridableProp.overrideKey ];\n\t}\n\n\treturn group;\n}\n\nfunction getGroupWithoutProp(\n\tgroups: OverridableProps[ 'groups' ],\n\tgroupId: string,\n\toverridableProp: OverridableProp\n): OverridablePropsGroup {\n\tconst group = { ...groups.items[ groupId ] };\n\n\tif ( group ) {\n\t\tgroup.props = group.props.filter( ( key ) => key !== overridableProp.overrideKey );\n\t}\n\n\treturn group;\n}\n\nfunction removeProps( {\n\tprops,\n\tgroups,\n\tpropsToRemove,\n}: OverridableProps & { propsToRemove: OverridableProp[] } ): OverridableProps {\n\tconst allProps = Object.fromEntries(\n\t\tObject.entries( props ).filter( ( [ , prop ] ) => ! propsToRemove.includes( prop ) )\n\t);\n\n\tconst overrideKeysToRemove = propsToRemove.map( ( prop ) => prop.overrideKey );\n\n\tconst allGroupItems = Object.fromEntries(\n\t\tObject.entries( groups.items ).map( ( [ groupId, group ]: [ string, OverridablePropsGroup ] ) => [\n\t\t\tgroupId,\n\t\t\t{\n\t\t\t\t...group,\n\t\t\t\tprops: group.props.filter( ( prop ) => ! overrideKeysToRemove.includes( prop ) ),\n\t\t\t},\n\t\t] )\n\t);\n\n\treturn {\n\t\tprops: allProps,\n\t\tgroups: {\n\t\t\titems: allGroupItems,\n\t\t\torder: groups.order.filter( ( groupId ) => ! overrideKeysToRemove.includes( groupId ) ),\n\t\t},\n\t};\n}\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { CheckIcon, PlusIcon } from '@elementor/icons';\nimport { Box, styled } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\nconst IconContainer = styled( Box )`\n\tpointer-events: none;\n\topacity: 0;\n\ttransition: opacity 0.2s ease-in-out;\n\n\t& > svg {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate( -50%, -50% );\n\t\twidth: 10px;\n\t\theight: 10px;\n\t\tfill: ${ ( { theme } ) => theme.palette.primary.contrastText };\n\t\tstroke: ${ ( { theme } ) => theme.palette.primary.contrastText };\n\t\tstroke-width: 2px;\n\t}\n`;\n\nconst Content = styled( Box )`\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\twidth: 16px;\n\theight: 16px;\n\tmargin-inline: ${ ( { theme } ) => theme.spacing( 0.5 ) };\n\n\t&:before {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate( -50%, -50% ) rotate( 45deg );\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 1px;\n\t\tbackground-color: ${ ( { theme } ) => theme.palette.primary.main };\n\t\ttransition: all 0.1s ease-in-out;\n\t}\n\n\t&:hover,\n\t&.enlarged {\n\t\t&:before {\n\t\t\twidth: 12px;\n\t\t\theight: 12px;\n\t\t\tborder-radius: 2px;\n\t\t}\n\n\t\t.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n`;\n\ntype Props = {\n\tisOverridable: boolean;\n\tisOpen: boolean;\n};\nexport const Indicator = forwardRef< HTMLDivElement, Props >( ( { isOpen, isOverridable, ...props }, ref ) => (\n\t<Content ref={ ref } { ...props } className={ isOpen || isOverridable ? 'enlarged' : '' }>\n\t\t<IconContainer\n\t\t\tclassName=\"icon\"\n\t\t\taria-label={\n\t\t\t\tisOverridable ? __( 'Overridable property', 'elementor' ) : __( 'Make prop overridable', 'elementor' )\n\t\t\t}\n\t\t>\n\t\t\t{ isOverridable ? <CheckIcon fontSize={ SIZE } /> : <PlusIcon fontSize={ SIZE } /> }\n\t\t</IconContainer>\n\t</Content>\n) );\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { Form, MenuListItem } from '@elementor/editor-ui';\nimport { Button, FormLabel, Grid, Select, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp } from '../../types';\n\nconst SIZE = 'tiny';\n\nconst DEFAULT_GROUP = { value: null, label: __( 'Default', 'elementor' ) };\n\ntype Props = {\n\tonSubmit: ( data: { label: string; group: string | null } ) => void;\n\tcurrentValue?: OverridableProp;\n\tgroups?: { value: string; label: string }[];\n};\n\nexport function OverridablePropForm( { onSubmit, groups, currentValue }: Props ) {\n\tconst [ propLabel, setPropLabel ] = useState< string | null >( currentValue?.label ?? null );\n\tconst [ group, setGroup ] = useState< string | null >( currentValue?.groupId ?? groups?.[ 0 ]?.value ?? null );\n\n\tconst name = __( 'Name', 'elementor' );\n\tconst groupName = __( 'Group Name', 'elementor' );\n\n\tconst isCreate = currentValue === undefined;\n\n\tconst title = isCreate ? __( 'Create new property', 'elementor' ) : __( 'Update property', 'elementor' );\n\tconst ctaLabel = isCreate ? __( 'Create', 'elementor' ) : __( 'Update', 'elementor' );\n\n\treturn (\n\t\t<Form onSubmit={ () => onSubmit( { label: propLabel ?? '', group } ) }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%', mb: 1.5 } }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" px={ 1.5 } mb={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ name }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tname={ name }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tplaceholder={ __( 'Enter value', 'elementor' ) }\n\t\t\t\t\t\t\tvalue={ propLabel ?? '' }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => setPropLabel( e.target.value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" px={ 1.5 } mb={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ groupName }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\tname={ groupName }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ group ?? null }\n\t\t\t\t\t\t\tonChange={ setGroup }\n\t\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\t\trenderValue={ ( selectedValue: string | null ) => {\n\t\t\t\t\t\t\t\tif ( ! selectedValue || selectedValue === '' ) {\n\t\t\t\t\t\t\t\t\tconst [ firstGroup = DEFAULT_GROUP ] = groups ?? [];\n\n\t\t\t\t\t\t\t\t\treturn firstGroup.label;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn groups?.find( ( { value } ) => value === selectedValue )?.label ?? selectedValue;\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ ( groups ?? [ DEFAULT_GROUP ] ).map( ( { label: groupLabel, ...props } ) => (\n\t\t\t\t\t\t\t\t<MenuListItem key={ props.value } { ...props } value={ props.value ?? '' }>\n\t\t\t\t\t\t\t\t\t{ groupLabel }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" mt={ 1.5 } py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! propLabel } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ ctaLabel }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Form>\n\t);\n}\n","import { __getState as getState } from '@elementor/store';\n\nimport { selectOverridableProps } from '../../../store/store';\nimport { type OverridableProp } from '../../../types';\n\nexport function getOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n}: {\n\tcomponentId: number;\n\toverrideKey: string;\n} ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn undefined;\n\t}\n\n\treturn overridableProps.props[ overrideKey ];\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { initSaveAsComponentTool } from './save-as-component-tool';\n\nexport function initMcp() {\n\tconst { setMCPDescription } = getMCPByDomain( 'components' );\n\n\tsetMCPDescription(\n\t\t`Elementor Editor Components MCP - Tools for creating and managing reusable components. \n Components are reusable blocks of content that can be used multiple times across the pages, its a widget which contains a set of elements and styles.`\n\t);\n\n\tinitSaveAsComponentTool();\n}\n","import { DOCUMENT_STRUCTURE_URI, WIDGET_SCHEMA_URI } from '@elementor/editor-canvas';\nimport { getContainer, getElementType, getWidgetsCache, type V1ElementData } from '@elementor/editor-elements';\nimport { getMCPByDomain, toolPrompts } from '@elementor/editor-mcp';\nimport { type PropValue } from '@elementor/editor-props';\nimport { AxiosError } from '@elementor/http-client';\nimport { z } from '@elementor/schema';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { apiClient } from '../api';\nimport { createUnpublishedComponent } from '../store/actions/create-unpublished-component';\nimport { type OverridableProps } from '../types';\n\nconst InputSchema = {\n\telement_id: z\n\t\t.string()\n\t\t.describe(\n\t\t\t'The unique identifier of the element to save as a component. ' +\n\t\t\t\t'Use the \"list-elements\" tool to find available element IDs in the current document.'\n\t\t),\n\tcomponent_name: z\n\t\t.string()\n\t\t.describe( 'The name for the new component. Should be descriptive and unique among existing components.' ),\n\toverridable_props: z\n\t\t.object( {\n\t\t\tprops: z.record(\n\t\t\t\tz.object( {\n\t\t\t\t\telementId: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe( 'The id of the child element that you want to override its settings' ),\n\t\t\t\t\tpropKey: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe(\n\t\t\t\t\t\t\t'The property key of the child element that you want to override its settings (e.g., \"text\", \"url\", \"tag\"). To get the available propKeys for an element, use the \"get-element-type-config\" tool.'\n\t\t\t\t\t\t),\n\t\t\t\t} )\n\t\t\t),\n\t\t} )\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Overridable properties configuration. Specify which CHILD element properties can be customized. ' +\n\t\t\t\t'Only elementId and propKey are required; To get the available propKeys for a child element you must use the \"get-element-type-config\" tool.'\n\t\t),\n};\n\nconst OutputSchema = {\n\tmessage: z.string().optional().describe( 'Additional information about the operation result' ),\n\tcomponent_uid: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe( 'The unique identifier of the newly created component (only present on success)' ),\n};\n\nexport const ERROR_MESSAGES = {\n\tELEMENT_NOT_FOUND: \"Element not found. Use 'list-elements' to get valid element IDs.\",\n\tELEMENT_NOT_ONE_OF_TYPES: ( validTypes: string[] ) =>\n\t\t`Element is not one of the following types: ${ validTypes.join( ', ' ) }`,\n\tELEMENT_IS_LOCKED: 'Cannot save a locked element as a component.',\n};\n\nexport const handleSaveAsComponent = async ( params: z.infer< z.ZodObject< typeof InputSchema > > ) => {\n\tconst { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;\n\tconst validElementTypes = getValidElementTypes();\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_FOUND );\n\t}\n\n\tconst elType = container.model.get( 'elType' );\n\n\tif ( ! validElementTypes.includes( elType ) ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_ONE_OF_TYPES( validElementTypes ) );\n\t}\n\n\tconst element = container.model.toJSON( { remove: [ 'default' ] } ) as V1ElementData;\n\n\tif ( element?.isLocked ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_IS_LOCKED );\n\t}\n\n\tconst overridableProps = overridablePropsInput\n\t\t? enrichOverridableProps( overridablePropsInput, element )\n\t\t: undefined;\n\n\tif ( overridableProps ) {\n\t\tupdateElementDataWithOverridableProps( element, overridableProps );\n\t}\n\n\tconst uid = generateUniqueId( 'component' );\n\n\ttry {\n\t\tawait apiClient.validate( {\n\t\t\titems: [\n\t\t\t\t{ uid, title: componentName, elements: [ element ], settings: { overridable_props: overridableProps } },\n\t\t\t],\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\tif ( error instanceof AxiosError ) {\n\t\t\tthrow new Error( error.response?.data.messge );\n\t\t}\n\t\tthrow new Error( 'Unknown error' );\n\t}\n\n\tcreateUnpublishedComponent( componentName, element, null, overridableProps, uid );\n\n\treturn {\n\t\tstatus: 'ok' as const,\n\t\tmessage: `Component \"${ componentName }\" created successfully.`,\n\t\tcomponent_uid: uid,\n\t};\n};\n\nfunction enrichOverridableProps(\n\tinput: { props: Record< string, { elementId: string; propKey: string } > },\n\trootElement: V1ElementData\n): OverridableProps {\n\tconst enrichedProps: OverridableProps[ 'props' ] = {};\n\tconst defaultGroupId = generateUniqueId( 'group' );\n\n\tObject.entries( input.props ).forEach( ( [ , prop ] ) => {\n\t\tconst { elementId, propKey } = prop;\n\t\tconst element = findElementById( rootElement, elementId );\n\n\t\tif ( ! element ) {\n\t\t\tthrow new Error( `Element with ID \"${ elementId }\" not found in component` );\n\t\t}\n\n\t\tconst elType = element.elType;\n\t\tconst widgetType = element.widgetType || element.elType;\n\n\t\t// Validate that the propKey exists in the element's schema\n\t\tconst elementType = getElementType( widgetType );\n\n\t\tif ( ! elementType ) {\n\t\t\tthrow new Error(\n\t\t\t\t`Element type \"${ widgetType }\" is not atomic or does not have a settings schema. ` +\n\t\t\t\t\t`Cannot expose property \"${ propKey }\" for element \"${ elementId }\".`\n\t\t\t);\n\t\t}\n\n\t\tif ( ! elementType.propsSchema[ propKey ] ) {\n\t\t\tconst availableProps = Object.keys( elementType.propsSchema ).join( ', ' );\n\t\t\tthrow new Error(\n\t\t\t\t`Property \"${ propKey }\" does not exist in element \"${ elementId }\" (type: ${ widgetType }). ` +\n\t\t\t\t\t`Available properties: ${ availableProps }`\n\t\t\t);\n\t\t}\n\n\t\tconst overrideKey = generateUniqueId( 'prop' );\n\t\tconst originValue = element.settings?.[ propKey ]\n\t\t\t? ( element.settings[ propKey ] as PropValue )\n\t\t\t: elementType.propsSchema[ propKey ].default ?? null;\n\n\t\tconst label = generateLabel( propKey );\n\n\t\tenrichedProps[ overrideKey ] = {\n\t\t\toverrideKey,\n\t\t\tlabel,\n\t\t\telementId,\n\t\t\tpropKey,\n\t\t\telType,\n\t\t\twidgetType,\n\t\t\toriginValue,\n\t\t\tgroupId: defaultGroupId,\n\t\t};\n\t} );\n\n\treturn {\n\t\tprops: enrichedProps,\n\t\tgroups: {\n\t\t\titems: {\n\t\t\t\t[ defaultGroupId ]: {\n\t\t\t\t\tid: defaultGroupId,\n\t\t\t\t\tlabel: 'Default',\n\t\t\t\t\tprops: Object.keys( enrichedProps ),\n\t\t\t\t},\n\t\t\t},\n\t\t\torder: [ defaultGroupId ],\n\t\t},\n\t};\n}\n\nfunction updateElementDataWithOverridableProps( rootElement: V1ElementData, overridableProps: OverridableProps ) {\n\tObject.values( overridableProps.props ).forEach( ( prop ) => {\n\t\tconst element = findElementById( rootElement, prop.elementId );\n\n\t\tif ( ! element || ! element.settings ) {\n\t\t\treturn;\n\t\t}\n\n\t\telement.settings[ prop.propKey ] = {\n\t\t\t$$type: 'overridable',\n\t\t\tvalue: {\n\t\t\t\toverride_key: prop.overrideKey,\n\t\t\t\torigin_value: prop.originValue,\n\t\t\t},\n\t\t};\n\t} );\n}\n\nfunction findElementById( root: V1ElementData, targetId: string ): V1ElementData | null {\n\tif ( root.id === targetId ) {\n\t\treturn root;\n\t}\n\n\tif ( root.elements ) {\n\t\tfor ( const child of root.elements ) {\n\t\t\tconst found = findElementById( child, targetId );\n\t\t\tif ( found ) {\n\t\t\t\treturn found;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction generateLabel( propKey: string ): string {\n\tconst uniqueId = generateUniqueId( 'prop' );\n\treturn `${ uniqueId } - ${ propKey }`;\n}\n\nfunction getValidElementTypes(): string[] {\n\tconst types = getWidgetsCache();\n\n\tif ( ! types ) {\n\t\treturn [];\n\t}\n\n\treturn Object.entries( types ).reduce( ( acc, [ type, value ] ) => {\n\t\tif ( ! value.atomic_props_schema || ! value.show_in_panel || value.elType === 'widget' ) {\n\t\t\treturn acc;\n\t\t}\n\n\t\tacc.push( type );\n\t\treturn acc;\n\t}, [] as string[] );\n}\n\nconst generatePrompt = () => {\n\tconst saveAsComponentPrompt = toolPrompts( 'save-as-component' );\n\n\tsaveAsComponentPrompt.description( `\nSave an existing element as a reusable component in the Elementor editor.\n\n# When to use this tool\nUse this tool when the user wants to:\n- Create a reusable component from an existing element structure\n- Make specific child element properties customizable in component instances\n- Build a library of reusable design patterns\n\n# When NOT to use this tool\n- Element is already a component (widgetType: 'e-component')\n- Element is locked\n- Element is not an atomic element (atomic_props_schema is not defined)\n- Element elType is a 'widget'\n\n# **CRITICAL - REQUIRED RESOURCES (Must read before using this tool)**\n1. [${ DOCUMENT_STRUCTURE_URI }]\n **MANDATORY** - Required to understand the document structure and identify child elements for overridable properties.\n Use this resource to find element IDs and understand the element hierarchy.\n\n2. [${ WIDGET_SCHEMA_URI }]\n **MANDATORY** - Required to understand which properties are available for each widget type.\n Use this to identify available propKeys in the atomic_props_schema for child elements.\n\n# Instructions - MUST FOLLOW IN ORDER\n## Step 1: Identify the Target Element\n1. Read the [${ DOCUMENT_STRUCTURE_URI }] resource to understand the document structure\n2. Locate the element you want to save as a component by its element_id\n3. Verify the element type is a valid element type\n4. Ensure the element is not locked and is not already a component\n\n## Step 2: Define Overridable Properties\nDo this step to make child element properties customizable.\nSkip that step ONLY if the user explicitly requests to not make any properties customizable.\n\n1. **Identify Child Elements**\n - Use the [${ DOCUMENT_STRUCTURE_URI }] resource to find all child elements\n - Note the elementId and widgetType/elType of each child element you want to customize\n\n2. **Find Available Properties**\n - Use the [${ WIDGET_SCHEMA_URI }] resource to find the child element's widget type schema\n - Review the atomic_props_schema to find available propKeys (ONLY use top-level props)\n - Common propKeys include: \"text\", \"url\", \"tag\", \"size\", etc.\n - Use only the top level properties, do not use nested properties.\n\n3. **Build the overridable_props Object**\n - For each property you want to make overridable, add an entry:\n \\`{ \"elementId\": \"<child-element-id>\", \"propKey\": \"<property-key>\" }\\`\n - Group all entries under the \"props\" object\n\n## Step 3: Execute the Tool\nCall the tool with:\n- element_id: The ID of the parent element to save as component\n- component_name: A descriptive name for the component\n- overridable_props: (Optional) The properties configuration from Step 2\n\n# CONSTRAINTS\n- NEVER try to override properties of the parent element itself - ONLY child elements\n- NEVER use invalid propKeys - always verify against the widget's atomic_props_schema in [${ WIDGET_SCHEMA_URI }]\n- Property keys must exist in the child element's atomic_props_schema\n- Element IDs must exist within the target element's children\n- When tool execution fails, read the error message and adjust accordingly\n- The element being saved must not be inside another component\n` );\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'element_id',\n\t\t`**MANDATORY** The unique identifier of the element to save as a component.\nUse the [${ DOCUMENT_STRUCTURE_URI }] resource to find available element IDs.`\n\t);\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'component_name',\n\t\t`**MANDATORY** A descriptive name for the new component.\nShould be unique and clearly describe the component's purpose (e.g., \"Hero Section\", \"Feature Card\").`\n\t);\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'overridable_props',\n\t\t`**OPTIONAL** Configuration for which child element properties can be customized in component instances.\n\nStructure:\n\\`\\`\\`json\n{\n \"props\": {\n \"<unique-key>\": {\n \"elementId\": \"<child-element-id>\",\n \"propKey\": \"<property-key>\"\n }\n }\n}\n\\`\\`\\`\n\nTo populate this correctly:\n1. Use [${ DOCUMENT_STRUCTURE_URI }] to find child element IDs and their widgetType\n2. Use [${ WIDGET_SCHEMA_URI }] to find the atomic_props_schema for each child element's widgetType\n3. Only include properties you want to be customizable in component instances\n4. Common propKeys: \"text\", \"url\", \"tag\", \"size\", \"align\", etc.`\n\t);\n\n\tsaveAsComponentPrompt.example( `\nBasic component without overridable properties:\n\\`\\`\\`json\n{\n \"element_id\": \"abc123\",\n \"component_name\": \"Hero Section\"\n}\n\\`\\`\\`\n\nComponent with overridable properties:\n\\`\\`\\`json\n{\n \"element_id\": \"abc123\",\n \"component_name\": \"Feature Card\",\n \"overridable_props\": {\n \"props\": {\n \"heading-text\": {\n \"elementId\": \"heading-123\",\n \"propKey\": \"text\"\n },\n \"button-text\": {\n \"elementId\": \"button-456\",\n \"propKey\": \"text\"\n },\n \"button-link\": {\n \"elementId\": \"button-456\",\n \"propKey\": \"url\"\n }\n }\n }\n}\n\\`\\`\\`\n` );\n\n\tsaveAsComponentPrompt.instruction(\n\t\t`After successful creation, the component will be available in the components library and can be inserted into any page or template.`\n\t);\n\n\tsaveAsComponentPrompt.instruction(\n\t\t`When overridable properties are defined, component instances will show customization controls for those specific properties in the editing panel.`\n\t);\n\n\treturn saveAsComponentPrompt.prompt();\n};\n\nexport const initSaveAsComponentTool = () => {\n\treturn getMCPByDomain( 'components' ).addTool( {\n\t\tname: 'save-as-component',\n\t\tschema: InputSchema,\n\t\toutputSchema: OutputSchema,\n\t\tdescription: generatePrompt(),\n\t\thandler: handleSaveAsComponent,\n\t} );\n};\n","import { useEffect } from 'react';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { loadComponents } from './store/thunks';\n\nexport function PopulateStore() {\n\tuseEffect( () => {\n\t\tdispatch( loadComponents() );\n\t}, [] );\n\n\treturn null;\n}\n","import { __dispatch as dispatch } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { slice } from '../store';\n\nexport function removeComponentStyles( id: number ) {\n\tapiClient.invalidateComponentConfigCache( id );\n\tdispatch( slice.actions.removeStyles( { id } ) );\n}\n","import { createStylesProvider } from '@elementor/editor-styles-repository';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { selectFlatStyles, SLICE_NAME } from './store';\n\nexport const componentsStylesProvider = createStylesProvider( {\n\tkey: 'components-styles',\n\tpriority: 100,\n\tsubscribe: ( cb ) =>\n\t\tsubscribeWithSelector(\n\t\t\t( state ) => state[ SLICE_NAME ],\n\t\t\t() => {\n\t\t\t\tcb();\n\t\t\t}\n\t\t),\n\tactions: {\n\t\tall: () => {\n\t\t\treturn selectFlatStyles( getState() );\n\t\t},\n\t\tget: ( id ) => {\n\t\t\treturn selectFlatStyles( getState() ).find( ( style ) => style.id === id ) ?? null;\n\t\t},\n\t},\n} );\n","import { updateElementSettings, type V1ElementData } from '@elementor/editor-elements';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectUnpublishedComponents, slice } from '../store/store';\nimport { type ComponentInstancePropValue, type DocumentSaveStatus, type UnpublishedComponent } from '../types';\n\nexport async function createComponentsBeforeSave( {\n\telements,\n\tstatus,\n}: {\n\telements: V1ElementData[];\n\tstatus: DocumentSaveStatus;\n} ) {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tif ( ! unpublishedComponents.length ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst uidToComponentId = await createComponents( unpublishedComponents, status );\n\n\t\tupdateComponentInstances( elements, uidToComponentId );\n\n\t\tdispatch(\n\t\t\tslice.actions.add(\n\t\t\t\tunpublishedComponents.map( ( component ) => ( {\n\t\t\t\t\tid: uidToComponentId.get( component.uid ) as number,\n\t\t\t\t\tname: component.name,\n\t\t\t\t\tuid: component.uid,\n\t\t\t\t\toverridableProps: component.overridableProps ? component.overridableProps : undefined,\n\t\t\t\t} ) )\n\t\t\t)\n\t\t);\n\t\tdispatch( slice.actions.resetUnpublished() );\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to publish components and update component instances: ${ error }` );\n\t}\n}\n\nasync function createComponents(\n\tcomponents: UnpublishedComponent[],\n\tstatus: DocumentSaveStatus\n): Promise< Map< string, number > > {\n\tconst response = await apiClient.create( {\n\t\tstatus,\n\t\titems: components.map( ( component ) => ( {\n\t\t\tuid: component.uid,\n\t\t\ttitle: component.name,\n\t\t\telements: component.elements,\n\t\t\tsettings: component.overridableProps ? { overridable_props: component.overridableProps } : undefined,\n\t\t} ) ),\n\t} );\n\n\tconst map = new Map< string, number >();\n\n\tObject.entries( response ).forEach( ( [ key, value ] ) => {\n\t\tmap.set( key, value );\n\t} );\n\n\treturn map;\n}\n\nfunction updateComponentInstances( elements: V1ElementData[], uidToComponentId: Map< string, number > ): void {\n\telements.forEach( ( element ) => {\n\t\tconst { shouldUpdate, newComponentId } = shouldUpdateElement( element, uidToComponentId );\n\t\tif ( shouldUpdate ) {\n\t\t\tupdateElementComponentId( element.id, newComponentId );\n\t\t}\n\n\t\tif ( element.elements ) {\n\t\t\tupdateComponentInstances( element.elements, uidToComponentId );\n\t\t}\n\t} );\n}\n\nfunction shouldUpdateElement(\n\telement: V1ElementData,\n\tuidToComponentId: Map< string, number >\n): { shouldUpdate: true; newComponentId: number } | { shouldUpdate: false; newComponentId: null } {\n\tif ( element.widgetType === 'e-component' ) {\n\t\tconst currentComponentId = ( element.settings?.component_instance as ComponentInstancePropValue< string > )\n\t\t\t?.value?.component_id.value;\n\n\t\tif ( currentComponentId && uidToComponentId.has( currentComponentId ) ) {\n\t\t\treturn { shouldUpdate: true, newComponentId: uidToComponentId.get( currentComponentId ) as number };\n\t\t}\n\t}\n\treturn { shouldUpdate: false, newComponentId: null };\n}\n\nfunction updateElementComponentId( elementId: string, componentId: number ): void {\n\tupdateElementSettings( {\n\t\tid: elementId,\n\t\tprops: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: { $$type: 'number', value: componentId },\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\twithHistory: false,\n\t} );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __getState as getState } from '@elementor/store';\n\nimport { COMPONENT_DOCUMENT_TYPE } from '../components/consts';\nimport { selectOverridableProps } from '../store/store';\n\nexport const setComponentOverridablePropsSettingsBeforeSave = ( {\n\tcontainer,\n}: {\n\tcontainer: V1Element & { document: V1Document };\n} ) => {\n\tconst currentDocument = container.document;\n\n\tif ( ! currentDocument || currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), currentDocument.id );\n\tif ( overridableProps ) {\n\t\tcontainer.settings.set( 'overridable_props', overridableProps );\n\t}\n};\n","import { type NotificationData, notify } from '@elementor/editor-notifications';\nimport { __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectArchivedComponents } from '../store/store';\n\nconst failedNotification = ( message: string ): NotificationData => ( {\n\ttype: 'error',\n\tmessage: `Failed to archive components: ${ message }`,\n\tid: 'failed-archived-components-notification',\n} );\n\nconst successNotification = ( message: string ): NotificationData => ( {\n\ttype: 'success',\n\tmessage: `Successfully archived components: ${ message }`,\n\tid: 'success-archived-components-notification',\n} );\n\nexport const updateArchivedComponentBeforeSave = async () => {\n\ttry {\n\t\tconst archivedComponents = selectArchivedComponents( getState() );\n\n\t\tif ( ! archivedComponents.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = await apiClient.updateArchivedComponents(\n\t\t\tarchivedComponents.map( ( component ) => component.id )\n\t\t);\n\n\t\tconst failedIds = result.failedIds.join( ', ' );\n\t\tconst successIds = result.successIds.join( ', ' );\n\n\t\tif ( failedIds ) {\n\t\t\tnotify( failedNotification( failedIds ) );\n\t\t}\n\n\t\tif ( successIds ) {\n\t\t\tnotify( successNotification( successIds ) );\n\t\t}\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to update archived components: ${ error }` );\n\t}\n};\n","import { isDocumentDirty } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { apiClient } from '../api';\nimport { type DocumentSaveStatus } from '../types';\nimport { getComponentDocumentData, invalidateComponentDocumentData } from '../utils/component-document-data';\nimport { getComponentIds } from '../utils/get-component-ids';\n\ntype Options = {\n\tstatus: DocumentSaveStatus;\n\telements: V1ElementData[];\n};\n\nexport async function updateComponentsBeforeSave( { status, elements }: Options ) {\n\tif ( status !== 'publish' ) {\n\t\treturn;\n\t}\n\n\tconst componentIds = await getComponentIds( elements );\n\n\tconst componentDocumentData = await Promise.all( componentIds.map( getComponentDocumentData ) );\n\n\tconst draftIds = componentDocumentData\n\t\t.filter( ( document ) => !! document )\n\t\t.filter( isDocumentDirty )\n\t\t.map( ( document ) => document.id );\n\n\tif ( draftIds.length === 0 ) {\n\t\treturn;\n\t}\n\n\tawait apiClient.updateStatuses( draftIds, 'publish' );\n\n\tdraftIds.forEach( ( id ) => invalidateComponentDocumentData( id ) );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element, type V1ElementData } from '@elementor/editor-elements';\n\nimport { type DocumentSaveStatus } from '../types';\nimport { createComponentsBeforeSave } from './create-components-before-save';\nimport { setComponentOverridablePropsSettingsBeforeSave } from './set-component-overridable-props-settings-before-save';\nimport { updateArchivedComponentBeforeSave } from './update-archived-component-before-save';\nimport { updateComponentsBeforeSave } from './update-components-before-save';\n\ntype Options = {\n\tcontainer: V1Element & {\n\t\tdocument: V1Document;\n\t\tmodel: {\n\t\t\tget: ( key: 'elements' ) => {\n\t\t\t\ttoJSON: () => V1ElementData[];\n\t\t\t};\n\t\t};\n\t};\n\tstatus: DocumentSaveStatus;\n};\n\nexport const beforeSave = ( { container, status }: Options ) => {\n\tconst elements = container.model.get( 'elements' )?.toJSON() ?? [];\n\n\treturn Promise.all( [\n\t\tupdateArchivedComponentBeforeSave(),\n\t\tcreateComponentsBeforeSave( { elements, status } ),\n\t\tupdateComponentsBeforeSave( { elements, status } ),\n\t\tsetComponentOverridablePropsSettingsBeforeSave( { container } ),\n\t] );\n};\n"],"mappings":"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","names":["import_editor_canvas","import_editor_documents","import_editor_editing_panel","import_editor_styles_repository","import_editor_v1_adapters","import_store","import_i18n","import_store","import_store","createAsyncThunk","createSlice","createSelector","getState","import_editor_canvas","import_editor_canvas","React","import_editor_documents","import_icons","import_store","import_ui","import_i18n","import_editor_documents","import_store","import_editor_v1_adapters","runCommand","useSelector","import_react","import_store","useSelector","useSelector","React","import_editor_ui","React","import_icons","import_ui","import_i18n","React","import_react","React","import_icons","import_ui","import_i18n","import_store","useSelector","React","import_editor_canvas","import_editor_elements","import_icons","import_ui","import_i18n","import_editor_documents","import_store","getStore","dispatch","import_editor_documents","import_editor_canvas","import_editor_documents","import_i18n","import_store","getState","import_store","getState","dispatch","import_store","getState","dispatch","import_editor_elements","React","import_ui","React","import_react","import_editor_elements","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_v1_adapters","import_store","import_utils","dispatch","runCommand","import_react","import_i18n","validateForm","FormElement","React","import_react","import_editor_documents","import_editor_v1_adapters","import_store","import_editor_documents","import_store","dispatch","getStore","React","import_react","import_i18n","import_editor_canvas","import_editor_v1_adapters","useListenTo","import_react","import_utils","useSelector","listenTo","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_editing_panel","import_editor_elements","import_icons","import_store","import_ui","import_i18n","import_editor_props","import_schema","import_editor_props","import_schema","import_schema","React","import_icons","import_ui","import_i18n","EmptyState","React","import_react","import_editor_ui","import_ui","getState","EmptyState","React","import_editor_editing_panel","import_store","import_editor_props","import_schema","React","import_react","import_store","getState","dispatch","getState","React","import_editor_controls","import_editor_editing_panel","import_editor_elements","import_store","import_ui","import_i18n","import_store","import_utils","import_i18n","getState","dispatch","React","import_react","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_ui","import_i18n","SIZE","import_store","getState","getState","Content","import_editor_mcp","import_editor_canvas","import_editor_elements","import_http_client","import_schema","import_utils","import_react","import_store","dispatch","import_store","dispatch","import_store","subscribeWithSelector","getState","import_editor_elements","import_store","getState","dispatch","import_store","getState","import_store","getState","import_editor_documents","registerSlice"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/component-instance-transformer.ts","../src/store/store.ts","../src/store/thunks.ts","../src/api.ts","../src/utils/component-document-data.ts","../src/component-overridable-transformer.ts","../src/component-override-transformer.ts","../src/components/component-panel-header/component-panel-header.tsx","../src/hooks/use-navigate-back.ts","../src/utils/switch-to-component.ts","../src/components/component-panel-header/component-badge.tsx","../src/components/component-panel-header/use-overridable-props.ts","../src/components/components-tab/components.tsx","../src/components/components-tab/component-search.tsx","../src/components/components-tab/search-provider.tsx","../src/components/components-tab/components-list.tsx","../src/hooks/use-components.ts","../src/components/components-tab/components-item.tsx","../src/store/actions/archive-component.ts","../src/store/actions/load-components-assets.ts","../src/create-component-type.ts","../src/utils/tracking.ts","../src/utils/get-component-ids.ts","../src/store/actions/load-components-overridable-props.ts","../src/store/actions/load-components-styles.ts","../src/utils/get-container-for-new-element.ts","../src/components/create-component-form/utils/replace-element-with-component.ts","../src/components/components-tab/loading-components.tsx","../src/components/consts.ts","../src/components/create-component-form/create-component-form.tsx","../src/store/actions/create-unpublished-component.ts","../src/components/create-component-form/hooks/use-form.ts","../src/components/create-component-form/utils/component-form-schema.ts","../src/components/create-component-form/utils/get-component-event-data.ts","../src/components/edit-component/edit-component.tsx","../src/store/actions/update-current-component.ts","../src/components/edit-component/component-modal.tsx","../src/hooks/use-canvas-document.ts","../src/hooks/use-element-rect.ts","../src/components/in-edit-mode.tsx","../src/components/instance-editing-panel/instance-editing-panel.tsx","../src/prop-types/component-instance-prop-type.ts","../src/prop-types/component-instance-overrides-prop-type.ts","../src/prop-types/component-instance-override-prop-type.ts","../src/components/instance-editing-panel/empty-state.tsx","../src/components/instance-editing-panel/override-props-group.tsx","../src/components/overridable-props/overridable-prop-control.tsx","../src/prop-types/component-overridable-prop-type.ts","../src/provider/overridable-prop-context.tsx","../src/store/actions/update-overridable-prop-origin-value.ts","../src/components/overridable-props/overridable-prop-indicator.tsx","../src/store/actions/set-overridable-prop.ts","../src/components/overridable-props/indicator.tsx","../src/components/overridable-props/overridable-prop-form.tsx","../src/components/overridable-props/utils/get-overridable-prop.ts","../src/mcp/index.ts","../src/mcp/save-as-component-tool.ts","../src/populate-store.ts","../src/store/actions/remove-component-styles.ts","../src/store/components-styles-provider.ts","../src/sync/create-components-before-save.ts","../src/sync/set-component-overridable-props-settings-before-save.ts","../src/sync/update-archived-component-before-save.ts","../src/sync/update-components-before-save.ts","../src/sync/before-save.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoLogic, injectIntoTop } from '@elementor/editor';\nimport {\n\ttype CreateTemplatedElementTypeOptions,\n\tregisterElementType,\n\tsettingsTransformersRegistry,\n} from '@elementor/editor-canvas';\nimport { getV1CurrentDocument } from '@elementor/editor-documents';\nimport {\n\tFIELD_TYPE,\n\tinjectIntoPanelHeaderTop,\n\tregisterControlReplacement,\n\tregisterEditingPanelReplacement,\n\tregisterFieldIndicator,\n} from '@elementor/editor-editing-panel';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { injectTab } from '@elementor/editor-elements-panel';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __registerSlice as registerSlice } from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstanceTransformer } from './component-instance-transformer';\nimport { componentOverridableTransformer } from './component-overridable-transformer';\nimport { componentOverrideTransformer } from './component-override-transformer';\nimport { ComponentPanelHeader } from './components/component-panel-header/component-panel-header';\nimport { Components } from './components/components-tab/components';\nimport { COMPONENT_DOCUMENT_TYPE } from './components/consts';\nimport { CreateComponentForm } from './components/create-component-form/create-component-form';\nimport { EditComponent } from './components/edit-component/edit-component';\nimport { openEditModeDialog } from './components/in-edit-mode';\nimport { InstanceEditingPanel } from './components/instance-editing-panel/instance-editing-panel';\nimport { OverridablePropControl } from './components/overridable-props/overridable-prop-control';\nimport { OverridablePropIndicator } from './components/overridable-props/overridable-prop-indicator';\nimport { createComponentType, TYPE } from './create-component-type';\nimport { initMcp } from './mcp';\nimport { PopulateStore } from './populate-store';\nimport { componentOverridablePropTypeUtil } from './prop-types/component-overridable-prop-type';\nimport { loadComponentsAssets } from './store/actions/load-components-assets';\nimport { removeComponentStyles } from './store/actions/remove-component-styles';\nimport { componentsStylesProvider } from './store/components-styles-provider';\nimport { slice } from './store/store';\nimport { beforeSave } from './sync/before-save';\nimport { type ExtendedWindow } from './types';\nimport { onElementDrop } from './utils/tracking';\n\nexport function init() {\n\tstylesRepository.register( componentsStylesProvider );\n\n\tregisterSlice( slice );\n\n\tregisterElementType( TYPE, ( options: CreateTemplatedElementTypeOptions ) =>\n\t\tcreateComponentType( { ...options, showLockedByModal: openEditModeDialog } )\n\t);\n\n\tregisterDataHook( 'dependency', 'editor/documents/close', ( args ) => {\n\t\tconst document = getV1CurrentDocument();\n\t\tif ( document.config.type === COMPONENT_DOCUMENT_TYPE ) {\n\t\t\targs.mode = 'autosave';\n\t\t}\n\t\treturn true;\n\t} );\n\n\tregisterDataHook( 'after', 'preview/drop', onElementDrop );\n\n\t( window as unknown as ExtendedWindow ).elementorCommon.__beforeSave = beforeSave;\n\n\tinjectTab( {\n\t\tid: 'components',\n\t\tlabel: __( 'Components', 'elementor' ),\n\t\tcomponent: Components,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'create-component-popup',\n\t\tcomponent: CreateComponentForm,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'components-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'edit-component',\n\t\tcomponent: EditComponent,\n\t} );\n\n\tinjectIntoPanelHeaderTop( {\n\t\tid: 'component-panel-header',\n\t\tcomponent: ComponentPanelHeader,\n\t} );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\tconst { id, config } = getV1CurrentDocument();\n\n\t\tif ( id ) {\n\t\t\tremoveComponentStyles( id );\n\t\t}\n\n\t\tawait loadComponentsAssets( ( config?.elements as V1ElementData[] ) ?? [] );\n\t} );\n\n\tregisterFieldIndicator( {\n\t\tfieldType: FIELD_TYPE.SETTINGS,\n\t\tid: 'component-overridable-prop',\n\t\tpriority: 1,\n\t\tindicator: OverridablePropIndicator,\n\t} );\n\n\tregisterControlReplacement( {\n\t\tcomponent: OverridablePropControl,\n\t\tcondition: ( { value } ) => componentOverridablePropTypeUtil.isValid( value ),\n\t} );\n\n\tregisterEditingPanelReplacement( {\n\t\tid: 'component-instance-edit-panel',\n\t\tcondition: ( _, elementType ) => elementType.key === 'e-component',\n\t\tcomponent: InstanceEditingPanel,\n\t} );\n\n\tsettingsTransformersRegistry.register( 'component-instance', componentInstanceTransformer );\n\tsettingsTransformersRegistry.register( 'overridable', componentOverridableTransformer );\n\tsettingsTransformersRegistry.register( 'override', componentOverrideTransformer );\n\n\tinitMcp();\n}\n","import { createTransformer, RenderContext } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectUnpublishedComponents } from './store/store';\nimport { type ComponentOverridePropValue } from './types';\nimport { getComponentDocumentData } from './utils/component-document-data';\n\ntype ComponentInstanceContext = {\n\toverrides?: Record< string, unknown >;\n};\n\nexport const componentInstanceContext = new RenderContext< ComponentInstanceContext >( 'component-instance', {\n\toverrides: {},\n} );\n\nexport const componentInstanceTransformer = createTransformer(\n\tasync ( {\n\t\tcomponent_id: id,\n\t\toverrides: overridesValue,\n\t}: {\n\t\tcomponent_id: number | string;\n\t\toverrides?: ComponentOverridePropValue[];\n\t} ) => {\n\t\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\t\tconst unpublishedComponent = unpublishedComponents.find( ( { uid } ) => uid === id );\n\n\t\tconst overrides = overridesValue?.reduce( ( acc, override ) => ( { ...acc, ...override } ), {} );\n\n\t\tif ( unpublishedComponent ) {\n\t\t\treturn {\n\t\t\t\telements: structuredClone( unpublishedComponent.elements ),\n\t\t\t\toverrides,\n\t\t\t};\n\t\t}\n\n\t\tif ( typeof id !== 'number' ) {\n\t\t\tthrow new Error( `Component ID \"${ id }\" not valid.` );\n\t\t}\n\n\t\tconst data = await getComponentDocumentData( id );\n\n\t\treturn {\n\t\t\telements: data?.elements ?? [],\n\t\t\toverrides,\n\t\t};\n\t}\n);\n","import { type V1Document } from '@elementor/editor-documents';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\t__useSelector as useSelector,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport {\n\ttype Component,\n\ttype ComponentId,\n\ttype OverridableProps,\n\ttype PublishedComponent,\n\ttype StylesDefinition,\n\ttype UnpublishedComponent,\n} from '../types';\nimport { loadComponents } from './thunks';\n\ntype GetComponentResponse = PublishedComponent[];\n\ntype Status = 'idle' | 'pending' | 'error';\n\ntype ComponentsState = {\n\tdata: PublishedComponent[];\n\tunpublishedData: UnpublishedComponent[];\n\tloadStatus: Status;\n\tstyles: StylesDefinition;\n\tcreatedThisSession: Component[ 'uid' ][];\n\tarchivedData: PublishedComponent[];\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n};\n\nexport type ComponentsSlice = SliceState< typeof slice >;\n\nexport type ComponentsPathItem = {\n\tinstanceId?: string;\n\tcomponentId: V1Document[ 'id' ];\n};\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\n\tcreatedThisSession: [],\n\tarchivedData: [],\n\tpath: [],\n\tcurrentComponentId: null,\n};\n\nexport const SLICE_NAME = 'components';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tadd: ( state, { payload }: PayloadAction< PublishedComponent | PublishedComponent[] > ) => {\n\t\t\tif ( Array.isArray( payload ) ) {\n\t\t\t\tstate.data = [ ...state.data, ...payload ];\n\t\t\t} else {\n\t\t\t\tstate.data.unshift( payload );\n\t\t\t}\n\t\t},\n\t\tload: ( state, { payload }: PayloadAction< PublishedComponent[] > ) => {\n\t\t\tstate.data = payload;\n\t\t},\n\t\taddUnpublished: ( state, { payload }: PayloadAction< UnpublishedComponent > ) => {\n\t\t\tstate.unpublishedData.unshift( payload );\n\t\t},\n\t\tresetUnpublished: ( state ) => {\n\t\t\tstate.unpublishedData = [];\n\t\t},\n\t\tremoveStyles( state, { payload }: PayloadAction< { id: ComponentId } > ) {\n\t\t\tconst { [ payload.id ]: _, ...rest } = state.styles;\n\n\t\t\tstate.styles = rest;\n\t\t},\n\t\taddStyles: ( state, { payload } ) => {\n\t\t\tstate.styles = { ...state.styles, ...payload };\n\t\t},\n\t\taddCreatedThisSession: ( state, { payload }: PayloadAction< string > ) => {\n\t\t\tstate.createdThisSession.push( payload );\n\t\t},\n\t\tarchive: ( state, { payload }: PayloadAction< number > ) => {\n\t\t\tstate.data = state.data.filter( ( component ) => {\n\t\t\t\tconst isArchived = component.id === payload;\n\t\t\t\tif ( isArchived ) {\n\t\t\t\t\tstate.archivedData.push( component );\n\t\t\t\t}\n\n\t\t\t\treturn ! isArchived;\n\t\t\t} );\n\t\t},\n\t\tsetCurrentComponentId: ( state, { payload }: PayloadAction< V1Document[ 'id' ] | null > ) => {\n\t\t\tstate.currentComponentId = payload;\n\t\t},\n\t\tsetPath: ( state, { payload }: PayloadAction< ComponentsPathItem[] > ) => {\n\t\t\tstate.path = payload;\n\t\t},\n\t\tsetOverridableProps: (\n\t\t\tstate,\n\t\t\t{ payload }: PayloadAction< { componentId: ComponentId; overridableProps: OverridableProps } >\n\t\t) => {\n\t\t\tconst component = state.data.find( ( comp ) => comp.id === payload.componentId );\n\n\t\t\tif ( ! component ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcomponent.overridableProps = payload.overridableProps;\n\t\t},\n\t},\n\textraReducers: ( builder ) => {\n\t\tbuilder.addCase( loadComponents.fulfilled, ( state, { payload }: PayloadAction< GetComponentResponse > ) => {\n\t\t\tstate.data = payload;\n\t\t\tstate.loadStatus = 'idle';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.pending, ( state ) => {\n\t\t\tstate.loadStatus = 'pending';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.rejected, ( state ) => {\n\t\t\tstate.loadStatus = 'error';\n\t\t} );\n\t},\n} );\n\nconst selectData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].data;\nconst selectArchivedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].archivedData;\nconst selectLoadStatus = ( state: ComponentsSlice ) => state[ SLICE_NAME ].loadStatus;\nconst selectStylesDefinitions = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nconst selectUnpublishedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].unpublishedData;\nconst getCreatedThisSession = ( state: ComponentsSlice ) => state[ SLICE_NAME ].createdThisSession;\nconst getPath = ( state: ComponentsSlice ) => state[ SLICE_NAME ].path;\nconst getCurrentComponentId = ( state: ComponentsSlice ) => state[ SLICE_NAME ].currentComponentId;\nexport const selectComponent = ( state: ComponentsSlice, componentId: ComponentId ) =>\n\tstate[ SLICE_NAME ].data.find( ( component ) => component.id === componentId );\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: PublishedComponent[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( {\n\t\t\tuid: item.uid,\n\t\t\tname: item.name,\n\t\t\toverridableProps: item.overridableProps,\n\t\t} ) ),\n\t\t...data,\n\t]\n);\nexport const selectUnpublishedComponents = createSelector(\n\tselectUnpublishedData,\n\t( unpublishedData: UnpublishedComponent[] ) => unpublishedData\n);\nexport const selectLoadIsPending = createSelector( selectLoadStatus, ( status ) => status === 'pending' );\nexport const selectLoadIsError = createSelector( selectLoadStatus, ( status ) => status === 'error' );\nexport const selectStyles = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nexport const selectFlatStyles = createSelector( selectStylesDefinitions, ( data ) => Object.values( data ).flat() );\nexport const selectCreatedThisSession = createSelector(\n\tgetCreatedThisSession,\n\t( createdThisSession ) => createdThisSession\n);\n\nconst DEFAULT_OVERRIDABLE_PROPS: OverridableProps = {\n\tprops: {},\n\tgroups: {\n\t\titems: {},\n\t\torder: [],\n\t},\n};\n\nexport const selectOverridableProps = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\tif ( ! component ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;\n\t}\n);\nexport const selectIsOverridablePropsLoaded = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\treturn !! component?.overridableProps;\n\t}\n);\nexport const selectPath = createSelector( getPath, ( path ) => path );\n\nexport const selectCurrentComponentId = createSelector(\n\tgetCurrentComponentId,\n\t( currentComponentId ) => currentComponentId\n);\n\nexport const useCurrentComponentId = () => {\n\treturn useSelector( selectCurrentComponentId );\n};\n\nexport const selectArchivedComponents = createSelector(\n\tselectArchivedData,\n\t( archivedData: PublishedComponent[] ) => archivedData\n);\n","import { __createAsyncThunk as createAsyncThunk } from '@elementor/store';\n\nimport { apiClient } from '../api';\n\nconst loadComponents = createAsyncThunk( 'components/load', async () => {\n\tconst response = await apiClient.get();\n\treturn response;\n} );\n\nexport { loadComponents };\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { ajax } from '@elementor/editor-v1-adapters';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type DocumentSaveStatus, type OverridableProps, type PublishedComponent } from './types';\n\nconst BASE_URL = 'elementor/v1/components';\n\nexport type ComponentItems = Array< {\n\tuid: string;\n\ttitle: string;\n\telements: V1ElementData[];\n\tsettings?: {\n\t\toverridable_props?: OverridableProps;\n\t};\n} >;\n\nexport type CreateComponentPayload = {\n\tstatus: DocumentSaveStatus;\n\titems: ComponentItems;\n};\n\ntype ComponentLockStatusResponse = {\n\tis_current_user_allow_to_edit: boolean;\n\tlocked_by: string;\n};\n\ntype GetComponentResponse = Array< PublishedComponent >;\n\nexport type CreateComponentResponse = Record< string, number >;\n\nexport type ValidateComponentsPayload = {\n\titems: ComponentItems;\n};\n\nexport type ValidateComponentsResponse = {\n\tcode: string;\n\tmessage: string;\n\tdata: {\n\t\tstatus: number;\n\t\tmeta: Record< string, unknown >;\n\t};\n};\n\nexport const getParams = ( id: number ) => ( {\n\taction: 'get_document_config',\n\tunique_id: `document-config-${ id }`,\n\tdata: { id },\n} );\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< HttpResponse< GetComponentResponse > >( `${ BASE_URL }` )\n\t\t\t.then( ( res ) => res.data.data ),\n\tcreate: ( payload: CreateComponentPayload ) =>\n\t\thttpService()\n\t\t\t.post< HttpResponse< CreateComponentResponse > >( `${ BASE_URL }`, payload )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateStatuses: ( ids: number[], status: DocumentSaveStatus ) =>\n\t\thttpService().put( `${ BASE_URL }/status`, {\n\t\t\tids,\n\t\t\tstatus,\n\t\t} ),\n\tgetComponentConfig: ( id: number ) => ajax.load< { id: number }, V1ElementData >( getParams( id ) ),\n\tinvalidateComponentConfigCache: ( id: number ) => ajax.invalidateCache< { id: number } >( getParams( id ) ),\n\tgetComponentLockStatus: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< { data: ComponentLockStatusResponse } >( `${ BASE_URL }/lock-status`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId,\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => {\n\t\t\t\tconst { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data;\n\t\t\t\treturn { isAllowedToSwitchDocument, lockedBy: lockedBy || '' };\n\t\t\t} ),\n\tlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/lock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tunlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/unlock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tgetOverridableProps: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< HttpResponse< OverridableProps > >( `${ BASE_URL }/overridable-props`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId: componentId.toString(),\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateArchivedComponents: async ( componentIds: number[] ) =>\n\t\tawait httpService()\n\t\t\t.post< { data: { failedIds: number[]; successIds: number[]; success: boolean } } >(\n\t\t\t\t`${ BASE_URL }/archive`,\n\t\t\t\t{\n\t\t\t\t\tcomponentIds,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then( ( res ) => res.data.data ),\n\tvalidate: async ( payload: ValidateComponentsPayload ) =>\n\t\tawait httpService()\n\t\t\t.post< HttpResponse< ValidateComponentsResponse > >( `${ BASE_URL }/create-validate`, payload )\n\t\t\t.then( ( res ) => res.data ),\n};\n","import { type Document, getV1DocumentsManager } from '@elementor/editor-documents';\n\ntype ComponentDocumentData = Document;\n\nexport const getComponentDocumentData = async ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\ttry {\n\t\treturn await documentManager.request< ComponentDocumentData >( id );\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const invalidateComponentDocumentData = ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\tdocumentManager.invalidateCache( id );\n};\n","import { createTransformer, settingsTransformersRegistry } from '@elementor/editor-canvas';\nimport { type PropValue, type TransformablePropValue } from '@elementor/editor-props';\n\nimport { componentInstanceContext } from './component-instance-transformer';\nimport { type ComponentOverridable } from './types';\n\nexport const componentOverridableTransformer = createTransformer(\n\t( value: ComponentOverridable, options: { key: string } ) => {\n\t\tconst { overrides } = componentInstanceContext.get();\n\n\t\tconst overrideValue = overrides?.[ value.override_key ];\n\n\t\tif ( overrideValue ) {\n\t\t\tconst isOverride = isOriginValueOverride( value.origin_value );\n\n\t\t\tif ( isOverride ) {\n\t\t\t\treturn transformOverride( value, options, overrideValue );\n\t\t\t}\n\n\t\t\treturn overrideValue;\n\t\t}\n\n\t\treturn value.origin_value;\n\t}\n);\n\nfunction transformOverride(\n\tvalue: ComponentOverridable,\n\toptions: {\n\t\tkey: string;\n\t},\n\toverrideValue: PropValue\n) {\n\tconst transformer = settingsTransformersRegistry.get( 'override' );\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\tconst transformedValue = transformer( value.origin_value.value, options );\n\n\tif ( ! transformedValue ) {\n\t\treturn null;\n\t}\n\n\tconst [ key ] = Object.keys( transformedValue as Record< string, unknown > );\n\n\treturn {\n\t\t[ key ]: overrideValue,\n\t};\n}\n\nfunction isOriginValueOverride( originValue: TransformablePropValue< string > ): boolean {\n\treturn originValue.$$type === 'override';\n}\n","import { createTransformer } from '@elementor/editor-canvas';\n\nimport { type ComponentOverridePropValue } from './types';\n\nexport const componentOverrideTransformer = createTransformer( ( override: ComponentOverridePropValue ) => {\n\tconst { override_key: key, override_value: overrideValue } = override;\n\n\treturn { [ key ]: overrideValue };\n} );\n","import * as React from 'react';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { ArrowLeftIcon, ComponentsFilledIcon } from '@elementor/icons';\nimport { Box, Divider, IconButton, Stack, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { useCurrentComponentId } from '../../store/store';\nimport { ComponentsBadge } from './component-badge';\nimport { useOverridableProps } from './use-overridable-props';\n\nexport const ComponentPanelHeader = () => {\n\tconst currentComponentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\tconst onBack = useNavigateBack();\n\tconst componentName = getComponentName();\n\n\tconst overridesCount = overridableProps ? Object.keys( overridableProps.props ).length : 0;\n\n\tif ( ! currentComponentId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Box>\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"center\"\n\t\t\t\tjustifyContent=\"space-between\"\n\t\t\t\tsx={ { height: 48, pl: 1.5, pr: 2, py: 1 } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t<Tooltip title={ __( 'Back', 'elementor' ) }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onBack } aria-label={ __( 'Back', 'elementor' ) }>\n\t\t\t\t\t\t\t<ArrowLeftIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 }>\n\t\t\t\t\t\t<ComponentsFilledIcon fontSize=\"tiny\" stroke=\"currentColor\" />\n\t\t\t\t\t\t<Typography variant=\"caption\" sx={ { fontWeight: 500 } }>\n\t\t\t\t\t\t\t{ componentName }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t\t<ComponentsBadge overridesCount={ overridesCount } />\n\t\t\t</Stack>\n\t\t\t<Divider />\n\t\t</Box>\n\t);\n};\n\nfunction getComponentName() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentDocument = documentsManager.getCurrent();\n\n\treturn currentDocument?.container?.settings?.get( 'post_title' ) ?? '';\n}\n","import { useCallback } from 'react';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectPath } from '../store/store';\nimport { switchToComponent } from '../utils/switch-to-component';\n\nexport function useNavigateBack() {\n\tconst path = useSelector( selectPath );\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\treturn useCallback( () => {\n\t\tconst { componentId: prevComponentId, instanceId: prevComponentInstanceId } = path.at( -2 ) ?? {};\n\n\t\tif ( prevComponentId && prevComponentInstanceId ) {\n\t\t\tswitchToComponent( prevComponentId, prevComponentInstanceId );\n\n\t\t\treturn;\n\t\t}\n\n\t\tswitchToComponent( documentsManager.getInitialId() );\n\t}, [ path, documentsManager ] );\n}\n","import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport function switchToComponent( componentId: number | string, componentInstanceId?: string | null ) {\n\trunCommand( 'editor/documents/switch', {\n\t\tid: componentId,\n\t\tselector: componentInstanceId ? `[data-id=\"${ componentInstanceId }\"]` : undefined,\n\t\tmode: 'autosave',\n\t\tsetAsInitial: false,\n\t\tshouldScroll: false,\n\t} );\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { ComponentPropListIcon } from '@elementor/icons';\nimport { Badge, Box, keyframes, styled, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const ComponentsBadge = ( { overridesCount }: { overridesCount: number } ) => {\n\tconst prevCount = usePrevious( overridesCount );\n\n\tconst isFirstOverride = prevCount === 0 && overridesCount === 1;\n\n\treturn (\n\t\t<StyledBadge\n\t\t\tcolor=\"primary\"\n\t\t\tkey={ overridesCount }\n\t\t\tinvisible={ overridesCount === 0 }\n\t\t\tanimate={ isFirstOverride }\n\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\tbadgeContent={\n\t\t\t\t<Box sx={ { animation: ! isFirstOverride ? `${ slideUp } 300ms ease-out` : 'none' } }>\n\t\t\t\t\t{ overridesCount }\n\t\t\t\t</Box>\n\t\t\t}\n\t\t>\n\t\t\t<ToggleButton value=\"overrides\" size=\"tiny\" aria-label={ __( 'View overrides', 'elementor' ) }>\n\t\t\t\t<ComponentPropListIcon fontSize=\"tiny\" />\n\t\t\t</ToggleButton>\n\t\t</StyledBadge>\n\t);\n};\n\nconst StyledBadge = styled( Badge, { shouldForwardProp: ( prop ) => prop !== 'animate' } )(\n\t( { theme, animate } ) => ( {\n\t\t'& .MuiBadge-badge': {\n\t\t\tminWidth: theme.spacing( 2 ),\n\t\t\theight: theme.spacing( 2 ),\n\t\t\tminHeight: theme.spacing( 2 ),\n\t\t\tmaxWidth: theme.spacing( 2 ),\n\t\t\tfontSize: theme.typography.caption.fontSize as string,\n\t\t\tanimation: animate ? `${ bounceIn } 300ms ease-out` : 'none',\n\t\t},\n\t} )\n);\n\nfunction usePrevious< T >( value: T ) {\n\tconst ref = useRef< T >( value );\n\tuseEffect( () => {\n\t\tref.current = value;\n\t}, [ value ] );\n\treturn ref.current;\n}\n\nconst bounceIn = keyframes`\n\t0% { transform: scale(0) translate(50%, 50%); opacity: 0; }\n\t70% { transform: scale(1.1) translate(50%, -50%); opacity: 1; }\n\t100% { transform: scale(1) translate(50%, -50%); opacity: 1; }\n`;\n\nconst slideUp = keyframes`\n\tfrom { transform: translateY(100%); opacity: 0; }\n\tto { transform: translateY(0); opacity: 1; }\n`;\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { type ComponentsSlice, selectOverridableProps } from '../../store/store';\nimport { type ComponentId, type OverridableProps } from '../../types';\n\nexport function useOverridableProps( componentId: ComponentId | null ): OverridableProps | undefined {\n\treturn useSelector( ( state: ComponentsSlice ) => {\n\t\tif ( ! componentId ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn selectOverridableProps( state, componentId );\n\t} );\n}\n","import * as React from 'react';\nimport { ThemeProvider } from '@elementor/editor-ui';\n\nimport { ComponentSearch } from './component-search';\nimport { ComponentsList } from './components-list';\nimport { SearchProvider } from './search-provider';\n\nexport const Components = () => {\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<SearchProvider localStorageKey=\"elementor-components-search\">\n\t\t\t\t<ComponentSearch />\n\t\t\t\t<ComponentsList />\n\t\t\t</SearchProvider>\n\t\t</ThemeProvider>\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 { useSearch } from './search-provider';\n\nexport const ComponentSearch = () => {\n\tconst { inputValue, handleChange } = useSearch();\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={ 0.5 } sx={ { width: '100%', px: 2, py: 1.5 } }>\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 { createContext, useContext } from 'react';\nimport { useSearchState, type UseSearchStateResult } from '@elementor/utils';\n\ntype SearchContextType = Pick< UseSearchStateResult, 'handleChange' | 'inputValue' > & {\n\tsearchValue: UseSearchStateResult[ 'debouncedValue' ];\n\tclearSearch: () => void;\n};\n\nconst SearchContext = createContext< SearchContextType | undefined >( undefined );\n\nexport const SearchProvider = ( {\n\tchildren,\n\tlocalStorageKey,\n}: {\n\tchildren: React.ReactNode;\n\tlocalStorageKey: string;\n} ) => {\n\tconst { debouncedValue, handleChange, inputValue } = useSearchState( { localStorageKey } );\n\n\tconst clearSearch = () => {\n\t\thandleChange( '' );\n\t};\n\n\treturn (\n\t\t<SearchContext.Provider value={ { handleChange, clearSearch, searchValue: debouncedValue, inputValue } }>\n\t\t\t{ children }\n\t\t</SearchContext.Provider>\n\t);\n};\n\nexport const useSearch = () => {\n\tconst context = useContext( SearchContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useSearch must be used within a SearchProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { ComponentsIcon, EyeIcon } from '@elementor/icons';\nimport { Box, Divider, Icon, Link, List, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { ComponentItem } from './components-item';\nimport { LoadingComponents } from './loading-components';\nimport { useSearch } from './search-provider';\n\nexport function ComponentsList() {\n\tconst { components, isLoading, searchValue } = useFilteredComponents();\n\n\tif ( isLoading ) {\n\t\treturn <LoadingComponents />;\n\t}\n\tconst isEmpty = ! components || components.length === 0;\n\tif ( isEmpty ) {\n\t\tif ( searchValue.length > 0 ) {\n\t\t\treturn <EmptySearchResult />;\n\t\t}\n\t\treturn <EmptyState />;\n\t}\n\n\treturn (\n\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 1, px: 2 } }>\n\t\t\t{ components.map( ( component ) => (\n\t\t\t\t<ComponentItem key={ component.uid } component={ component } />\n\t\t\t) ) }\n\t\t</List>\n\t);\n}\n\nconst EmptyState = () => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tsx={ { px: 2.5, pt: 10 } }\n\t\t\tgap={ 1.75 }\n\t\t\toverflow=\"hidden\"\n\t\t>\n\t\t\t<Icon fontSize=\"large\">\n\t\t\t\t<EyeIcon fontSize=\"large\" />\n\t\t\t</Icon>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"text.secondary\" fontWeight=\"bold\">\n\t\t\t\t{ __( 'Text that explains that there are no Components yet.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography variant=\"caption\" align=\"center\" color=\"text.secondary\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Once you have Components, this is where you can manage them—rearrange, duplicate, rename and delete irrelevant classes.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<Divider sx={ { width: '100%' } } color=\"text.secondary\" />\n\t\t\t<Typography align=\"left\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t{ __( 'To create a component, first design it, then choose one of three options:', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography\n\t\t\t\talign=\"left\"\n\t\t\t\tvariant=\"caption\"\n\t\t\t\tcolor=\"text.secondary\"\n\t\t\t\tsx={ { display: 'flex', flexDirection: 'column' } }\n\t\t\t>\n\t\t\t\t<span>{ __( '1. Right-click and select Create Component', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '2. Use the component icon in the Structure panel', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '3. Use the component icon in the Edit panel header', 'elementor' ) }</span>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst EmptySearchResult = () => {\n\tconst { searchValue, clearSearch } = useSearch();\n\treturn (\n\t\t<Stack\n\t\t\tcolor={ 'text.secondary' }\n\t\t\tpt={ 5 }\n\t\t\talignItems=\"center\"\n\t\t\tgap={ 1 }\n\t\t\toverflow={ 'hidden' }\n\t\t\tjustifySelf={ 'center' }\n\t\t>\n\t\t\t<ComponentsIcon />\n\t\t\t<Box\n\t\t\t\tsx={ {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t\t{ searchValue && (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>&ldquo;</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span>&rdquo;.</span>\n\t\t\t\t\t</Typography>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t{ __( 'Try something else.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ clearSearch }>\n\t\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t\t</Link>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst useFilteredComponents = () => {\n\tconst { components, isLoading } = useComponents();\n\tconst { searchValue } = useSearch();\n\n\treturn {\n\t\tcomponents: components.filter( ( component ) =>\n\t\t\tcomponent.name.toLowerCase().includes( searchValue.toLowerCase() )\n\t\t),\n\t\tisLoading,\n\t\tsearchValue,\n\t};\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectComponents, selectLoadIsPending } from '../store/store';\n\nexport const useComponents = () => {\n\tconst components = useSelector( selectComponents );\n\tconst isLoading = useSelector( selectLoadIsPending );\n\n\treturn { components, isLoading };\n};\n","import * as React from 'react';\nimport { endDragElementFromPanel, startDragElementFromPanel } from '@elementor/editor-canvas';\nimport { dropElement, type DropElementParams, type V1ElementData } from '@elementor/editor-elements';\nimport { EllipsisWithTooltip, MenuListItem } from '@elementor/editor-ui';\nimport { ComponentsIcon, DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tListItemButton,\n\tListItemIcon,\n\tMenu,\n\tStack,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { archiveComponent } from '../../store/actions/archive-component';\nimport { loadComponentsAssets } from '../../store/actions/load-components-assets';\nimport { type Component } from '../../types';\nimport { getContainerForNewElement } from '../../utils/get-container-for-new-element';\nimport { createComponentModel } from '../create-component-form/utils/replace-element-with-component';\n\ntype ComponentItemProps = {\n\tcomponent: Omit< Component, 'id' > & { id?: number };\n};\n\nexport const ComponentItem = ( { component }: ComponentItemProps ) => {\n\tconst componentModel = createComponentModel( component );\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst handleClick = () => {\n\t\taddComponentToPage( componentModel );\n\t};\n\n\tconst handleDragEnd = () => {\n\t\tloadComponentsAssets( [ componentModel as V1ElementData ] );\n\n\t\tendDragElementFromPanel();\n\t};\n\n\tconst handleArchiveClick = () => {\n\t\tpopupState.close();\n\n\t\tif ( ! component.id ) {\n\t\t\tthrow new Error( 'Component ID is required' );\n\t\t}\n\n\t\tarchiveComponent( component.id );\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<ListItemButton\n\t\t\t\tdraggable\n\t\t\t\tonDragStart={ () => startDragElementFromPanel( componentModel ) }\n\t\t\t\tonDragEnd={ handleDragEnd }\n\t\t\t\tshape=\"rounded\"\n\t\t\t\tsx={ {\n\t\t\t\t\tborder: 'solid 1px',\n\t\t\t\t\tborderColor: 'divider',\n\t\t\t\t\tpy: 0.5,\n\t\t\t\t\tpx: 1,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 1,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Box\n\t\t\t\t\tonClick={ handleClick }\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tgap: 1,\n\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<ListItemIcon size=\"tiny\">\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"tiny\" />\n\t\t\t\t\t</ListItemIcon>\n\t\t\t\t\t<Box display=\"flex\" flex={ 1 } minWidth={ 0 } flexGrow={ 1 }>\n\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\ttitle={ component.name }\n\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\tcolor=\"text.primary\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t\t<IconButton size=\"tiny\" { ...bindTrigger( popupState ) } aria-label=\"More actions\">\n\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</ListItemButton>\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 sx={ { minWidth: '160px' } } onClick={ handleArchiveClick }>\n\t\t\t\t\t{ __( 'Archive', 'elementor' ) }\n\t\t\t\t</MenuListItem>\n\t\t\t</Menu>\n\t\t</Stack>\n\t);\n};\n\nconst addComponentToPage = ( model: DropElementParams[ 'model' ] ) => {\n\tconst { container, options } = getContainerForNewElement();\n\n\tif ( ! container ) {\n\t\tthrow new Error( `Can't find container to drop new component instance at` );\n\t}\n\n\tloadComponentsAssets( [ model as V1ElementData ] );\n\n\tdropElement( {\n\t\tcontainerId: container.id,\n\t\tmodel,\n\t\toptions: { ...options, useHistory: false, scrollIntoView: true },\n\t} );\n};\n","import { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { slice } from '../store';\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import { isDocumentDirty, setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { getComponentDocumentData } from '../../utils/component-document-data';\nimport { getComponentIds } from '../../utils/get-component-ids';\nimport { loadComponentsOverridableProps } from './load-components-overridable-props';\nimport { loadComponentsStyles } from './load-components-styles';\n\nexport async function loadComponentsAssets( elements: V1ElementData[] ) {\n\tconst componentIds = await getComponentIds( elements );\n\n\treturn Promise.all( [\n\t\tupdateDocumentState( componentIds ),\n\t\tloadComponentsOverridableProps( componentIds ),\n\t\tloadComponentsStyles( componentIds ),\n\t] );\n}\n\nasync function updateDocumentState( componentIds: number[] ) {\n\tconst components = ( await Promise.all( componentIds.map( getComponentDocumentData ) ) ).filter(\n\t\t( document ) => !! document\n\t);\n\n\tconst isDrafted = components.some( isDocumentDirty );\n\n\tif ( isDrafted ) {\n\t\tsetDocumentModifiedStatus( true );\n\t}\n}\n","import {\n\ttype BackboneModel,\n\ttype CreateTemplatedElementTypeOptions,\n\tcreateTemplatedElementView,\n\ttype ElementModel,\n\ttype ElementType,\n\ttype ElementView,\n\ttype LegacyWindow,\n} from '@elementor/editor-canvas';\nimport { getCurrentDocument } from '@elementor/editor-documents';\nimport { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\nimport { type ComponentInstancePropValue, type ExtendedWindow } from './types';\nimport { switchToComponent } from './utils/switch-to-component';\nimport { trackComponentEvent } from './utils/tracking';\n\ntype ContextMenuEventData = { location: string; secondaryLocation: string; trigger: string };\n\nexport type ContextMenuAction = {\n\tname: string;\n\ticon: string;\n\ttitle: string | ( () => string );\n\tisEnabled: () => boolean;\n\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => void;\n};\n\ntype ContextMenuGroupConfig = {\n\tdisable: Record< string, string[] >;\n\tadd: Record< string, { index: number; action: ContextMenuAction } >;\n};\n\ntype ContextMenuGroup = {\n\tname: string;\n\tactions: ContextMenuAction[];\n};\n\nexport const TYPE = 'e-component';\n\nconst updateGroups = ( groups: ContextMenuGroup[], config: ContextMenuGroupConfig ): ContextMenuGroup[] => {\n\tconst disableMap = new Map( Object.entries( config.disable ?? {} ) );\n\tconst addMap = new Map( Object.entries( config.add ?? {} ) );\n\n\treturn groups.map( ( group ) => {\n\t\tconst disabledActions = disableMap.get( group.name ) ?? [];\n\t\tconst addConfig = addMap.get( group.name );\n\n\t\t// Update disabled actions\n\t\tconst updatedActions = group.actions.map( ( action ) =>\n\t\t\tdisabledActions.includes( action.name ) ? { ...action, isEnabled: () => false } : action\n\t\t);\n\n\t\t// Insert additional action if needed\n\t\tif ( addConfig ) {\n\t\t\tupdatedActions.splice( addConfig.index, 0, addConfig.action );\n\t\t}\n\n\t\treturn { ...group, actions: updatedActions };\n\t} );\n};\n\nexport function createComponentType(\n\toptions: CreateTemplatedElementTypeOptions & { showLockedByModal?: ( lockedBy: string ) => void }\n): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn options.type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createComponentView( { ...options } );\n\t\t}\n\t};\n}\n\nfunction createComponentView(\n\toptions: CreateTemplatedElementTypeOptions & {\n\t\tshowLockedByModal?: ( lockedBy: string ) => void;\n\t}\n): typeof ElementView {\n\treturn class extends createTemplatedElementView( options ) {\n\t\tlegacyWindow = window as unknown as LegacyWindow & ExtendedWindow;\n\t\teventsManagerConfig = this.legacyWindow.elementorCommon.eventsManager.config;\n\n\t\tisComponentCurrentlyEdited() {\n\t\t\tconst currentDocument = getCurrentDocument();\n\n\t\t\treturn currentDocument?.id === this.getComponentId();\n\t\t}\n\n\t\tafterSettingsResolve( settings: { [ key: string ]: unknown } ) {\n\t\t\tconst componentInstance = settings.component_instance as\n\t\t\t\t| {\n\t\t\t\t\t\toverrides?: Record< string, unknown >;\n\t\t\t\t\t\telements?: unknown[];\n\t\t\t\t }\n\t\t\t\t| undefined;\n\n\t\t\tif ( componentInstance ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection(\n\t\t\t\t\tcomponentInstance.elements\n\t\t\t\t);\n\n\t\t\t\tthis.collection.models.forEach( setInactiveRecursively );\n\n\t\t\t\tsettings.component_instance = '<template data-children-placeholder></template>';\n\t\t\t}\n\n\t\t\treturn settings;\n\t\t}\n\n\t\tgetDomElement() {\n\t\t\t// Component does not have a DOM element, so we return the first child's DOM element.\n\t\t\treturn this.children.findByIndex( 0 )?.getDomElement() ?? this.$el;\n\t\t}\n\n\t\tattachBuffer( collectionView: this, buffer: DocumentFragment ): void {\n\t\t\tconst childrenPlaceholder = collectionView.$el.find( '[data-children-placeholder]' ).get( 0 );\n\n\t\t\tif ( ! childrenPlaceholder ) {\n\t\t\t\tsuper.attachBuffer( collectionView, buffer );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tchildrenPlaceholder.replaceWith( buffer );\n\t\t}\n\n\t\tgetComponentId() {\n\t\t\tconst componentInstance = (\n\t\t\t\tthis.options?.model?.get( 'settings' )?.get( 'component_instance' ) as ComponentInstancePropValue\n\t\t\t )?.value;\n\n\t\t\treturn componentInstance.component_id.value;\n\t\t}\n\n\t\tgetContextMenuGroups() {\n\t\t\tconst filteredGroups = super.getContextMenuGroups().filter( ( group ) => group.name !== 'save' );\n\t\t\tconst componentId = this.getComponentId();\n\t\t\tif ( ! componentId ) {\n\t\t\t\treturn filteredGroups;\n\t\t\t}\n\n\t\t\tconst newGroups = updateGroups(\n\t\t\t\tfilteredGroups as ContextMenuGroup[],\n\t\t\t\tthis._getContextMenuConfig() as unknown as ContextMenuGroupConfig\n\t\t\t);\n\t\t\treturn newGroups;\n\t\t}\n\n\t\t_getContextMenuConfig() {\n\t\t\tconst legacyWindow = this.legacyWindow || ( window as unknown as LegacyWindow & ExtendedWindow );\n\t\t\tconst elementorWithConfig = legacyWindow.elementor as typeof legacyWindow.elementor & {\n\t\t\t\tconfig?: { user?: { is_administrator?: boolean } };\n\t\t\t};\n\t\t\tconst isAdministrator = elementorWithConfig.config?.user?.is_administrator ?? false;\n\n\t\t\tconst addedGroup = {\n\t\t\t\tgeneral: {\n\t\t\t\t\tindex: 1,\n\t\t\t\t\taction: {\n\t\t\t\t\t\tname: 'edit component',\n\t\t\t\t\t\ticon: 'eicon-edit',\n\t\t\t\t\t\ttitle: () => __( 'Edit Component', 'elementor' ),\n\t\t\t\t\t\tisEnabled: () => true,\n\t\t\t\t\t\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => this.editComponent( eventData ),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst disabledGroup = {\n\t\t\t\tclipboard: [ 'pasteStyle', 'resetStyle' ],\n\t\t\t};\n\n\t\t\treturn { add: isAdministrator ? addedGroup : {}, disable: disabledGroup };\n\t\t}\n\n\t\tasync switchDocument() {\n\t\t\t//todo: handle unpublished\n\t\t\tconst { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(\n\t\t\t\tthis.getComponentId() as number\n\t\t\t);\n\n\t\t\tif ( ! isAllowedToSwitchDocument ) {\n\t\t\t\toptions.showLockedByModal?.( lockedBy || '' );\n\t\t\t} else {\n\t\t\t\tswitchToComponent( this.getComponentId(), this.model.get( 'id' ) );\n\t\t\t}\n\t\t}\n\n\t\teditComponent( { trigger, location, secondaryLocation }: ContextMenuEventData ) {\n\t\t\tif ( this.isComponentCurrentlyEdited() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.switchDocument();\n\n\t\t\tconst editorSettings = this.model.get( 'editor_settings' );\n\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'edited',\n\t\t\t\tcomponent_uid: editorSettings?.component_uid,\n\t\t\t\tcomponent_name: editorSettings?.title,\n\t\t\t\tlocation,\n\t\t\t\tsecondary_location: secondaryLocation,\n\t\t\t\ttrigger,\n\t\t\t} );\n\t\t}\n\n\t\thandleDblClick( e: MouseEvent ) {\n\t\t\te.stopPropagation();\n\n\t\t\tconst { triggers, locations, secondaryLocations } = this.eventsManagerConfig;\n\n\t\t\tthis.editComponent( {\n\t\t\t\ttrigger: triggers.doubleClick,\n\t\t\t\tlocation: locations.canvas,\n\t\t\t\tsecondaryLocation: secondaryLocations.canvasElement,\n\t\t\t} );\n\t\t}\n\n\t\tevents() {\n\t\t\treturn {\n\t\t\t\t...super.events(),\n\t\t\t\tdblclick: this.handleDblClick,\n\t\t\t};\n\t\t}\n\n\t\tattributes() {\n\t\t\treturn {\n\t\t\t\t...super.attributes(),\n\t\t\t\t'data-elementor-id': this.getComponentId(),\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction setInactiveRecursively( model: BackboneModel< ElementModel > ) {\n\tconst editSettings = model.get( 'editSettings' );\n\n\tif ( editSettings ) {\n\t\teditSettings.set( 'inactive', true );\n\t}\n\n\tconst elements = model.get( 'elements' );\n\n\tif ( elements ) {\n\t\telements.forEach( ( childModel ) => {\n\t\t\tsetInactiveRecursively( childModel );\n\t\t} );\n\t}\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport { getMixpanel } from '@elementor/mixpanel';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectCreatedThisSession } from '../store/store';\nimport { type ExtendedWindow } from '../types';\n\ntype ComponentEventData = Record< string, unknown > & {\n\taction: 'createClicked' | 'created' | 'createCancelled' | 'instanceAdded' | 'edited';\n};\n\nexport const trackComponentEvent = ( { action, ...data }: ComponentEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.components?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.components[ action ];\n\tdispatchEvent?.( name, data );\n};\n\nexport const onElementDrop = ( _args: unknown, element: V1Element ) => {\n\tif ( ! ( element.model.get( 'widgetType' ) === 'e-component' ) ) {\n\t\treturn;\n\t}\n\n\tconst editorSettings = element.model.get( 'editor_settings' );\n\tconst componentName = editorSettings?.title;\n\tconst componentUID = editorSettings?.component_uid;\n\tconst instanceId = element.id;\n\n\tconst createdThisSession = selectCreatedThisSession( getState() );\n\tconst isSameSessionReuse = componentUID && createdThisSession.includes( componentUID );\n\n\tconst eventsManagerConfig = ( window as unknown as ExtendedWindow ).elementorCommon.eventsManager.config;\n\tconst { locations, secondaryLocations } = eventsManagerConfig;\n\n\ttrackComponentEvent( {\n\t\taction: 'instanceAdded',\n\t\tinstance_id: instanceId,\n\t\tcomponent_uid: componentUID,\n\t\tcomponent_name: componentName,\n\t\tis_same_session_reuse: isSameSessionReuse,\n\t\tlocation: locations.widgetPanel,\n\t\tsecondary_location: secondaryLocations.componentsTab,\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nimport { TYPE } from '../create-component-type';\nimport { type ComponentInstancePropValue } from '../types';\nimport { getComponentDocumentData } from './component-document-data';\n\nexport const getComponentIds = async ( elements: V1ElementData[] ) => {\n\tconst components = elements.map( async ( { widgetType, elType, elements: childElements, settings } ) => {\n\t\tconst ids: number[] = [];\n\n\t\tconst isComponent = [ widgetType, elType ].includes( TYPE );\n\n\t\tif ( isComponent ) {\n\t\t\tconst componentId = ( settings?.component_instance as ComponentInstancePropValue< number > )?.value\n\t\t\t\t?.component_id.value;\n\n\t\t\tconst document = await getComponentDocumentData( componentId );\n\n\t\t\tchildElements = document?.elements;\n\n\t\t\tif ( Boolean( componentId ) ) {\n\t\t\t\tids.push( componentId );\n\t\t\t}\n\t\t}\n\n\t\tif ( !! childElements?.length ) {\n\t\t\tids.push( ...( await getComponentIds( childElements ) ) );\n\t\t}\n\n\t\treturn ids;\n\t} );\n\n\tconst result = ( await Promise.all( components ) ).flat();\n\n\treturn Array.from( new Set( result ) );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { selectIsOverridablePropsLoaded, slice } from '../store';\n\nexport function loadComponentsOverridableProps( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tcomponentIds.forEach( loadComponentOverrides );\n}\n\nasync function loadComponentOverrides( componentId: number ) {\n\tconst isOverridablePropsLoaded = selectIsOverridablePropsLoaded( getState(), componentId );\n\n\tif ( isOverridablePropsLoaded ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = await apiClient.getOverridableProps( componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps,\n\t\t} )\n\t);\n}\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { type ComponentId } from '../../types';\nimport { selectStyles, slice } from '../store';\n\nexport async function loadComponentsStyles( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tconst knownComponents = selectStyles( getState() );\n\tconst unknownComponentIds = componentIds.filter( ( id ) => ! knownComponents[ id ] );\n\n\tif ( ! unknownComponentIds.length ) {\n\t\treturn;\n\t}\n\n\taddComponentStyles( unknownComponentIds );\n}\n\nasync function addComponentStyles( ids: ComponentId[] ) {\n\tconst newComponents = await loadStyles( ids );\n\n\taddStyles( newComponents );\n}\n\nasync function loadStyles( ids: number[] ): Promise< [ number, V1ElementData ][] > {\n\treturn Promise.all( ids.map( async ( id ) => [ id, await apiClient.getComponentConfig( id ) ] ) );\n}\n\nfunction addStyles( data: ( readonly [ ComponentId, V1ElementData ] )[] ) {\n\tconst styles = Object.fromEntries(\n\t\tdata.map( ( [ componentId, componentData ] ) => [ componentId, extractStyles( componentData ) ] )\n\t);\n\n\tdispatch( slice.actions.addStyles( styles ) );\n}\n\nfunction extractStyles( element: V1ElementData ): Array< StyleDefinition > {\n\treturn [ ...Object.values( element.styles ?? {} ), ...( element.elements ?? [] ).flatMap( extractStyles ) ];\n}\n","import {\n\tgetContainer,\n\tgetCurrentDocumentContainer,\n\tgetSelectedElements,\n\ttype V1Element,\n} from '@elementor/editor-elements';\n\nexport const getContainerForNewElement = (): { container: V1Element | null; options?: { at: number } } => {\n\tconst currentDocumentContainer = getCurrentDocumentContainer();\n\tconst selectedElement = getSelectedElementContainer();\n\n\tlet container, options;\n\n\tif ( selectedElement ) {\n\t\tswitch ( selectedElement.model.get( 'elType' ) ) {\n\t\t\tcase 'widget': {\n\t\t\t\tcontainer = selectedElement?.parent;\n\n\t\t\t\tconst selectedElIndex = selectedElement.view?._index ?? -1;\n\n\t\t\t\tif ( selectedElIndex > -1 ) {\n\t\t\t\t\toptions = { at: selectedElIndex + 1 };\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'section': {\n\t\t\t\tcontainer = selectedElement?.children?.[ 0 ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tcontainer = selectedElement;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { container: container ?? currentDocumentContainer, options };\n};\n\nfunction getSelectedElementContainer() {\n\tconst selectedElements = getSelectedElements();\n\n\tif ( selectedElements.length !== 1 ) {\n\t\treturn undefined;\n\t}\n\n\treturn getContainer( selectedElements[ 0 ].id );\n}\n","import { replaceElement, type V1ElementData, type V1ElementModelProps } from '@elementor/editor-elements';\n\nimport { type OverridableProps } from '../../../types';\n\ntype ComponentInstanceParams = {\n\tid?: number;\n\tname: string;\n\tuid: string;\n\toverridableProps?: OverridableProps;\n};\n\nexport const replaceElementWithComponent = ( element: V1ElementData, component: ComponentInstanceParams ) => {\n\treplaceElement( {\n\t\tcurrentElement: element,\n\t\tnewElement: createComponentModel( component ),\n\t\twithHistory: false,\n\t} );\n};\n\nexport const createComponentModel = ( component: ComponentInstanceParams ): Omit< V1ElementModelProps, 'id' > => {\n\treturn {\n\t\telType: 'widget',\n\t\twidgetType: 'e-component',\n\t\tsettings: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: {\n\t\t\t\t\t\t$$type: 'number',\n\t\t\t\t\t\tvalue: component.id ?? component.uid,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\toverridable_props: component.overridableProps,\n\t\t},\n\t\teditor_settings: {\n\t\t\ttitle: component.name,\n\t\t\tcomponent_uid: component.uid,\n\t\t},\n\t};\n};\n","import * as React from 'react';\nimport { Box, ListItemButton, Skeleton, Stack } from '@elementor/ui';\nconst ROWS_COUNT = 6;\n\nconst rows = Array.from( { length: ROWS_COUNT }, ( _, index ) => index );\n\nexport const LoadingComponents = () => {\n\treturn (\n\t\t<Stack\n\t\t\taria-label=\"Loading components\"\n\t\t\tgap={ 1 }\n\t\t\tsx={ {\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tposition: 'relative',\n\t\t\t\tmaxHeight: '300px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t'&:after': {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tcontent: '\"\"',\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '300px',\n\t\t\t\t\tbackground: 'linear-gradient(to top, white, transparent)',\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ rows.map( ( row ) => (\n\t\t\t\t<ListItemButton\n\t\t\t\t\tkey={ row }\n\t\t\t\t\tsx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t>\n\t\t\t\t\t<Box display=\"flex\" gap={ 1 } width=\"100%\">\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '24px' } height={ '36px' } />\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '100%' } height={ '36px' } />\n\t\t\t\t\t</Box>\n\t\t\t\t</ListItemButton>\n\t\t\t) ) }\n\t\t</Stack>\n\t);\n};\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n","import * as React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getElementLabel, type V1ElementData } from '@elementor/editor-elements';\nimport { Form as FormElement, ThemeProvider } from '@elementor/editor-ui';\nimport { StarIcon } from '@elementor/icons';\nimport { Alert, Button, FormLabel, Grid, Popover, Snackbar, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { createUnpublishedComponent } from '../../store/actions/create-unpublished-component';\nimport { type ComponentFormValues } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { useForm } from './hooks/use-form';\nimport { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';\nimport {\n\ttype ComponentEventData,\n\ttype ContextMenuEventOptions,\n\tgetComponentEventData,\n} from './utils/get-component-event-data';\n\ntype SaveAsComponentEventData = {\n\telement: V1ElementData;\n\tanchorPosition: { top: number; left: number };\n\toptions?: ContextMenuEventOptions;\n};\n\ntype ResultNotification = {\n\tshow: boolean;\n\tmessage: string;\n\ttype: 'success' | 'error';\n};\n\nexport function CreateComponentForm() {\n\tconst [ element, setElement ] = useState< {\n\t\telement: V1ElementData;\n\t\telementLabel: string;\n\t} | null >( null );\n\n\tconst [ anchorPosition, setAnchorPosition ] = useState< { top: number; left: number } >();\n\n\tconst [ resultNotification, setResultNotification ] = useState< ResultNotification | null >( null );\n\n\tconst eventData = useRef< ComponentEventData | null >( null );\n\n\tuseEffect( () => {\n\t\tconst OPEN_SAVE_AS_COMPONENT_FORM_EVENT = 'elementor/editor/open-save-as-component-form';\n\n\t\tconst openPopup = ( event: CustomEvent< SaveAsComponentEventData > ) => {\n\t\t\tsetElement( { element: event.detail.element, elementLabel: getElementLabel( event.detail.element.id ) } );\n\t\t\tsetAnchorPosition( event.detail.anchorPosition );\n\n\t\t\teventData.current = getComponentEventData( event.detail.element, event.detail.options );\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'createClicked',\n\t\t\t\t...eventData.current,\n\t\t\t} );\n\t\t};\n\n\t\twindow.addEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\t\t};\n\t}, [] );\n\n\tconst handleSave = ( values: ComponentFormValues ) => {\n\t\ttry {\n\t\t\tif ( ! element ) {\n\t\t\t\tthrow new Error( `Can't save element as component: element not found` );\n\t\t\t}\n\n\t\t\tconst uid = createUnpublishedComponent( values.componentName, element.element, eventData.current );\n\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\t// Translators: %1$s: Component name, %2$s: Component UID\n\t\t\t\tmessage: __( 'Component saved successfully as: %1$s (UID: %2$s)', 'elementor' )\n\t\t\t\t\t.replace( '%1$s', values.componentName )\n\t\t\t\t\t.replace( '%2$s', uid ),\n\t\t\t\ttype: 'success',\n\t\t\t} );\n\n\t\t\tresetAndClosePopup();\n\t\t} catch {\n\t\t\tconst errorMessage = __( 'Failed to save component. Please try again.', 'elementor' );\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t\ttype: 'error',\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst resetAndClosePopup = () => {\n\t\tsetElement( null );\n\t\tsetAnchorPosition( undefined );\n\t};\n\n\tconst cancelSave = () => {\n\t\tresetAndClosePopup();\n\n\t\ttrackComponentEvent( {\n\t\t\taction: 'createCancelled',\n\t\t\t...eventData.current,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Popover\n\t\t\t\topen={ element !== null }\n\t\t\t\tonClose={ cancelSave }\n\t\t\t\tanchorReference=\"anchorPosition\"\n\t\t\t\tanchorPosition={ anchorPosition }\n\t\t\t>\n\t\t\t\t{ element !== null && (\n\t\t\t\t\t<Form\n\t\t\t\t\t\tinitialValues={ { componentName: element.elementLabel } }\n\t\t\t\t\t\thandleSave={ handleSave }\n\t\t\t\t\t\tclosePopup={ cancelSave }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</Popover>\n\t\t\t<Snackbar open={ resultNotification?.show } onClose={ () => setResultNotification( null ) }>\n\t\t\t\t<Alert\n\t\t\t\t\tonClose={ () => setResultNotification( null ) }\n\t\t\t\t\tseverity={ resultNotification?.type }\n\t\t\t\t\tsx={ { width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t{ resultNotification?.message }\n\t\t\t\t</Alert>\n\t\t\t</Snackbar>\n\t\t</ThemeProvider>\n\t);\n}\n\nconst FONT_SIZE = 'tiny';\n\nconst Form = ( {\n\tinitialValues,\n\thandleSave,\n\tclosePopup,\n}: {\n\tinitialValues: ComponentFormValues;\n\thandleSave: ( values: ComponentFormValues ) => void;\n\tclosePopup: () => void;\n} ) => {\n\tconst { values, errors, isValid, handleChange, validateForm } = useForm< ComponentFormValues >( initialValues );\n\n\tconst { components } = useComponents();\n\n\tconst existingComponentNames = useMemo( () => {\n\t\treturn components?.map( ( component ) => component.name ) ?? [];\n\t}, [ components ] );\n\n\tconst changeValidationSchema = useMemo(\n\t\t() => createBaseComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\tconst submitValidationSchema = useMemo(\n\t\t() => createSubmitComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\n\tconst handleSubmit = () => {\n\t\tconst { success, parsedValues } = validateForm( submitValidationSchema );\n\n\t\tif ( success ) {\n\t\t\thandleSave( parsedValues );\n\t\t}\n\t};\n\n\tconst texts = {\n\t\theading: __( 'Save as a component', 'elementor' ),\n\t\tname: __( 'Name', 'elementor' ),\n\t\tcancel: __( 'Cancel', 'elementor' ),\n\t\tcreate: __( 'Create', 'elementor' ),\n\t};\n\n\tconst nameInputId = 'component-name';\n\n\treturn (\n\t\t<FormElement onSubmit={ handleSubmit }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t<StarIcon fontSize={ FONT_SIZE } />\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ texts.heading }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" p={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel htmlFor={ nameInputId } size=\"tiny\">\n\t\t\t\t\t\t\t{ texts.name }\n\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tid={ nameInputId }\n\t\t\t\t\t\t\tsize={ FONT_SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ values.componentName }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\t\thandleChange( e, 'componentName', changeValidationSchema )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinputProps={ { style: { color: 'text.primary', fontWeight: '600' } } }\n\t\t\t\t\t\t\terror={ Boolean( errors.componentName ) }\n\t\t\t\t\t\t\thelperText={ errors.componentName }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button onClick={ closePopup } color=\"secondary\" variant=\"text\" size=\"small\">\n\t\t\t\t\t\t{ texts.cancel }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! isValid } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ texts.create }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</FormElement>\n\t);\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { type ComponentEventData } from '../../components/create-component-form/utils/get-component-event-data';\nimport { replaceElementWithComponent } from '../../components/create-component-form/utils/replace-element-with-component';\nimport { type OverridableProps } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { slice } from '../store';\n\nexport function createUnpublishedComponent(\n\tname: string,\n\telement: V1ElementData,\n\teventData: ComponentEventData | null,\n\toverridableProps?: OverridableProps,\n\tuid?: string | null\n) {\n\tconst generatedUid = uid ?? generateUniqueId( 'component' );\n\tconst componentBase = { uid: generatedUid, name, overridableProps };\n\n\tdispatch(\n\t\tslice.actions.addUnpublished( {\n\t\t\t...componentBase,\n\t\t\telements: [ element ],\n\t\t} )\n\t);\n\n\tdispatch( slice.actions.addCreatedThisSession( generatedUid ) );\n\n\treplaceElementWithComponent( element, componentBase );\n\n\ttrackComponentEvent( {\n\t\taction: 'created',\n\t\tcomponent_uid: generatedUid,\n\t\tcomponent_name: name,\n\t\t...eventData,\n\t} );\n\n\trunCommand( 'document/save/auto' );\n\n\treturn generatedUid;\n}\n","import { useMemo, useState } from 'react';\nimport { type z } from '@elementor/schema';\n\nexport const useForm = < TValues extends Record< string, unknown > >( initialValues: TValues ) => {\n\tconst [ values, setValues ] = useState< TValues >( initialValues );\n\tconst [ errors, setErrors ] = useState< Partial< Record< keyof TValues, string > > >( {} );\n\n\tconst isValid = useMemo( () => {\n\t\treturn ! Object.values( errors ).some( ( error ) => error );\n\t}, [ errors ] );\n\n\tconst handleChange = (\n\t\te: React.ChangeEvent< HTMLInputElement >,\n\t\tfield: keyof TValues,\n\t\tvalidationSchema: z.ZodType< TValues >\n\t) => {\n\t\tconst updated = { ...values, [ field ]: e.target.value };\n\t\tsetValues( updated );\n\n\t\tconst { success, errors: validationErrors } = validateForm( updated, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t} else {\n\t\t\tsetErrors( {} );\n\t\t}\n\t};\n\n\tconst validate = (\n\t\tvalidationSchema: z.ZodType< TValues >\n\t): { success: true; parsedValues: TValues } | { success: false; parsedValues?: never } => {\n\t\tconst { success, errors: validationErrors, parsedValues } = validateForm( values, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t\treturn { success };\n\t\t}\n\t\tsetErrors( {} );\n\t\treturn { success, parsedValues };\n\t};\n\n\treturn {\n\t\tvalues,\n\t\terrors,\n\t\tisValid,\n\t\thandleChange,\n\t\tvalidateForm: validate,\n\t};\n};\n\nconst validateForm = < TValues extends Record< string, unknown > >(\n\tvalues: TValues,\n\tschema: z.ZodType< TValues >\n):\n\t| { success: false; parsedValues?: never; errors: Partial< Record< keyof TValues, string > > }\n\t| { success: true; parsedValues: TValues; errors?: never } => {\n\tconst result = schema.safeParse( values );\n\n\tif ( result.success ) {\n\t\treturn { success: true, parsedValues: result.data };\n\t}\n\n\tconst errors = {} as Partial< Record< keyof TValues, string > >;\n\n\t( Object.entries( result.error.formErrors.fieldErrors ) as Array< [ keyof TValues, string[] ] > ).forEach(\n\t\t( [ field, error ] ) => {\n\t\t\terrors[ field ] = error[ 0 ];\n\t\t}\n\t);\n\n\treturn { success: false, errors };\n};\n","import { z } from '@elementor/schema';\nimport { __ } from '@wordpress/i18n';\n\nconst MIN_NAME_LENGTH = 2;\nconst MAX_NAME_LENGTH = 50;\n\nexport const createBaseComponentSchema = ( existingNames: string[] ) => {\n\treturn z.object( {\n\t\tcomponentName: z\n\t\t\t.string()\n\t\t\t.trim()\n\t\t\t.max(\n\t\t\t\tMAX_NAME_LENGTH,\n\t\t\t\t__( 'Component name is too long. Please keep it under 50 characters.', 'elementor' )\n\t\t\t)\n\t\t\t.refine( ( value ) => ! existingNames.includes( value ), {\n\t\t\t\tmessage: __( 'Component name already exists', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n\nexport const createSubmitComponentSchema = ( existingNames: string[] ) => {\n\tconst baseSchema = createBaseComponentSchema( existingNames );\n\n\treturn baseSchema.extend( {\n\t\tcomponentName: baseSchema.shape.componentName\n\t\t\t.refine( ( value ) => value.length > 0, {\n\t\t\t\tmessage: __( 'Component name is required.', 'elementor' ),\n\t\t\t} )\n\t\t\t.refine( ( value ) => value.length >= MIN_NAME_LENGTH, {\n\t\t\t\tmessage: __( 'Component name is too short. Please enter at least 2 characters.', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nexport type ComponentEventData = {\n\tnested_elements_count: number;\n\tnested_components_count: number;\n\ttop_element_type: string;\n\tlocation?: string;\n\tsecondary_location?: string;\n\ttrigger?: string;\n};\n\nexport type ContextMenuEventOptions = Record< string, unknown > & {\n\tlocation: string;\n\tsecondaryLocation: string;\n\ttrigger: string;\n};\n\nexport const getComponentEventData = (\n\tcontainerElement: V1ElementData,\n\toptions?: ContextMenuEventOptions\n): ComponentEventData => {\n\tconst { elementsCount, componentsCount } = countNestedElements( containerElement );\n\n\treturn {\n\t\tnested_elements_count: elementsCount,\n\t\tnested_components_count: componentsCount,\n\t\ttop_element_type: containerElement.elType,\n\t\tlocation: options?.location,\n\t\tsecondary_location: options?.secondaryLocation,\n\t\ttrigger: options?.trigger,\n\t};\n};\n\nfunction countNestedElements( container: V1ElementData ): { elementsCount: number; componentsCount: number } {\n\tif ( ! container.elements || container.elements.length === 0 ) {\n\t\treturn { elementsCount: 0, componentsCount: 0 };\n\t}\n\n\tlet elementsCount = container.elements.length;\n\tlet componentsCount = 0;\n\n\tfor ( const element of container.elements ) {\n\t\tif ( element.widgetType === 'e-component' ) {\n\t\t\tcomponentsCount++;\n\t\t}\n\n\t\tconst { elementsCount: nestedElementsCount, componentsCount: nestedComponentsCount } =\n\t\t\tcountNestedElements( element );\n\t\telementsCount += nestedElementsCount;\n\t\tcomponentsCount += nestedComponentsCount;\n\t}\n\n\treturn { elementsCount, componentsCount };\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { getV1DocumentsManager, type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { __useSelector as useSelector } from '@elementor/store';\nimport { throttle } from '@elementor/utils';\n\nimport { apiClient } from '../../api';\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { updateCurrentComponent } from '../../store/actions/update-current-component';\nimport { type ComponentsPathItem, selectPath, useCurrentComponentId } from '../../store/store';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { ComponentModal } from './component-modal';\n\nexport function EditComponent() {\n\tconst currentComponentId = useCurrentComponentId();\n\n\tuseHandleDocumentSwitches();\n\n\tconst navigateBack = useNavigateBack();\n\n\tconst onClose = throttle( navigateBack, 100 );\n\n\tconst elementDom = getComponentDOMElement( currentComponentId ?? undefined );\n\n\tif ( ! elementDom ) {\n\t\treturn null;\n\t}\n\n\treturn <ComponentModal element={ elementDom } onClose={ onClose } />;\n}\n\nfunction useHandleDocumentSwitches() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentComponentId = useCurrentComponentId();\n\tconst path = useSelector( selectPath );\n\n\tuseEffect( () => {\n\t\treturn listenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\t\tconst nextDocument = documentsManager.getCurrent();\n\n\t\t\tif ( nextDocument.id === currentComponentId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( currentComponentId ) {\n\t\t\t\tapiClient.unlockComponent( currentComponentId );\n\t\t\t}\n\n\t\t\tconst isComponent = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;\n\n\t\t\tif ( ! isComponent ) {\n\t\t\t\tupdateCurrentComponent( { path: [], currentComponentId: null } );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateCurrentComponent( {\n\t\t\t\tpath: getUpdatedComponentPath( path, nextDocument ),\n\t\t\t\tcurrentComponentId: nextDocument.id,\n\t\t\t} );\n\t\t} );\n\t}, [ path, documentsManager, currentComponentId ] );\n}\n\nfunction getUpdatedComponentPath( path: ComponentsPathItem[], nextDocument: V1Document ): ComponentsPathItem[] {\n\tconst componentIndex = path.findIndex( ( { componentId } ) => componentId === nextDocument.id );\n\n\tif ( componentIndex >= 0 ) {\n\t\t// When exiting the editing of a nested component - we in fact go back a step\n\t\t// so we need to make sure the path is cleaned up of any newer items\n\t\t// By doing it with the slice and not a simple pop() - we could jump to any component in the path and make sure it becomes the current one\n\t\treturn path.slice( 0, componentIndex + 1 );\n\t}\n\n\treturn [\n\t\t...path,\n\t\t{\n\t\t\tinstanceId: nextDocument?.container.view?.el?.dataset.id,\n\t\t\tcomponentId: nextDocument.id,\n\t\t},\n\t];\n}\n\nfunction getComponentDOMElement( id: V1Document[ 'id' ] | undefined ) {\n\tif ( ! id ) {\n\t\treturn null;\n\t}\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\tconst currentComponent = documentsManager.get( id );\n\n\tconst widget = currentComponent?.container as V1Element;\n\tconst container = ( widget?.view?.el?.children?.[ 0 ] ?? null ) as HTMLElement | null;\n\tconst elementDom = container?.children[ 0 ] as HTMLElement | null;\n\n\treturn elementDom ?? null;\n}\n","import { setDocumentModifiedStatus, type V1Document } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { type ComponentsPathItem, slice } from '../store';\n\nexport function updateCurrentComponent( {\n\tpath,\n\tcurrentComponentId,\n}: {\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n} ) {\n\tconst dispatch = getStore()?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.setPath( path ) );\n\tdispatch( slice.actions.setCurrentComponentId( currentComponentId ) );\n}\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import * as React from 'react';\nimport { type CSSProperties, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCanvasDocument } from '../../hooks/use-canvas-document';\nimport { useElementRect } from '../../hooks/use-element-rect';\n\ntype ModalProps = {\n\telement: HTMLElement;\n\tonClose: () => void;\n};\n\nexport function ComponentModal( { element, onClose }: ModalProps ) {\n\tconst canvasDocument = useCanvasDocument();\n\n\tuseEffect( () => {\n\t\tconst handleEsc = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tcanvasDocument?.body.addEventListener( 'keydown', handleEsc );\n\n\t\treturn () => {\n\t\t\tcanvasDocument?.body.removeEventListener( 'keydown', handleEsc );\n\t\t};\n\t}, [ canvasDocument, onClose ] );\n\n\tif ( ! canvasDocument?.body ) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<>\n\t\t\t<BlockEditPage />\n\t\t\t<Backdrop canvas={ canvasDocument } element={ element } onClose={ onClose } />\n\t\t</>,\n\t\tcanvasDocument.body\n\t);\n}\n\nfunction Backdrop( { canvas, element, onClose }: { canvas: HTMLDocument; element: HTMLElement; onClose: () => void } ) {\n\tconst rect = useElementRect( element );\n\tconst backdropStyle: CSSProperties = {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\twidth: '100vw',\n\t\theight: '100vh',\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\t\tzIndex: 999,\n\t\tpointerEvents: 'painted',\n\t\tcursor: 'pointer',\n\t\tclipPath: getRoundedRectPath( rect, canvas.defaultView as Window, 5 ),\n\t};\n\n\tconst handleKeyDown = ( event: React.KeyboardEvent ) => {\n\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\tevent.preventDefault();\n\t\t\tonClose();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tstyle={ backdropStyle }\n\t\t\tonClick={ onClose }\n\t\t\tonKeyDown={ handleKeyDown }\n\t\t\trole=\"button\"\n\t\t\ttabIndex={ 0 }\n\t\t\taria-label={ __( 'Exit component editing mode', 'elementor' ) }\n\t\t/>\n\t);\n}\n\nfunction getRoundedRectPath( rect: DOMRect, viewport: Window, borderRadius: number ) {\n\tconst padding = borderRadius / 2;\n\tconst { x: originalX, y: originalY, width: originalWidth, height: originalHeight } = rect;\n\tconst x = originalX - padding;\n\tconst y = originalY - padding;\n\tconst width = originalWidth + 2 * padding;\n\tconst height = originalHeight + 2 * padding;\n\tconst radius = Math.min( borderRadius, width / 2, height / 2 );\n\n\tconst { innerWidth: vw, innerHeight: vh } = viewport;\n\n\tconst path = `path(evenodd, 'M 0 0 \n\t\tL ${ vw } 0\n\t\tL ${ vw } ${ vh }\n\t\tL 0 ${ vh }\n\t\tZ\n\t\tM ${ x + radius } ${ y }\n\t\tL ${ x + width - radius } ${ y }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width } ${ y + radius }\n\t\tL ${ x + width } ${ y + height - radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width - radius } ${ y + height }\n\t\tL ${ x + radius } ${ y + height }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x } ${ y + height - radius }\n\t\tL ${ x } ${ y + radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + radius } ${ y }\n \tZ'\n\t)`;\n\n\treturn path.replace( /\\s{2,}/g, ' ' );\n}\n\n/**\n * when switching to another document id, we get a document handler when hovering\n * this functionality originates in Pro, and is intended for editing templates, e.g. header/footer\n * in components we don't want that, so the easy way out is to prevent it of being displayed via a CSS rule\n */\nfunction BlockEditPage() {\n\tconst blockV3DocumentHandlesStyles = `\n\t.elementor-editor-active {\n\t\t& .elementor-section-wrap.ui-sortable {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\t& *[data-editable-elementor-document]:not(.elementor-edit-mode):hover {\n\t\t\t& .elementor-document-handle:not(.elementor-document-save-back-handle) {\n\t\t\t\tdisplay: none;\n\n\t\t\t\t&::before,\n\t\t\t\t& .elementor-document-handle__inner {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t`;\n\n\treturn <style data-e-style-id=\"e-block-v3-document-handles-styles\">{ blockV3DocumentHandlesStyles }</style>;\n}\n","import { getCanvasIframeDocument } from '@elementor/editor-canvas';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\n\nexport function useCanvasDocument() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument() );\n}\n","import { useEffect, useState } from 'react';\nimport { throttle } from '@elementor/utils';\n\nexport function useElementRect( element: HTMLElement | null ) {\n\tconst [ rect, setRect ] = useState< DOMRect >( new DOMRect( 0, 0, 0, 0 ) );\n\n\tconst onChange = throttle(\n\t\t() => {\n\t\t\tsetRect( element?.getBoundingClientRect() ?? new DOMRect( 0, 0, 0, 0 ) );\n\t\t},\n\t\t20,\n\t\ttrue\n\t);\n\n\tuseScrollListener( { element, onChange } );\n\tuseResizeListener( { element, onChange } );\n\tuseMutationsListener( { element, onChange } );\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tonChange.cancel();\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\treturn rect;\n}\n\ntype ListenerProps = {\n\telement: HTMLElement | null;\n\tonChange: () => void;\n};\n\nfunction useScrollListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'scroll', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\twin?.removeEventListener( 'scroll', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useResizeListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeObserver = new ResizeObserver( onChange );\n\t\tresizeObserver.observe( element );\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'resize', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\twin?.removeEventListener( 'resize', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useMutationsListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mutationObserver = new MutationObserver( onChange );\n\t\tmutationObserver.observe( element, { childList: true, subtree: true } );\n\n\t\treturn () => {\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, [ element, onChange ] );\n}\n","import * as React from 'react';\nimport { closeDialog, openDialog } from '@elementor/editor-ui';\nimport { InfoCircleFilledIcon } from '@elementor/icons';\nimport { Box, Button, DialogActions, DialogContent, DialogHeader, Icon, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const openEditModeDialog = ( lockedBy: string ) => {\n\topenDialog( {\n\t\tcomponent: <EditModeDialog lockedBy={ lockedBy } />,\n\t} );\n};\n\nconst EditModeDialog = ( { lockedBy }: { lockedBy: string } ) => {\n\t/* translators: %s is the name of the user who is currently editing the document */\n\tconst content = __( '%s is currently editing this document', 'elementor' ).replace( '%s', lockedBy );\n\treturn (\n\t\t<>\n\t\t\t<DialogHeader logo={ false }>\n\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t\t<Icon color=\"secondary\">\n\t\t\t\t\t\t<InfoCircleFilledIcon fontSize=\"medium\" />\n\t\t\t\t\t</Icon>\n\t\t\t\t\t<Typography variant=\"subtitle1\">{ content }</Typography>\n\t\t\t\t</Box>\n\t\t\t</DialogHeader>\n\t\t\t<DialogContent>\n\t\t\t\t<Stack spacing={ 2 } direction=\"column\">\n\t\t\t\t\t<Typography variant=\"body2\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'You can wait for them to finish or reach out to coordinate your changes together.',\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<DialogActions>\n\t\t\t\t\t\t<Button color=\"secondary\" variant=\"contained\" onClick={ closeDialog }>\n\t\t\t\t\t\t\t{ __( 'Close', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</DialogActions>\n\t\t\t\t</Stack>\n\t\t\t</DialogContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { useElementSetting, useSelectedElement } from '@elementor/editor-elements';\nimport { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { type NumberPropValue } from '@elementor/editor-props';\nimport { ComponentsIcon, PencilIcon } from '@elementor/icons';\nimport { __getState as getState } from '@elementor/store';\nimport { IconButton, Stack, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstancePropTypeUtil } from '../../prop-types/component-instance-prop-type';\nimport { selectComponent, selectOverridableProps } from '../../store/store';\nimport { type OverridablePropsGroup } from '../../types';\nimport { switchToComponent } from '../../utils/switch-to-component';\nimport { EmptyState } from './empty-state';\nimport { OverridePropsGroup } from './override-props-group';\n\nexport function InstanceEditingPanel() {\n\tconst { element } = useElement();\n\tconst settings = useElementSetting( element.id, 'component_instance' );\n\tconst componentId = ( componentInstancePropTypeUtil.extract( settings )?.component_id as NumberPropValue ).value;\n\n\tconst component = componentId ? selectComponent( getState(), componentId ) : null;\n\tconst overridableProps = componentId ? selectOverridableProps( getState(), componentId ) : null;\n\n\tconst componentInstanceId = useSelectedElement()?.element?.id ?? null;\n\n\tif ( ! componentId || ! overridableProps || ! component ) {\n\t\treturn null;\n\t}\n\n\t/* translators: %s: component name. */\n\tconst panelTitle = __( 'Edit %s', 'elementor' ).replace( '%s', component.name );\n\n\tconst handleEditComponent = () => switchToComponent( componentId, componentInstanceId );\n\n\tconst groups = overridableProps.groups.order\n\t\t.map( ( groupId ) =>\n\t\t\toverridableProps.groups.items[ groupId ] ? overridableProps.groups.items[ groupId ] : null\n\t\t)\n\t\t.filter( Boolean ) as OverridablePropsGroup[];\n\n\tconst isEmpty = groups.length === 0 || Object.keys( overridableProps.props ).length === 0;\n\n\treturn (\n\t\t<>\n\t\t\t<PanelHeader sx={ { justifyContent: 'start', px: 2 } }>\n\t\t\t\t<Stack direction=\"row\" alignContent=\"space-between\" flexGrow={ 1 }>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"start\" gap={ 1 } flexGrow={ 1 }>\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"small\" sx={ { color: 'text.tertiary' } } />\n\t\t\t\t\t\t<PanelHeaderTitle>{ component.name }</PanelHeaderTitle>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Tooltip title={ panelTitle }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ handleEditComponent } aria-label={ panelTitle }>\n\t\t\t\t\t\t\t<PencilIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</Stack>\n\t\t\t</PanelHeader>\n\t\t\t<PanelBody>\n\t\t\t\t{ isEmpty ? (\n\t\t\t\t\t<EmptyState onEditComponent={ handleEditComponent } />\n\t\t\t\t) : (\n\t\t\t\t\t<Stack direction=\"column\" alignItems=\"stretch\">\n\t\t\t\t\t\t{ groups.map( ( group ) => (\n\t\t\t\t\t\t\t<OverridePropsGroup key={ group.id } group={ group } props={ overridableProps.props } />\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</Stack>\n\t\t\t\t) }\n\t\t\t</PanelBody>\n\t\t</>\n\t);\n}\n","import { createPropUtils, numberPropTypeUtil } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridesPropTypeUtil } from './component-instance-overrides-prop-type';\n\nexport const componentInstancePropTypeUtil = createPropUtils(\n\t'component-instance',\n\tz.object( {\n\t\tcomponent_id: numberPropTypeUtil.schema,\n\t\toverrides: z.optional( componentInstanceOverridesPropTypeUtil.schema ),\n\t} )\n);\n\nexport type ComponentInstancePropValue = z.infer< typeof componentInstancePropTypeUtil.schema >[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridePropTypeUtil } from './component-instance-override-prop-type';\n\nexport const componentInstanceOverridesPropTypeUtil = createPropUtils(\n\t'overrides',\n\tz.array( componentInstanceOverridePropTypeUtil.schema ).optional().default( [] )\n);\n\nexport type ComponentInstanceOverridesPropValue = z.infer<\n\ttypeof componentInstanceOverridesPropTypeUtil.schema\n>[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentInstanceOverridePropTypeUtil = createPropUtils(\n\t'override',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\toverride_value: z.unknown(),\n\t\tschema_source: z.object( {\n\t\t\ttype: z.literal( 'component' ),\n\t\t\tid: z.number(),\n\t\t} ),\n\t} )\n);\n\nexport type ComponentInstanceOverridePropValue = z.infer<\n\ttypeof componentInstanceOverridePropTypeUtil.schema\n>[ 'value' ];\n","import * as React from 'react';\nimport { ComponentPropListIcon, PencilIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onEditComponent }: { onEditComponent: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"start\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5, mt: 1 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<ComponentPropListIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'No properties yet', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Edit the component to add properties, manage them or update the design across all instances.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onEditComponent }>\n\t\t\t\t<PencilIcon fontSize=\"small\" />\n\t\t\t\t{ __( 'Edit component', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useId } from 'react';\nimport { useStateByElement } from '@elementor/editor-editing-panel';\nimport { CollapseIcon } from '@elementor/editor-ui';\nimport { Collapse, ListItemButton, ListItemText, Stack } from '@elementor/ui';\n\nimport { type OverridableProp, type OverridablePropsGroup } from '../../types';\n\ntype Props = {\n\tgroup: OverridablePropsGroup;\n\tprops: Record< string, OverridableProp >;\n};\n\nexport function OverridePropsGroup( { group, props }: Props ) {\n\tconst [ isOpen, setIsOpen ] = useStateByElement( group.id, true );\n\n\tconst handleClick = () => {\n\t\tsetIsOpen( ! isOpen );\n\t};\n\n\tconst id = useId();\n\tconst labelId = `label-${ id }`;\n\tconst contentId = `content-${ id }`;\n\n\tconst title = group.label;\n\n\treturn (\n\t\t<>\n\t\t\t<ListItemButton\n\t\t\t\tid={ labelId }\n\t\t\t\taria-controls={ contentId }\n\t\t\t\taria-label={ `${ title } section` }\n\t\t\t\tonClick={ handleClick }\n\t\t\t\tp={ 0 }\n\t\t\t\tsx={ { '&:hover': { backgroundColor: 'transparent' } } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyItems=\"start\" flexGrow={ 1 } gap={ 0.5 }>\n\t\t\t\t\t<ListItemText\n\t\t\t\t\t\tsecondary={ title }\n\t\t\t\t\t\tsecondaryTypographyProps={ { color: 'text.primary', variant: 'caption', fontWeight: 'bold' } }\n\t\t\t\t\t\tsx={ { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 } }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t<CollapseIcon open={ isOpen } color=\"secondary\" fontSize=\"tiny\" />\n\t\t\t</ListItemButton>\n\t\t\t<Collapse id={ contentId } aria-labelledby={ labelId } in={ isOpen } timeout=\"auto\">\n\t\t\t\t<Stack direction=\"column\" gap={ 1 } p={ 2 }>\n\t\t\t\t\t{ group.props.map( ( propId ) => (\n\t\t\t\t\t\t// TODO: Render actual controls\n\t\t\t\t\t\t<pre key={ propId }>{ JSON.stringify( props[ propId ], null, 2 ) }</pre>\n\t\t\t\t\t) ) }\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { type ComponentType } from 'react';\nimport { ControlReplacementsProvider, PropKeyProvider, PropProvider, useBoundProp } from '@elementor/editor-controls';\nimport { createTopLevelObjectType, useElement } from '@elementor/editor-editing-panel';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport {\n\tcomponentOverridablePropTypeUtil,\n\ttype ComponentOverridablePropValue,\n} from '../../prop-types/component-overridable-prop-type';\nimport { OverridablePropProvider } from '../../provider/overridable-prop-context';\nimport { updateOverridablePropOriginValue } from '../../store/actions/update-overridable-prop-origin-value';\nimport { useCurrentComponentId } from '../../store/store';\n\nexport function OverridablePropControl< T extends object >( {\n\tOriginalControl,\n\t...props\n}: T & { OriginalControl: ComponentType< T > } ) {\n\tconst { elementType } = useElement();\n\n\tconst { value, bind, setValue, placeholder, ...propContext } = useBoundProp( componentOverridablePropTypeUtil );\n\tconst componentId = useCurrentComponentId();\n\n\tif ( ! componentId ) {\n\t\treturn null;\n\t}\n\n\tif ( ! value?.override_key ) {\n\t\tthrow new Error( 'Override key is required' );\n\t}\n\n\tconst setOverridableValue = ( newValue: Record< typeof bind, PropValue | null > ) => {\n\t\tconst propValue = {\n\t\t\t...value,\n\t\t\torigin_value: newValue[ bind ],\n\t\t} as ComponentOverridablePropValue;\n\n\t\tsetValue( propValue );\n\t\tupdateOverridablePropOriginValue( componentId, propValue );\n\t};\n\n\tconst propType = createTopLevelObjectType( {\n\t\tschema: {\n\t\t\t[ bind ]: elementType.propsSchema[ bind ],\n\t\t},\n\t} );\n\n\tconst objectPlaceholder: Record< string, PropValue > | undefined = placeholder\n\t\t? { [ bind ]: placeholder }\n\t\t: undefined;\n\n\treturn (\n\t\t<OverridablePropProvider value={ value }>\n\t\t\t<PropProvider\n\t\t\t\t{ ...propContext }\n\t\t\t\tpropType={ propType }\n\t\t\t\tsetValue={ setOverridableValue }\n\t\t\t\tvalue={ { [ bind ]: value.origin_value } }\n\t\t\t\tplaceholder={ objectPlaceholder }\n\t\t\t>\n\t\t\t\t<PropKeyProvider bind={ bind }>\n\t\t\t\t\t<ControlReplacementsProvider replacements={ [] }>\n\t\t\t\t\t\t<OriginalControl { ...( props as T ) } />\n\t\t\t\t\t</ControlReplacementsProvider>\n\t\t\t\t</PropKeyProvider>\n\t\t\t</PropProvider>\n\t\t</OverridablePropProvider>\n\t);\n}\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentOverridablePropTypeUtil = createPropUtils(\n\t'overridable',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\torigin_value: z\n\t\t\t.object( {\n\t\t\t\t$$type: z.string(),\n\t\t\t\tvalue: z.unknown(),\n\t\t\t} )\n\t\t\t.nullable(),\n\t} )\n);\n\nexport type ComponentOverridablePropValue = z.infer< typeof componentOverridablePropTypeUtil.schema >[ 'value' ];\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { type ComponentOverridablePropValue } from '../prop-types/component-overridable-prop-type';\n\ntype OverridablePropData = {\n\tvalue: ComponentOverridablePropValue;\n};\n\nconst OverridablePropContext = createContext< OverridablePropData | null >( null );\n\nexport function OverridablePropProvider( { children, ...props }: PropsWithChildren< OverridablePropData > ) {\n\treturn <OverridablePropContext.Provider value={ props }>{ children }</OverridablePropContext.Provider>;\n}\n\nexport const useOverridablePropValue = () => useContext( OverridablePropContext )?.value;\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentOverridablePropValue } from '../../prop-types/component-overridable-prop-type';\nimport { type OverridableProps } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\nexport function updateOverridablePropOriginValue( componentId: number, propValue: ComponentOverridablePropValue ) {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overridableProps.props[ propValue.override_key ];\n\n\tif ( ! existingOverridableProp ) {\n\t\treturn;\n\t}\n\n\tconst newOverridableProps = {\n\t\t...overridableProps,\n\t\tprops: {\n\t\t\t...overridableProps.props,\n\t\t\t[ existingOverridableProp.overrideKey ]: {\n\t\t\t\t...existingOverridableProp,\n\t\t\t\toriginValue: propValue.origin_value,\n\t\t\t},\n\t\t},\n\t} satisfies OverridableProps;\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: newOverridableProps,\n\t\t} )\n\t);\n}\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { getWidgetsCache } from '@elementor/editor-elements';\nimport { type TransformablePropValue } from '@elementor/editor-props';\nimport { __getState as getState } from '@elementor/store';\nimport { bindPopover, bindTrigger, Popover, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentOverridablePropTypeUtil } from '../../prop-types/component-overridable-prop-type';\nimport { useOverridablePropValue } from '../../provider/overridable-prop-context';\nimport { setOverridableProp } from '../../store/actions/set-overridable-prop';\nimport { selectOverridableProps, useCurrentComponentId } from '../../store/store';\nimport { type OverridableProps } from '../../types';\nimport { Indicator } from './indicator';\nimport { OverridablePropForm } from './overridable-prop-form';\nimport { getOverridableProp } from './utils/get-overridable-prop';\n\nconst FORBIDDEN_KEYS = [ '_cssid', 'attributes' ];\n\nexport function OverridablePropIndicator() {\n\tconst { bind } = useBoundProp();\n\tconst componentId = useCurrentComponentId();\n\n\tif ( ! isPropAllowed( bind ) || ! componentId ) {\n\t\treturn null;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\treturn <Content componentId={ componentId } overridableProps={ overridableProps } />;\n}\n\ntype Props = {\n\tcomponentId: number;\n\toverridableProps?: OverridableProps;\n};\nexport function Content( { componentId, overridableProps }: Props ) {\n\tconst {\n\t\telement: { id: elementId },\n\t\telementType,\n\t} = useElement();\n\tconst { value, bind, propType } = useBoundProp();\n\n\tconst contextOverridableValue = useOverridablePropValue();\n\tconst { value: boundPropOverridableValue, setValue: setOverridableValue } = useBoundProp(\n\t\tcomponentOverridablePropTypeUtil\n\t);\n\n\t/**\n\t * This is intended to handle custom layout controls, such as <LinkControl />, which has <ControlLabel /> nested within it\n\t * i.e. its bound prop value would be the one manipulated by the new <PropProvider /> thus won't be considered overridable\n\t */\n\tconst overridableValue = boundPropOverridableValue ?? contextOverridableValue;\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\tconst triggerProps = bindTrigger( popupState );\n\tconst popoverProps = bindPopover( popupState );\n\n\tconst { elType } = getWidgetsCache()?.[ elementType.key ] ?? { elType: 'widget' };\n\n\tconst handleSubmit = ( { label, group }: { label: string; group: string | null } ) => {\n\t\tconst originValue = ! overridableValue ? value ?? propType.default : overridableValue?.origin_value ?? {};\n\n\t\tconst overridablePropConfig = setOverridableProp( {\n\t\t\tcomponentId,\n\t\t\toverrideKey: overridableValue?.override_key ?? null,\n\t\t\telementId,\n\t\t\tlabel,\n\t\t\tgroupId: group,\n\t\t\tpropKey: bind,\n\t\t\telType: elType ?? 'widget',\n\t\t\twidgetType: elementType.key,\n\t\t\toriginValue,\n\t\t} );\n\n\t\tif ( ! overridableValue && overridablePropConfig ) {\n\t\t\tsetOverridableValue( {\n\t\t\t\toverride_key: overridablePropConfig.overrideKey,\n\t\t\t\torigin_value: originValue as TransformablePropValue< string, unknown >,\n\t\t\t} );\n\t\t}\n\n\t\tpopupState.close();\n\t};\n\n\tconst overridableConfig = overridableValue\n\t\t? getOverridableProp( { componentId, overrideKey: overridableValue.override_key } )\n\t\t: undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip placement=\"top\" title={ __( 'Override Property', 'elementor' ) }>\n\t\t\t\t<Indicator { ...triggerProps } isOpen={ !! popoverProps.open } isOverridable={ !! overridableValue } />\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\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\tPaperProps={ {\n\t\t\t\t\tsx: { my: 2.5 },\n\t\t\t\t} }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<OverridablePropForm\n\t\t\t\t\tonSubmit={ handleSubmit }\n\t\t\t\t\tgroups={ overridableProps?.groups.order.map( ( groupId ) => ( {\n\t\t\t\t\t\tvalue: groupId,\n\t\t\t\t\t\tlabel: overridableProps.groups.items[ groupId ].label,\n\t\t\t\t\t} ) ) }\n\t\t\t\t\tcurrentValue={ overridableConfig }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nfunction isPropAllowed( bind: string ) {\n\treturn ! FORBIDDEN_KEYS.includes( bind );\n}\n","import { type PropValue } from '@elementor/editor-props';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp, type OverridableProps, type OverridablePropsGroup } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype Props = {\n\tcomponentId: number;\n\toverrideKey: string | null;\n\telementId: string;\n\tlabel: string;\n\tgroupId: string | null;\n\tpropKey: string;\n\telType: string;\n\twidgetType: string;\n\toriginValue: PropValue;\n};\nexport function setOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n\telementId,\n\tlabel,\n\tgroupId,\n\tpropKey,\n\telType,\n\twidgetType,\n\toriginValue,\n}: Props ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overrideKey ? overridableProps.props[ overrideKey ] : null;\n\tconst duplicatedTargetProps = Object.values( overridableProps.props ).filter(\n\t\t( prop ) => prop.elementId === elementId && prop.propKey === propKey && prop !== existingOverridableProp\n\t);\n\n\tconst { props: prevProps, groups: prevGroups } = { ...overridableProps };\n\n\tconst { groups: updatedGroups, currentGroupId } = getUpdatedGroups(\n\t\tprevGroups,\n\t\tgroupId || existingOverridableProp?.groupId\n\t);\n\n\tconst overridableProp = {\n\t\toverrideKey: existingOverridableProp?.overrideKey || generateUniqueId( 'prop' ),\n\t\tlabel,\n\t\telementId,\n\t\tpropKey,\n\t\twidgetType,\n\t\telType,\n\t\toriginValue,\n\t\tgroupId: currentGroupId,\n\t};\n\n\tconst { props: propsWithoutDuplicates, groups: groupsWithoutDuplicates } = removeProps( {\n\t\tprops: prevProps,\n\t\tgroups: updatedGroups,\n\t\tpropsToRemove: duplicatedTargetProps,\n\t} );\n\n\tconst props = {\n\t\t...propsWithoutDuplicates,\n\t\t[ overridableProp.overrideKey ]: overridableProp,\n\t};\n\n\tconst groups = {\n\t\titems: {\n\t\t\t...groupsWithoutDuplicates.items,\n\t\t\t[ currentGroupId ]: getGroupWithProp( groupsWithoutDuplicates, currentGroupId, overridableProp ),\n\t\t},\n\t\torder: groupsWithoutDuplicates.order.includes( currentGroupId )\n\t\t\t? groupsWithoutDuplicates.order\n\t\t\t: [ ...groupsWithoutDuplicates.order, currentGroupId ],\n\t};\n\n\tconst isChangingGroups = existingOverridableProp && existingOverridableProp.groupId !== currentGroupId;\n\n\tif ( isChangingGroups ) {\n\t\tgroups.items[ existingOverridableProp.groupId ] = getGroupWithoutProp(\n\t\t\tgroupsWithoutDuplicates,\n\t\t\texistingOverridableProp.groupId,\n\t\t\toverridableProp\n\t\t);\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\tprops,\n\t\t\t\tgroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn overridableProp;\n}\n\ntype UpdatedGroups = { groups: OverridableProps[ 'groups' ]; currentGroupId: string };\n\nfunction getUpdatedGroups( groups: OverridableProps[ 'groups' ], groupId: string | undefined ): UpdatedGroups {\n\tif ( ! groupId ) {\n\t\t// use first existing group\n\t\tif ( groups.order.length > 0 ) {\n\t\t\treturn { groups, currentGroupId: groups.order[ 0 ] };\n\t\t}\n\n\t\t// create the first group (default)\n\t\treturn addNewGroup( groups );\n\t}\n\n\tif ( ! groups.items[ groupId ] ) {\n\t\t// fallback - if for any reason there's no such group - create it\n\t\treturn addNewGroup( groups, groupId );\n\t}\n\n\t// use the existing group\n\treturn { groups, currentGroupId: groupId };\n}\n\nfunction addNewGroup( groups: OverridableProps[ 'groups' ], groupId?: string | undefined ): UpdatedGroups {\n\tconst currentGroupId = groupId || generateUniqueId( 'group' );\n\tconst updatedGroups = {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ currentGroupId ]: {\n\t\t\t\tid: currentGroupId,\n\t\t\t\tlabel: __( 'Default', 'elementor' ),\n\t\t\t\tprops: [],\n\t\t\t},\n\t\t},\n\t\torder: [ ...groups.order, currentGroupId ],\n\t};\n\n\treturn { groups: updatedGroups, currentGroupId };\n}\n\nfunction getGroupWithProp(\n\tgroups: OverridableProps[ 'groups' ],\n\tgroupId: string,\n\toverridableProp: OverridableProp\n): OverridablePropsGroup {\n\tconst group: OverridablePropsGroup = { ...groups.items[ groupId ] };\n\n\tif ( ! group.props.includes( overridableProp.overrideKey ) ) {\n\t\tgroup.props = [ ...group.props, overridableProp.overrideKey ];\n\t}\n\n\treturn group;\n}\n\nfunction getGroupWithoutProp(\n\tgroups: OverridableProps[ 'groups' ],\n\tgroupId: string,\n\toverridableProp: OverridableProp\n): OverridablePropsGroup {\n\tconst group = { ...groups.items[ groupId ] };\n\n\tif ( group ) {\n\t\tgroup.props = group.props.filter( ( key ) => key !== overridableProp.overrideKey );\n\t}\n\n\treturn group;\n}\n\nfunction removeProps( {\n\tprops,\n\tgroups,\n\tpropsToRemove,\n}: OverridableProps & { propsToRemove: OverridableProp[] } ): OverridableProps {\n\tconst allProps = Object.fromEntries(\n\t\tObject.entries( props ).filter( ( [ , prop ] ) => ! propsToRemove.includes( prop ) )\n\t);\n\n\tconst overrideKeysToRemove = propsToRemove.map( ( prop ) => prop.overrideKey );\n\n\tconst allGroupItems = Object.fromEntries(\n\t\tObject.entries( groups.items ).map( ( [ groupId, group ]: [ string, OverridablePropsGroup ] ) => [\n\t\t\tgroupId,\n\t\t\t{\n\t\t\t\t...group,\n\t\t\t\tprops: group.props.filter( ( prop ) => ! overrideKeysToRemove.includes( prop ) ),\n\t\t\t},\n\t\t] )\n\t);\n\n\treturn {\n\t\tprops: allProps,\n\t\tgroups: {\n\t\t\titems: allGroupItems,\n\t\t\torder: groups.order.filter( ( groupId ) => ! overrideKeysToRemove.includes( groupId ) ),\n\t\t},\n\t};\n}\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { CheckIcon, PlusIcon } from '@elementor/icons';\nimport { Box, styled } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\nconst IconContainer = styled( Box )`\n\tpointer-events: none;\n\topacity: 0;\n\ttransition: opacity 0.2s ease-in-out;\n\n\t& > svg {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate( -50%, -50% );\n\t\twidth: 10px;\n\t\theight: 10px;\n\t\tfill: ${ ( { theme } ) => theme.palette.primary.contrastText };\n\t\tstroke: ${ ( { theme } ) => theme.palette.primary.contrastText };\n\t\tstroke-width: 2px;\n\t}\n`;\n\nconst Content = styled( Box )`\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\twidth: 16px;\n\theight: 16px;\n\tmargin-inline: ${ ( { theme } ) => theme.spacing( 0.5 ) };\n\n\t&:before {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate( -50%, -50% ) rotate( 45deg );\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 1px;\n\t\tbackground-color: ${ ( { theme } ) => theme.palette.primary.main };\n\t\ttransition: all 0.1s ease-in-out;\n\t}\n\n\t&:hover,\n\t&.enlarged {\n\t\t&:before {\n\t\t\twidth: 12px;\n\t\t\theight: 12px;\n\t\t\tborder-radius: 2px;\n\t\t}\n\n\t\t.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n`;\n\ntype Props = {\n\tisOverridable: boolean;\n\tisOpen: boolean;\n};\nexport const Indicator = forwardRef< HTMLDivElement, Props >( ( { isOpen, isOverridable, ...props }, ref ) => (\n\t<Content ref={ ref } { ...props } className={ isOpen || isOverridable ? 'enlarged' : '' }>\n\t\t<IconContainer\n\t\t\tclassName=\"icon\"\n\t\t\taria-label={\n\t\t\t\tisOverridable ? __( 'Overridable property', 'elementor' ) : __( 'Make prop overridable', 'elementor' )\n\t\t\t}\n\t\t>\n\t\t\t{ isOverridable ? <CheckIcon fontSize={ SIZE } /> : <PlusIcon fontSize={ SIZE } /> }\n\t\t</IconContainer>\n\t</Content>\n) );\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { Form, MenuListItem } from '@elementor/editor-ui';\nimport { Button, FormLabel, Grid, Select, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp } from '../../types';\n\nconst SIZE = 'tiny';\n\nconst DEFAULT_GROUP = { value: null, label: __( 'Default', 'elementor' ) };\n\ntype Props = {\n\tonSubmit: ( data: { label: string; group: string | null } ) => void;\n\tcurrentValue?: OverridableProp;\n\tgroups?: { value: string; label: string }[];\n};\n\nexport function OverridablePropForm( { onSubmit, groups, currentValue }: Props ) {\n\tconst [ propLabel, setPropLabel ] = useState< string | null >( currentValue?.label ?? null );\n\tconst [ group, setGroup ] = useState< string | null >( currentValue?.groupId ?? groups?.[ 0 ]?.value ?? null );\n\n\tconst name = __( 'Name', 'elementor' );\n\tconst groupName = __( 'Group Name', 'elementor' );\n\n\tconst isCreate = currentValue === undefined;\n\n\tconst title = isCreate ? __( 'Create new property', 'elementor' ) : __( 'Update property', 'elementor' );\n\tconst ctaLabel = isCreate ? __( 'Create', 'elementor' ) : __( 'Update', 'elementor' );\n\n\treturn (\n\t\t<Form onSubmit={ () => onSubmit( { label: propLabel ?? '', group } ) }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%', mb: 1.5 } }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" px={ 1.5 } mb={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ name }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tname={ name }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tplaceholder={ __( 'Enter value', 'elementor' ) }\n\t\t\t\t\t\t\tvalue={ propLabel ?? '' }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => setPropLabel( e.target.value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" px={ 1.5 } mb={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ groupName }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\tname={ groupName }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ group ?? null }\n\t\t\t\t\t\t\tonChange={ setGroup }\n\t\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\t\trenderValue={ ( selectedValue: string | null ) => {\n\t\t\t\t\t\t\t\tif ( ! selectedValue || selectedValue === '' ) {\n\t\t\t\t\t\t\t\t\tconst [ firstGroup = DEFAULT_GROUP ] = groups ?? [];\n\n\t\t\t\t\t\t\t\t\treturn firstGroup.label;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn groups?.find( ( { value } ) => value === selectedValue )?.label ?? selectedValue;\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ ( groups ?? [ DEFAULT_GROUP ] ).map( ( { label: groupLabel, ...props } ) => (\n\t\t\t\t\t\t\t\t<MenuListItem key={ props.value } { ...props } value={ props.value ?? '' }>\n\t\t\t\t\t\t\t\t\t{ groupLabel }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" mt={ 1.5 } py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! propLabel } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ ctaLabel }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Form>\n\t);\n}\n","import { __getState as getState } from '@elementor/store';\n\nimport { selectOverridableProps } from '../../../store/store';\nimport { type OverridableProp } from '../../../types';\n\nexport function getOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n}: {\n\tcomponentId: number;\n\toverrideKey: string;\n} ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn undefined;\n\t}\n\n\treturn overridableProps.props[ overrideKey ];\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { initSaveAsComponentTool } from './save-as-component-tool';\n\nexport function initMcp() {\n\tconst { setMCPDescription } = getMCPByDomain( 'components' );\n\n\tsetMCPDescription(\n\t\t`Elementor Editor Components MCP - Tools for creating and managing reusable components. \n Components are reusable blocks of content that can be used multiple times across the pages, its a widget which contains a set of elements and styles.`\n\t);\n\n\tinitSaveAsComponentTool();\n}\n","import { DOCUMENT_STRUCTURE_URI, WIDGET_SCHEMA_URI } from '@elementor/editor-canvas';\nimport { getContainer, getElementType, getWidgetsCache, type V1ElementData } from '@elementor/editor-elements';\nimport { getMCPByDomain, toolPrompts } from '@elementor/editor-mcp';\nimport { type PropValue } from '@elementor/editor-props';\nimport { AxiosError } from '@elementor/http-client';\nimport { z } from '@elementor/schema';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { apiClient } from '../api';\nimport { createUnpublishedComponent } from '../store/actions/create-unpublished-component';\nimport { type OverridableProps } from '../types';\n\nconst InputSchema = {\n\telement_id: z\n\t\t.string()\n\t\t.describe(\n\t\t\t'The unique identifier of the element to save as a component. ' +\n\t\t\t\t'Use the \"list-elements\" tool to find available element IDs in the current document.'\n\t\t),\n\tcomponent_name: z\n\t\t.string()\n\t\t.describe( 'The name for the new component. Should be descriptive and unique among existing components.' ),\n\toverridable_props: z\n\t\t.object( {\n\t\t\tprops: z.record(\n\t\t\t\tz.object( {\n\t\t\t\t\telementId: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe( 'The id of the child element that you want to override its settings' ),\n\t\t\t\t\tpropKey: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe(\n\t\t\t\t\t\t\t'The property key of the child element that you want to override its settings (e.g., \"text\", \"url\", \"tag\"). To get the available propKeys for an element, use the \"get-element-type-config\" tool.'\n\t\t\t\t\t\t),\n\t\t\t\t} )\n\t\t\t),\n\t\t} )\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Overridable properties configuration. Specify which CHILD element properties can be customized. ' +\n\t\t\t\t'Only elementId and propKey are required; To get the available propKeys for a child element you must use the \"get-element-type-config\" tool.'\n\t\t),\n};\n\nconst OutputSchema = {\n\tmessage: z.string().optional().describe( 'Additional information about the operation result' ),\n\tcomponent_uid: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe( 'The unique identifier of the newly created component (only present on success)' ),\n};\n\nexport const ERROR_MESSAGES = {\n\tELEMENT_NOT_FOUND: \"Element not found. Use 'list-elements' to get valid element IDs.\",\n\tELEMENT_NOT_ONE_OF_TYPES: ( validTypes: string[] ) =>\n\t\t`Element is not one of the following types: ${ validTypes.join( ', ' ) }`,\n\tELEMENT_IS_LOCKED: 'Cannot save a locked element as a component.',\n};\n\nexport const handleSaveAsComponent = async ( params: z.infer< z.ZodObject< typeof InputSchema > > ) => {\n\tconst { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;\n\tconst validElementTypes = getValidElementTypes();\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_FOUND );\n\t}\n\n\tconst elType = container.model.get( 'elType' );\n\n\tif ( ! validElementTypes.includes( elType ) ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_ONE_OF_TYPES( validElementTypes ) );\n\t}\n\n\tconst element = container.model.toJSON( { remove: [ 'default' ] } ) as V1ElementData;\n\n\tif ( element?.isLocked ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_IS_LOCKED );\n\t}\n\n\tconst overridableProps = overridablePropsInput\n\t\t? enrichOverridableProps( overridablePropsInput, element )\n\t\t: undefined;\n\n\tif ( overridableProps ) {\n\t\tupdateElementDataWithOverridableProps( element, overridableProps );\n\t}\n\n\tconst uid = generateUniqueId( 'component' );\n\n\ttry {\n\t\tawait apiClient.validate( {\n\t\t\titems: [\n\t\t\t\t{ uid, title: componentName, elements: [ element ], settings: { overridable_props: overridableProps } },\n\t\t\t],\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\tif ( error instanceof AxiosError ) {\n\t\t\tthrow new Error( error.response?.data.messge );\n\t\t}\n\t\tthrow new Error( 'Unknown error' );\n\t}\n\n\tcreateUnpublishedComponent( componentName, element, null, overridableProps, uid );\n\n\treturn {\n\t\tstatus: 'ok' as const,\n\t\tmessage: `Component \"${ componentName }\" created successfully.`,\n\t\tcomponent_uid: uid,\n\t};\n};\n\nfunction enrichOverridableProps(\n\tinput: { props: Record< string, { elementId: string; propKey: string } > },\n\trootElement: V1ElementData\n): OverridableProps {\n\tconst enrichedProps: OverridableProps[ 'props' ] = {};\n\tconst defaultGroupId = generateUniqueId( 'group' );\n\n\tObject.entries( input.props ).forEach( ( [ , prop ] ) => {\n\t\tconst { elementId, propKey } = prop;\n\t\tconst element = findElementById( rootElement, elementId );\n\n\t\tif ( ! element ) {\n\t\t\tthrow new Error( `Element with ID \"${ elementId }\" not found in component` );\n\t\t}\n\n\t\tconst elType = element.elType;\n\t\tconst widgetType = element.widgetType || element.elType;\n\n\t\t// Validate that the propKey exists in the element's schema\n\t\tconst elementType = getElementType( widgetType );\n\n\t\tif ( ! elementType ) {\n\t\t\tthrow new Error(\n\t\t\t\t`Element type \"${ widgetType }\" is not atomic or does not have a settings schema. ` +\n\t\t\t\t\t`Cannot expose property \"${ propKey }\" for element \"${ elementId }\".`\n\t\t\t);\n\t\t}\n\n\t\tif ( ! elementType.propsSchema[ propKey ] ) {\n\t\t\tconst availableProps = Object.keys( elementType.propsSchema ).join( ', ' );\n\t\t\tthrow new Error(\n\t\t\t\t`Property \"${ propKey }\" does not exist in element \"${ elementId }\" (type: ${ widgetType }). ` +\n\t\t\t\t\t`Available properties: ${ availableProps }`\n\t\t\t);\n\t\t}\n\n\t\tconst overrideKey = generateUniqueId( 'prop' );\n\t\tconst originValue = element.settings?.[ propKey ]\n\t\t\t? ( element.settings[ propKey ] as PropValue )\n\t\t\t: elementType.propsSchema[ propKey ].default ?? null;\n\n\t\tconst label = generateLabel( propKey );\n\n\t\tenrichedProps[ overrideKey ] = {\n\t\t\toverrideKey,\n\t\t\tlabel,\n\t\t\telementId,\n\t\t\tpropKey,\n\t\t\telType,\n\t\t\twidgetType,\n\t\t\toriginValue,\n\t\t\tgroupId: defaultGroupId,\n\t\t};\n\t} );\n\n\treturn {\n\t\tprops: enrichedProps,\n\t\tgroups: {\n\t\t\titems: {\n\t\t\t\t[ defaultGroupId ]: {\n\t\t\t\t\tid: defaultGroupId,\n\t\t\t\t\tlabel: 'Default',\n\t\t\t\t\tprops: Object.keys( enrichedProps ),\n\t\t\t\t},\n\t\t\t},\n\t\t\torder: [ defaultGroupId ],\n\t\t},\n\t};\n}\n\nfunction updateElementDataWithOverridableProps( rootElement: V1ElementData, overridableProps: OverridableProps ) {\n\tObject.values( overridableProps.props ).forEach( ( prop ) => {\n\t\tconst element = findElementById( rootElement, prop.elementId );\n\n\t\tif ( ! element || ! element.settings ) {\n\t\t\treturn;\n\t\t}\n\n\t\telement.settings[ prop.propKey ] = {\n\t\t\t$$type: 'overridable',\n\t\t\tvalue: {\n\t\t\t\toverride_key: prop.overrideKey,\n\t\t\t\torigin_value: prop.originValue,\n\t\t\t},\n\t\t};\n\t} );\n}\n\nfunction findElementById( root: V1ElementData, targetId: string ): V1ElementData | null {\n\tif ( root.id === targetId ) {\n\t\treturn root;\n\t}\n\n\tif ( root.elements ) {\n\t\tfor ( const child of root.elements ) {\n\t\t\tconst found = findElementById( child, targetId );\n\t\t\tif ( found ) {\n\t\t\t\treturn found;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction generateLabel( propKey: string ): string {\n\tconst uniqueId = generateUniqueId( 'prop' );\n\treturn `${ uniqueId } - ${ propKey }`;\n}\n\nfunction getValidElementTypes(): string[] {\n\tconst types = getWidgetsCache();\n\n\tif ( ! types ) {\n\t\treturn [];\n\t}\n\n\treturn Object.entries( types ).reduce( ( acc, [ type, value ] ) => {\n\t\tif ( ! value.atomic_props_schema || ! value.show_in_panel || value.elType === 'widget' ) {\n\t\t\treturn acc;\n\t\t}\n\n\t\tacc.push( type );\n\t\treturn acc;\n\t}, [] as string[] );\n}\n\nconst generatePrompt = () => {\n\tconst saveAsComponentPrompt = toolPrompts( 'save-as-component' );\n\n\tsaveAsComponentPrompt.description( `\nSave an existing element as a reusable component in the Elementor editor.\n\n# When to use this tool\nUse this tool when the user wants to:\n- Create a reusable component from an existing element structure\n- Make specific child element properties customizable in component instances\n- Build a library of reusable design patterns\n\n# When NOT to use this tool\n- Element is already a component (widgetType: 'e-component')\n- Element is locked\n- Element is not an atomic element (atomic_props_schema is not defined)\n- Element elType is a 'widget'\n\n# **CRITICAL - REQUIRED RESOURCES (Must read before using this tool)**\n1. [${ DOCUMENT_STRUCTURE_URI }]\n **MANDATORY** - Required to understand the document structure and identify child elements for overridable properties.\n Use this resource to find element IDs and understand the element hierarchy.\n\n2. [${ WIDGET_SCHEMA_URI }]\n **MANDATORY** - Required to understand which properties are available for each widget type.\n Use this to identify available propKeys in the atomic_props_schema for child elements.\n\n# Instructions - MUST FOLLOW IN ORDER\n## Step 1: Identify the Target Element\n1. Read the [${ DOCUMENT_STRUCTURE_URI }] resource to understand the document structure\n2. Locate the element you want to save as a component by its element_id\n3. Verify the element type is a valid element type\n4. Ensure the element is not locked and is not already a component\n\n## Step 2: Define Overridable Properties\nDo this step to make child element properties customizable.\nSkip that step ONLY if the user explicitly requests to not make any properties customizable.\n\n1. **Identify Child Elements**\n - Use the [${ DOCUMENT_STRUCTURE_URI }] resource to find all child elements\n - Note the elementId and widgetType/elType of each child element you want to customize\n\n2. **Find Available Properties**\n - Use the [${ WIDGET_SCHEMA_URI }] resource to find the child element's widget type schema\n - Review the atomic_props_schema to find available propKeys (ONLY use top-level props)\n - Common propKeys include: \"text\", \"url\", \"tag\", \"size\", etc.\n - Use only the top level properties, do not use nested properties.\n\n3. **Build the overridable_props Object**\n - For each property you want to make overridable, add an entry:\n \\`{ \"elementId\": \"<child-element-id>\", \"propKey\": \"<property-key>\" }\\`\n - Group all entries under the \"props\" object\n\n## Step 3: Execute the Tool\nCall the tool with:\n- element_id: The ID of the parent element to save as component\n- component_name: A descriptive name for the component\n- overridable_props: (Optional) The properties configuration from Step 2\n\n# CONSTRAINTS\n- NEVER try to override properties of the parent element itself - ONLY child elements\n- NEVER use invalid propKeys - always verify against the widget's atomic_props_schema in [${ WIDGET_SCHEMA_URI }]\n- Property keys must exist in the child element's atomic_props_schema\n- Element IDs must exist within the target element's children\n- When tool execution fails, read the error message and adjust accordingly\n- The element being saved must not be inside another component\n` );\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'element_id',\n\t\t`**MANDATORY** The unique identifier of the element to save as a component.\nUse the [${ DOCUMENT_STRUCTURE_URI }] resource to find available element IDs.`\n\t);\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'component_name',\n\t\t`**MANDATORY** A descriptive name for the new component.\nShould be unique and clearly describe the component's purpose (e.g., \"Hero Section\", \"Feature Card\").`\n\t);\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'overridable_props',\n\t\t`**OPTIONAL** Configuration for which child element properties can be customized in component instances.\n\nStructure:\n\\`\\`\\`json\n{\n \"props\": {\n \"<unique-key>\": {\n \"elementId\": \"<child-element-id>\",\n \"propKey\": \"<property-key>\"\n }\n }\n}\n\\`\\`\\`\n\nTo populate this correctly:\n1. Use [${ DOCUMENT_STRUCTURE_URI }] to find child element IDs and their widgetType\n2. Use [${ WIDGET_SCHEMA_URI }] to find the atomic_props_schema for each child element's widgetType\n3. Only include properties you want to be customizable in component instances\n4. Common propKeys: \"text\", \"url\", \"tag\", \"size\", \"align\", etc.`\n\t);\n\n\tsaveAsComponentPrompt.example( `\nBasic component without overridable properties:\n\\`\\`\\`json\n{\n \"element_id\": \"abc123\",\n \"component_name\": \"Hero Section\"\n}\n\\`\\`\\`\n\nComponent with overridable properties:\n\\`\\`\\`json\n{\n \"element_id\": \"abc123\",\n \"component_name\": \"Feature Card\",\n \"overridable_props\": {\n \"props\": {\n \"heading-text\": {\n \"elementId\": \"heading-123\",\n \"propKey\": \"text\"\n },\n \"button-text\": {\n \"elementId\": \"button-456\",\n \"propKey\": \"text\"\n },\n \"button-link\": {\n \"elementId\": \"button-456\",\n \"propKey\": \"url\"\n }\n }\n }\n}\n\\`\\`\\`\n` );\n\n\tsaveAsComponentPrompt.instruction(\n\t\t`After successful creation, the component will be available in the components library and can be inserted into any page or template.`\n\t);\n\n\tsaveAsComponentPrompt.instruction(\n\t\t`When overridable properties are defined, component instances will show customization controls for those specific properties in the editing panel.`\n\t);\n\n\treturn saveAsComponentPrompt.prompt();\n};\n\nexport const initSaveAsComponentTool = () => {\n\treturn getMCPByDomain( 'components' ).addTool( {\n\t\tname: 'save-as-component',\n\t\tschema: InputSchema,\n\t\toutputSchema: OutputSchema,\n\t\tdescription: generatePrompt(),\n\t\thandler: handleSaveAsComponent,\n\t} );\n};\n","import { useEffect } from 'react';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { loadComponents } from './store/thunks';\n\nexport function PopulateStore() {\n\tuseEffect( () => {\n\t\tdispatch( loadComponents() );\n\t}, [] );\n\n\treturn null;\n}\n","import { __dispatch as dispatch } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { slice } from '../store';\n\nexport function removeComponentStyles( id: number ) {\n\tapiClient.invalidateComponentConfigCache( id );\n\tdispatch( slice.actions.removeStyles( { id } ) );\n}\n","import { createStylesProvider } from '@elementor/editor-styles-repository';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { selectFlatStyles, SLICE_NAME } from './store';\n\nexport const componentsStylesProvider = createStylesProvider( {\n\tkey: 'components-styles',\n\tpriority: 100,\n\tsubscribe: ( cb ) =>\n\t\tsubscribeWithSelector(\n\t\t\t( state ) => state[ SLICE_NAME ],\n\t\t\t() => {\n\t\t\t\tcb();\n\t\t\t}\n\t\t),\n\tactions: {\n\t\tall: () => {\n\t\t\treturn selectFlatStyles( getState() );\n\t\t},\n\t\tget: ( id ) => {\n\t\t\treturn selectFlatStyles( getState() ).find( ( style ) => style.id === id ) ?? null;\n\t\t},\n\t},\n} );\n","import { updateElementSettings, type V1ElementData } from '@elementor/editor-elements';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectUnpublishedComponents, slice } from '../store/store';\nimport { type ComponentInstancePropValue, type DocumentSaveStatus, type UnpublishedComponent } from '../types';\n\nexport async function createComponentsBeforeSave( {\n\telements,\n\tstatus,\n}: {\n\telements: V1ElementData[];\n\tstatus: DocumentSaveStatus;\n} ) {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tif ( ! unpublishedComponents.length ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst uidToComponentId = await createComponents( unpublishedComponents, status );\n\n\t\tupdateComponentInstances( elements, uidToComponentId );\n\n\t\tdispatch(\n\t\t\tslice.actions.add(\n\t\t\t\tunpublishedComponents.map( ( component ) => ( {\n\t\t\t\t\tid: uidToComponentId.get( component.uid ) as number,\n\t\t\t\t\tname: component.name,\n\t\t\t\t\tuid: component.uid,\n\t\t\t\t\toverridableProps: component.overridableProps ? component.overridableProps : undefined,\n\t\t\t\t} ) )\n\t\t\t)\n\t\t);\n\t\tdispatch( slice.actions.resetUnpublished() );\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to publish components and update component instances: ${ error }` );\n\t}\n}\n\nasync function createComponents(\n\tcomponents: UnpublishedComponent[],\n\tstatus: DocumentSaveStatus\n): Promise< Map< string, number > > {\n\tconst response = await apiClient.create( {\n\t\tstatus,\n\t\titems: components.map( ( component ) => ( {\n\t\t\tuid: component.uid,\n\t\t\ttitle: component.name,\n\t\t\telements: component.elements,\n\t\t\tsettings: component.overridableProps ? { overridable_props: component.overridableProps } : undefined,\n\t\t} ) ),\n\t} );\n\n\tconst map = new Map< string, number >();\n\n\tObject.entries( response ).forEach( ( [ key, value ] ) => {\n\t\tmap.set( key, value );\n\t} );\n\n\treturn map;\n}\n\nfunction updateComponentInstances( elements: V1ElementData[], uidToComponentId: Map< string, number > ): void {\n\telements.forEach( ( element ) => {\n\t\tconst { shouldUpdate, newComponentId } = shouldUpdateElement( element, uidToComponentId );\n\t\tif ( shouldUpdate ) {\n\t\t\tupdateElementComponentId( element.id, newComponentId );\n\t\t}\n\n\t\tif ( element.elements ) {\n\t\t\tupdateComponentInstances( element.elements, uidToComponentId );\n\t\t}\n\t} );\n}\n\nfunction shouldUpdateElement(\n\telement: V1ElementData,\n\tuidToComponentId: Map< string, number >\n): { shouldUpdate: true; newComponentId: number } | { shouldUpdate: false; newComponentId: null } {\n\tif ( element.widgetType === 'e-component' ) {\n\t\tconst currentComponentId = ( element.settings?.component_instance as ComponentInstancePropValue< string > )\n\t\t\t?.value?.component_id.value;\n\n\t\tif ( currentComponentId && uidToComponentId.has( currentComponentId ) ) {\n\t\t\treturn { shouldUpdate: true, newComponentId: uidToComponentId.get( currentComponentId ) as number };\n\t\t}\n\t}\n\treturn { shouldUpdate: false, newComponentId: null };\n}\n\nfunction updateElementComponentId( elementId: string, componentId: number ): void {\n\tupdateElementSettings( {\n\t\tid: elementId,\n\t\tprops: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: { $$type: 'number', value: componentId },\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\twithHistory: false,\n\t} );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __getState as getState } from '@elementor/store';\n\nimport { COMPONENT_DOCUMENT_TYPE } from '../components/consts';\nimport { selectOverridableProps } from '../store/store';\n\nexport const setComponentOverridablePropsSettingsBeforeSave = ( {\n\tcontainer,\n}: {\n\tcontainer: V1Element & { document: V1Document };\n} ) => {\n\tconst currentDocument = container.document;\n\n\tif ( ! currentDocument || currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), currentDocument.id );\n\tif ( overridableProps ) {\n\t\tcontainer.settings.set( 'overridable_props', overridableProps );\n\t}\n};\n","import { type NotificationData, notify } from '@elementor/editor-notifications';\nimport { __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectArchivedComponents } from '../store/store';\n\nconst failedNotification = ( message: string ): NotificationData => ( {\n\ttype: 'error',\n\tmessage: `Failed to archive components: ${ message }`,\n\tid: 'failed-archived-components-notification',\n} );\n\nconst successNotification = ( message: string ): NotificationData => ( {\n\ttype: 'success',\n\tmessage: `Successfully archived components: ${ message }`,\n\tid: 'success-archived-components-notification',\n} );\n\nexport const updateArchivedComponentBeforeSave = async () => {\n\ttry {\n\t\tconst archivedComponents = selectArchivedComponents( getState() );\n\n\t\tif ( ! archivedComponents.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = await apiClient.updateArchivedComponents(\n\t\t\tarchivedComponents.map( ( component ) => component.id )\n\t\t);\n\n\t\tconst failedIds = result.failedIds.join( ', ' );\n\t\tconst successIds = result.successIds.join( ', ' );\n\n\t\tif ( failedIds ) {\n\t\t\tnotify( failedNotification( failedIds ) );\n\t\t}\n\n\t\tif ( successIds ) {\n\t\t\tnotify( successNotification( successIds ) );\n\t\t}\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to update archived components: ${ error }` );\n\t}\n};\n","import { isDocumentDirty } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { apiClient } from '../api';\nimport { type DocumentSaveStatus } from '../types';\nimport { getComponentDocumentData, invalidateComponentDocumentData } from '../utils/component-document-data';\nimport { getComponentIds } from '../utils/get-component-ids';\n\ntype Options = {\n\tstatus: DocumentSaveStatus;\n\telements: V1ElementData[];\n};\n\nexport async function updateComponentsBeforeSave( { status, elements }: Options ) {\n\tif ( status !== 'publish' ) {\n\t\treturn;\n\t}\n\n\tconst componentIds = await getComponentIds( elements );\n\n\tconst componentDocumentData = await Promise.all( componentIds.map( getComponentDocumentData ) );\n\n\tconst draftIds = componentDocumentData\n\t\t.filter( ( document ) => !! document )\n\t\t.filter( isDocumentDirty )\n\t\t.map( ( document ) => document.id );\n\n\tif ( draftIds.length === 0 ) {\n\t\treturn;\n\t}\n\n\tawait apiClient.updateStatuses( draftIds, 'publish' );\n\n\tdraftIds.forEach( ( id ) => invalidateComponentDocumentData( id ) );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element, type V1ElementData } from '@elementor/editor-elements';\n\nimport { type DocumentSaveStatus } from '../types';\nimport { createComponentsBeforeSave } from './create-components-before-save';\nimport { setComponentOverridablePropsSettingsBeforeSave } from './set-component-overridable-props-settings-before-save';\nimport { updateArchivedComponentBeforeSave } from './update-archived-component-before-save';\nimport { updateComponentsBeforeSave } from './update-components-before-save';\n\ntype Options = {\n\tcontainer: V1Element & {\n\t\tdocument: V1Document;\n\t\tmodel: {\n\t\t\tget: ( key: 'elements' ) => {\n\t\t\t\ttoJSON: () => V1ElementData[];\n\t\t\t};\n\t\t};\n\t};\n\tstatus: DocumentSaveStatus;\n};\n\nexport const beforeSave = ( { container, status }: Options ) => {\n\tconst elements = container.model.get( 'elements' )?.toJSON() ?? [];\n\n\treturn Promise.all( [\n\t\tupdateArchivedComponentBeforeSave(),\n\t\tcreateComponentsBeforeSave( { elements, status } ),\n\t\tupdateComponentsBeforeSave( { elements, status } ),\n\t\tsetComponentOverridablePropsSettingsBeforeSave( { container } ),\n\t] );\n};\n"],"mappings":"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","names":["import_editor_canvas","import_editor_documents","import_editor_editing_panel","import_editor_styles_repository","import_editor_v1_adapters","import_store","import_i18n","import_store","import_store","createAsyncThunk","createSlice","createSelector","useSelector","getState","import_editor_canvas","import_editor_canvas","React","import_editor_documents","import_icons","import_ui","import_i18n","import_editor_documents","import_store","import_editor_v1_adapters","runCommand","useSelector","import_react","import_store","useSelector","React","import_editor_ui","React","import_icons","import_ui","import_i18n","React","import_react","React","import_icons","import_ui","import_i18n","import_store","useSelector","React","import_editor_canvas","import_editor_elements","import_icons","import_ui","import_i18n","import_editor_documents","import_store","getStore","dispatch","import_editor_documents","import_editor_canvas","import_editor_documents","import_i18n","import_store","getState","import_store","getState","dispatch","import_store","getState","dispatch","import_editor_elements","React","import_ui","React","import_react","import_editor_elements","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_v1_adapters","import_store","import_utils","dispatch","runCommand","import_react","import_i18n","validateForm","FormElement","React","import_react","import_editor_documents","import_editor_v1_adapters","import_store","import_utils","import_editor_documents","import_store","dispatch","getStore","React","import_react","import_i18n","import_editor_canvas","import_editor_v1_adapters","useListenTo","import_react","import_utils","useSelector","listenTo","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_editing_panel","import_editor_elements","import_icons","import_store","import_ui","import_i18n","import_editor_props","import_schema","import_editor_props","import_schema","import_schema","React","import_icons","import_ui","import_i18n","EmptyState","React","import_react","import_editor_ui","import_ui","getState","EmptyState","React","import_editor_editing_panel","import_editor_props","import_schema","React","import_react","import_store","getState","dispatch","React","import_editor_controls","import_editor_editing_panel","import_editor_elements","import_store","import_ui","import_i18n","import_store","import_utils","import_i18n","getState","dispatch","React","import_react","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_ui","import_i18n","SIZE","import_store","getState","getState","Content","import_editor_mcp","import_editor_canvas","import_editor_elements","import_http_client","import_schema","import_utils","import_react","import_store","dispatch","import_store","dispatch","import_store","subscribeWithSelector","getState","import_editor_elements","import_store","getState","dispatch","import_store","getState","import_store","getState","import_editor_documents","registerSlice"]}