@elementor/editor-components 3.33.0-299 → 3.33.0-301
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 +196 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +183 -12
- package/dist/index.mjs.map +1 -1
- package/package.json +18 -16
- package/src/components/overridable-props/indicator.tsx +81 -0
- package/src/components/overridable-props/overridable-prop-indicator.tsx +95 -0
- package/src/init.ts +9 -0
- package/src/prop-types/component-overridable-prop-type.ts +15 -0
- package/src/store/store.ts +6 -0
- package/src/types.ts +27 -1
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/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/load-components-styles.ts","../src/utils/get-component-ids.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/create-component-form/create-component-form.tsx","../src/store/create-unpublished-component.ts","../src/utils/tracking.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/components/consts.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/create-component-type.ts","../src/populate-store.ts","../src/store/components-styles-provider.ts","../src/store/remove-component-styles.ts","../src/sync/create-components-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 { type V1ElementData } from '@elementor/editor-elements';\nimport { injectTab } from '@elementor/editor-elements-panel';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __privateListenTo as listenTo, commandStartEvent, 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 { Components } from './components/components-tab/components';\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 { createComponentType, TYPE } from './create-component-type';\nimport { PopulateStore } from './populate-store';\nimport { componentsStylesProvider } from './store/components-styles-provider';\nimport { loadComponentsStyles } from './store/load-components-styles';\nimport { removeComponentStyles } from './store/remove-component-styles';\nimport { slice } from './store/store';\nimport { beforeSave } from './sync/before-save';\nimport { type ExtendedWindow } from './types';\nimport { onElementDrop } from './utils/tracking';\n\nconst COMPONENT_DOCUMENT_TYPE = 'elementor_component';\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\tlistenTo( commandStartEvent( 'editor/documents/attach-preview' ), () => {\n\t\tconst { id, config } = getV1CurrentDocument();\n\n\t\tif ( id ) {\n\t\t\tremoveComponentStyles( id );\n\t\t}\n\n\t\tloadComponentsStyles( ( config?.elements as V1ElementData[] ) ?? [] );\n\t} );\n\n\tsettingsTransformersRegistry.register( 'component-instance', componentInstanceTransformer );\n\tsettingsTransformersRegistry.register( 'overridable', componentOverridableTransformer );\n}\n","import { createTransformer } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectUnpublishedComponents } from './store/store';\nimport { getComponentDocumentData } from './utils/component-document-data';\n\nexport const componentInstanceTransformer = createTransformer(\n\tasync ( { component_id: id }: { component_id: number | string } ) => {\n\t\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\t\tconst unpublishedComponent = unpublishedComponents.find( ( { uid } ) => uid === id );\n\t\tif ( unpublishedComponent ) {\n\t\t\treturn structuredClone( unpublishedComponent.elements );\n\t\t}\n\n\t\tif ( typeof id !== 'number' ) {\n\t\t\tthrow new Error( `Component ID \"${ id }\" not found.` );\n\t\t}\n\n\t\tconst data = await getComponentDocumentData( id );\n\n\t\treturn data?.elements ?? [];\n\t}\n);\n","import {\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 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};\n\ntype ComponentsSlice = SliceState< typeof slice >;\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\n\tcreatedThisSession: [],\n};\n\nexport const SLICE_NAME = 'components';\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},\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 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;\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: PublishedComponent[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( { uid: item.uid, name: item.name } ) ),\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","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 PublishedComponent } from './types';\n\nconst BASE_URL = 'elementor/v1/components';\nconst LOCK_COMPONENT = `${ BASE_URL }/lock`;\nconst UNLOCK_COMPONENT = `${ BASE_URL }/unlock`;\nconst BASE_URL_LOCK_STATUS = `${ BASE_URL }/lock-status`;\n\nexport type CreateComponentPayload = {\n\tstatus: DocumentSaveStatus;\n\titems: Array< {\n\t\tuid: string;\n\t\ttitle: string;\n\t\telements: V1ElementData[];\n\t} >;\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 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 } >( LOCK_COMPONENT, {\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 } >( UNLOCK_COMPONENT, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nimport { type DocumentStatus } from '../types';\n\ntype ComponentDocumentData = {\n\tid: number;\n\telements?: V1ElementData[];\n\tstatus: { value: DocumentStatus };\n\trevisions: { current_id: number };\n};\n\ntype ComponentInstanceTransformerWindow = Window & {\n\telementor?: {\n\t\tdocuments?: {\n\t\t\trequest: ( id: number ) => Promise< ComponentDocumentData >;\n\t\t\tinvalidateCache: ( id: number ) => void;\n\t\t};\n\t};\n};\n\nexport const getComponentDocumentData = async ( id: number ) => {\n\tconst documentManager = getDocumentsManager();\n\n\ttry {\n\t\treturn await documentManager.request( id );\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const invalidateComponentDocumentData = ( id: number ) => {\n\tconst documentManager = getDocumentsManager();\n\n\tdocumentManager.invalidateCache( id );\n};\n\nfunction getDocumentsManager() {\n\tconst extendedWindow = window as unknown as ComponentInstanceTransformerWindow;\n\n\tconst documentManager = extendedWindow.elementor?.documents;\n\n\tif ( ! documentManager ) {\n\t\tthrow new Error( 'Elementor documents manager not found' );\n\t}\n\n\treturn documentManager;\n}\n","import { createTransformer, settingsTransformersRegistry } from '@elementor/editor-canvas';\n\nimport { type ComponentOverridable } from './types';\n\nexport const componentOverridableTransformer = createTransformer(\n\tasync ( value: ComponentOverridable, options: { key: string; signal?: AbortSignal } ) => {\n\t\t// todo: render component overrides\n\t\treturn await transformOriginValue( value, options );\n\t}\n);\n\nasync function transformOriginValue( value: ComponentOverridable, options: { key: string; signal?: AbortSignal } ) {\n\tif ( ! value.origin_value || ! value.origin_value.value || ! value.origin_value.$$type ) {\n\t\treturn null;\n\t}\n\n\tconst transformer = settingsTransformersRegistry.get( value.origin_value.$$type );\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\treturn await transformer( value.origin_value.value, options );\n\t} catch {\n\t\treturn null;\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>“</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>”.</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 { ComponentsIcon } from '@elementor/icons';\nimport { Box, ListItemButton, ListItemIcon, ListItemText, Typography } from '@elementor/ui';\n\nimport { loadComponentsStyles } from '../../store/load-components-styles';\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\n\tconst handleClick = () => {\n\t\taddComponentToPage( componentModel );\n\t};\n\n\tconst handleDragEnd = () => {\n\t\tloadComponentsStyles( [ componentModel as V1ElementData ] );\n\n\t\tendDragElementFromPanel();\n\t};\n\n\treturn (\n\t\t<ListItemButton\n\t\t\tdraggable\n\t\t\tonDragStart={ () => startDragElementFromPanel( componentModel ) }\n\t\t\tonDragEnd={ handleDragEnd }\n\t\t\tshape=\"rounded\"\n\t\t\tsx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }\n\t\t>\n\t\t\t<Box sx={ { display: 'flex', width: '100%', alignItems: 'center', gap: 1 } } onClick={ handleClick }>\n\t\t\t\t<ListItemIcon size=\"tiny\">\n\t\t\t\t\t<ComponentsIcon fontSize=\"tiny\" />\n\t\t\t\t</ListItemIcon>\n\t\t\t\t<ListItemText\n\t\t\t\t\tprimary={\n\t\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t\t{ component.name }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</ListItemButton>\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\tloadComponentsStyles( [ 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 { 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 { getComponentIds } from '../utils/get-component-ids';\nimport { selectStyles, slice } from './store';\n\nexport async function loadComponentsStyles( elements: V1ElementData[] ) {\n\tconst componentIds = getComponentIds( elements );\n\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\tObject.values( newComponents ).forEach( ( [ , data ] ) => {\n\t\tloadComponentsStyles( data.elements ?? ( [] as V1ElementData[] ) );\n\t} );\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 { type V1ElementData } from '@elementor/editor-elements';\n\nimport { type ComponentInstancePropValue } from '../types';\n\nexport const getComponentIds = ( elements: V1ElementData[] ) => {\n\tconst result = elements.flatMap( ( element ) => {\n\t\tconst ids: number[] = [];\n\n\t\tconst type = element.widgetType || element.elType;\n\n\t\tif ( type === 'e-component' ) {\n\t\t\tconst componentId = ( element.settings?.component_instance as ComponentInstancePropValue< number > )?.value\n\t\t\t\t?.component_id;\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 ( element.elements ) {\n\t\t\tids.push( ...getComponentIds( element.elements ) );\n\t\t}\n\n\t\treturn ids;\n\t} );\n\n\treturn Array.from( new Set( result ) );\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\ntype ComponentInstanceParams = {\n\tid?: number;\n\tname: string;\n\tuid: string;\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: component.id ?? component.uid,\n\t\t\t\t},\n\t\t\t},\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","import * as React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getElementLabel, type V1ElementData } from '@elementor/editor-elements';\nimport { 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/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\treturn (\n\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"center\"\n\t\t\t\tpy={ 1 }\n\t\t\t\tpx={ 1.5 }\n\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }\n\t\t\t>\n\t\t\t\t<StarIcon fontSize={ FONT_SIZE } />\n\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t{ __( 'Save as a component', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Stack>\n\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" p={ 1.5 }>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<FormLabel htmlFor={ 'component-name' } size=\"tiny\">\n\t\t\t\t\t\t{ __( 'Name', 'elementor' ) }\n\t\t\t\t\t</FormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<TextField\n\t\t\t\t\t\tid={ 'component-name' }\n\t\t\t\t\t\tsize={ FONT_SIZE }\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tvalue={ values.componentName }\n\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\thandleChange( e, 'componentName', changeValidationSchema )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinputProps={ { style: { color: 'text.primary', fontWeight: '600' } } }\n\t\t\t\t\t\terror={ Boolean( errors.componentName ) }\n\t\t\t\t\t\thelperText={ errors.componentName }\n\t\t\t\t\t/>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" py={ 1 } px={ 1.5 }>\n\t\t\t\t<Button onClick={ closePopup } color=\"secondary\" variant=\"text\" size=\"small\">\n\t\t\t\t\t{ __( 'Cancel', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={ handleSubmit }\n\t\t\t\t\tdisabled={ ! isValid }\n\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Create', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</Stack>\n\t\t</Stack>\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 { trackComponentEvent } from '../utils/tracking';\nimport { slice } from './store';\n\nexport function createUnpublishedComponent(\n\tname: string,\n\telement: V1ElementData,\n\teventData: ComponentEventData | null\n) {\n\tconst uid = generateUniqueId( 'component' );\n\tconst componentBase = { uid, name };\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( uid ) );\n\n\treplaceElementWithComponent( element, componentBase );\n\n\ttrackComponentEvent( {\n\t\taction: 'created',\n\t\tcomponent_uid: uid,\n\t\tcomponent_name: name,\n\t\t...eventData,\n\t} );\n\n\trunCommand( 'document/save/auto' );\n\n\treturn uid;\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 { 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 { type Dispatch, type SetStateAction, useCallback, useEffect, useState } from 'react';\nimport { getV1DocumentsManager, type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport {\n\t__privateListenTo as listenTo,\n\t__privateRunCommand as runCommand,\n\tcommandEndEvent,\n} from '@elementor/editor-v1-adapters';\n\nimport { apiClient } from '../../api';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { ComponentModal } from './component-modal';\n\ntype ComponentsPathItem = {\n\tinstanceId: string | undefined;\n\tcomponent: V1Document;\n};\nexport function EditComponent() {\n\tconst [ componentsPath, setComponentsPath ] = useState< ComponentsPathItem[] >( [] );\n\n\tuseHandleDocumentSwitches( componentsPath, setComponentsPath );\n\tconst onBack = useNavigateBack( componentsPath );\n\n\tconst currentItem = componentsPath.at( -1 );\n\tconst { component: currentComponent } = currentItem ?? {};\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\tif ( ! elementDom ) {\n\t\treturn null;\n\t}\n\n\treturn <ComponentModal element={ elementDom } onClose={ onBack } />;\n}\n\nfunction useHandleDocumentSwitches(\n\tpath: ComponentsPathItem[],\n\tsetPath: Dispatch< SetStateAction< ComponentsPathItem[] > >\n) {\n\tconst documentsManager = getV1DocumentsManager();\n\n\tuseEffect(\n\t\t() =>\n\t\t\tlistenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => {\n\t\t\t\tconst { component: currentComponent } = path.at( -1 ) ?? {};\n\t\t\t\tconst { id: currentComponentId } = currentComponent ?? {};\n\t\t\t\tconst nextDocument = documentsManager.getCurrent();\n\n\t\t\t\tif ( nextDocument.id === currentComponentId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( currentComponentId ) {\n\t\t\t\t\tapiClient.unlockComponent( currentComponentId );\n\t\t\t\t}\n\n\t\t\t\tconst isComponent = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;\n\n\t\t\t\tif ( ! isComponent ) {\n\t\t\t\t\tsetPath( [] );\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetPath( getUpdatedComponentPath( path, nextDocument ) );\n\t\t\t} ),\n\t\t[ path, setPath, documentsManager ]\n\t);\n}\n\nfunction getUpdatedComponentPath( path: ComponentsPathItem[], nextDocument: V1Document ): ComponentsPathItem[] {\n\tconst componentIndex = path.findIndex( ( { component } ) => component.id === 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\tcomponent: nextDocument,\n\t\t},\n\t];\n}\n\nfunction useNavigateBack( path: ComponentsPathItem[] ) {\n\tconst documentsManager = getV1DocumentsManager();\n\n\treturn useCallback( () => {\n\t\tconst { component: prevComponent, instanceId: prevComponentInstanceId } = path.at( -2 ) ?? {};\n\t\tconst { id: prevComponentId } = prevComponent ?? {};\n\t\tconst switchToDocument = ( id: number, selector?: string ) => {\n\t\t\trunCommand( 'editor/documents/switch', {\n\t\t\t\tid,\n\t\t\t\tselector,\n\t\t\t\tmode: 'autosave',\n\t\t\t\tsetAsInitial: false,\n\t\t\t\tshouldScroll: false,\n\t\t\t} );\n\t\t};\n\n\t\tif ( prevComponentId && prevComponentInstanceId ) {\n\t\t\tswitchToDocument( prevComponentId, `[data-id=\"${ prevComponentInstanceId }\"]` );\n\n\t\t\treturn;\n\t\t}\n\n\t\tswitchToDocument( documentsManager.getInitialId() );\n\t}, [ path, documentsManager ] );\n}\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\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 {\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 { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\nimport { type ComponentInstancePropValue, type ExtendedWindow } from './types';\nimport { trackComponentEvent } from './utils/tracking';\n\ntype ContextMenuEventData = { location: string; secondaryLocation: string; trigger: string };\n\nexport const TYPE = 'e-component';\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 & { showLockedByModal?: ( lockedBy: string ) => void }\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\tif ( settings.component_instance ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection(\n\t\t\t\t\tsettings.component_instance\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;\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 newGroup = [\n\t\t\t\t{\n\t\t\t\t\tname: 'edit component',\n\t\t\t\t\tactions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'edit component',\n\t\t\t\t\t\t\ticon: 'eicon-edit',\n\t\t\t\t\t\t\ttitle: () => __( 'Edit Component', 'elementor' ),\n\t\t\t\t\t\t\tisEnabled: () => true,\n\t\t\t\t\t\t\tcallback: ( _: unknown, eventData: ContextMenuEventData ) =>\n\t\t\t\t\t\t\t\tthis.editComponent( eventData ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn [ ...filteredGroups, ...newGroup ];\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\trunCommand( 'editor/documents/switch', {\n\t\t\t\t\tid: this.getComponentId(),\n\t\t\t\t\tmode: 'autosave',\n\t\t\t\t\tselector: `[data-id=\"${ this.model.get( 'id' ) }\"]`,\n\t\t\t\t\tshouldScroll: false,\n\t\t\t\t} );\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 { 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 { 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 { __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 { 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 {\n\ttype ComponentInstancePropValue,\n\ttype Container,\n\ttype DocumentSaveStatus,\n\ttype UnpublishedComponent,\n} from '../types';\n\nexport async function createComponentsBeforeSave( {\n\tcontainer,\n\tstatus,\n}: {\n\tcontainer: Container;\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\tconst elements = container.model.get( 'elements' ).toJSON();\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} ) )\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} ) ),\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;\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: { component_id: componentId },\n\t\t\t},\n\t\t},\n\t\twithHistory: false,\n\t} );\n}\n","import { apiClient } from '../api';\nimport { type Container, 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\tcontainer: Container;\n};\n\nexport async function updateComponentsBeforeSave( { status, container }: Options ) {\n\tif ( status !== 'publish' ) {\n\t\treturn;\n\t}\n\n\tconst elements = container.model.get( 'elements' ).toJSON();\n\n\tconst componentDocumentData = await Promise.all(\n\t\tgetComponentIds( elements ).map( ( id ) => getComponentDocumentData( id ) )\n\t);\n\n\tconst draftIds = componentDocumentData\n\t\t.filter( ( document ) => !! document )\n\t\t.filter( ( document ) => {\n\t\t\tconst isDraft = document.status.value === 'draft';\n\n\t\t\t// When the component is published, but have draft version.\n\t\t\tconst hasAutosave = document.revisions.current_id !== document.id;\n\n\t\t\treturn isDraft || hasAutosave;\n\t\t} )\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 Container, type DocumentSaveStatus } from '../types';\nimport { createComponentsBeforeSave } from './create-components-before-save';\nimport { updateComponentsBeforeSave } from './update-components-before-save';\n\ntype Options = {\n\tcontainer: Container;\n\tstatus: DocumentSaveStatus;\n};\n\nexport const beforeSave = ( { container, status }: Options ) => {\n\treturn Promise.all( [\n\t\tcreateComponentsBeforeSave( { container, status } ),\n\t\tupdateComponentsBeforeSave( { container, status } ),\n\t] );\n};\n"],"mappings":"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","names":["import_editor_canvas","import_editor_documents","import_editor_styles_repository","import_editor_v1_adapters","import_store","import_i18n","import_store","import_store","createAsyncThunk","createSlice","createSelector","getState","import_editor_canvas","React","React","React","import_icons","import_ui","import_i18n","import_store","useSelector","React","import_editor_canvas","import_editor_elements","import_icons","import_ui","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","import_store","getState","dispatch","runCommand","import_react","import_i18n","validateForm","React","import_react","import_editor_v1_adapters","React","import_react","import_i18n","import_editor_canvas","import_editor_v1_adapters","useListenTo","import_react","import_utils","listenTo","runCommand","React","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_canvas","import_editor_documents","import_editor_v1_adapters","import_i18n","runCommand","import_react","import_store","dispatch","import_store","subscribeWithSelector","getState","import_store","dispatch","import_editor_elements","import_store","getState","dispatch","COMPONENT_DOCUMENT_TYPE","registerSlice","listenTo"]}
|
|
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/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/load-components-styles.ts","../src/utils/get-component-ids.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/create-component-form/create-component-form.tsx","../src/store/create-unpublished-component.ts","../src/utils/tracking.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/components/consts.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/overridable-props/overridable-prop-indicator.tsx","../src/prop-types/component-overridable-prop-type.ts","../src/components/overridable-props/indicator.tsx","../src/create-component-type.ts","../src/populate-store.ts","../src/store/components-styles-provider.ts","../src/store/remove-component-styles.ts","../src/sync/create-components-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 { FIELD_TYPE, registerFieldIndicator } 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 { __privateListenTo as listenTo, commandStartEvent, 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 { Components } from './components/components-tab/components';\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 { OverridablePropIndicator } from './components/overridable-props/overridable-prop-indicator';\nimport { createComponentType, TYPE } from './create-component-type';\nimport { PopulateStore } from './populate-store';\nimport { componentsStylesProvider } from './store/components-styles-provider';\nimport { loadComponentsStyles } from './store/load-components-styles';\nimport { removeComponentStyles } from './store/remove-component-styles';\nimport { slice } from './store/store';\nimport { beforeSave } from './sync/before-save';\nimport { type ExtendedWindow } from './types';\nimport { onElementDrop } from './utils/tracking';\n\nconst COMPONENT_DOCUMENT_TYPE = 'elementor_component';\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\tlistenTo( commandStartEvent( 'editor/documents/attach-preview' ), () => {\n\t\tconst { id, config } = getV1CurrentDocument();\n\n\t\tif ( id ) {\n\t\t\tremoveComponentStyles( id );\n\t\t}\n\n\t\tloadComponentsStyles( ( 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\tsettingsTransformersRegistry.register( 'component-instance', componentInstanceTransformer );\n\tsettingsTransformersRegistry.register( 'overridable', componentOverridableTransformer );\n}\n","import { createTransformer } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectUnpublishedComponents } from './store/store';\nimport { getComponentDocumentData } from './utils/component-document-data';\n\nexport const componentInstanceTransformer = createTransformer(\n\tasync ( { component_id: id }: { component_id: number | string } ) => {\n\t\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\t\tconst unpublishedComponent = unpublishedComponents.find( ( { uid } ) => uid === id );\n\t\tif ( unpublishedComponent ) {\n\t\t\treturn structuredClone( unpublishedComponent.elements );\n\t\t}\n\n\t\tif ( typeof id !== 'number' ) {\n\t\t\tthrow new Error( `Component ID \"${ id }\" not found.` );\n\t\t}\n\n\t\tconst data = await getComponentDocumentData( id );\n\n\t\treturn data?.elements ?? [];\n\t}\n);\n","import {\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 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};\n\ntype ComponentsSlice = SliceState< typeof slice >;\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\n\tcreatedThisSession: [],\n};\n\nexport const SLICE_NAME = 'components';\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},\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 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 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 ) => ( { uid: item.uid, name: item.name } ) ),\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);\nexport const selectOverridableProps = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => component?.overridableProps\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 PublishedComponent } from './types';\n\nconst BASE_URL = 'elementor/v1/components';\nconst LOCK_COMPONENT = `${ BASE_URL }/lock`;\nconst UNLOCK_COMPONENT = `${ BASE_URL }/unlock`;\nconst BASE_URL_LOCK_STATUS = `${ BASE_URL }/lock-status`;\n\nexport type CreateComponentPayload = {\n\tstatus: DocumentSaveStatus;\n\titems: Array< {\n\t\tuid: string;\n\t\ttitle: string;\n\t\telements: V1ElementData[];\n\t} >;\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 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 } >( LOCK_COMPONENT, {\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 } >( UNLOCK_COMPONENT, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nimport { type DocumentStatus } from '../types';\n\ntype ComponentDocumentData = {\n\tid: number;\n\telements?: V1ElementData[];\n\tstatus: { value: DocumentStatus };\n\trevisions: { current_id: number };\n};\n\ntype ComponentInstanceTransformerWindow = Window & {\n\telementor?: {\n\t\tdocuments?: {\n\t\t\trequest: ( id: number ) => Promise< ComponentDocumentData >;\n\t\t\tinvalidateCache: ( id: number ) => void;\n\t\t};\n\t};\n};\n\nexport const getComponentDocumentData = async ( id: number ) => {\n\tconst documentManager = getDocumentsManager();\n\n\ttry {\n\t\treturn await documentManager.request( id );\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const invalidateComponentDocumentData = ( id: number ) => {\n\tconst documentManager = getDocumentsManager();\n\n\tdocumentManager.invalidateCache( id );\n};\n\nfunction getDocumentsManager() {\n\tconst extendedWindow = window as unknown as ComponentInstanceTransformerWindow;\n\n\tconst documentManager = extendedWindow.elementor?.documents;\n\n\tif ( ! documentManager ) {\n\t\tthrow new Error( 'Elementor documents manager not found' );\n\t}\n\n\treturn documentManager;\n}\n","import { createTransformer, settingsTransformersRegistry } from '@elementor/editor-canvas';\n\nimport { type ComponentOverridable } from './types';\n\nexport const componentOverridableTransformer = createTransformer(\n\tasync ( value: ComponentOverridable, options: { key: string; signal?: AbortSignal } ) => {\n\t\t// todo: render component overrides\n\t\treturn await transformOriginValue( value, options );\n\t}\n);\n\nasync function transformOriginValue( value: ComponentOverridable, options: { key: string; signal?: AbortSignal } ) {\n\tif ( ! value.origin_value || ! value.origin_value.value || ! value.origin_value.$$type ) {\n\t\treturn null;\n\t}\n\n\tconst transformer = settingsTransformersRegistry.get( value.origin_value.$$type );\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\ttry {\n\t\treturn await transformer( value.origin_value.value, options );\n\t} catch {\n\t\treturn null;\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>“</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>”.</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 { ComponentsIcon } from '@elementor/icons';\nimport { Box, ListItemButton, ListItemIcon, ListItemText, Typography } from '@elementor/ui';\n\nimport { loadComponentsStyles } from '../../store/load-components-styles';\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\n\tconst handleClick = () => {\n\t\taddComponentToPage( componentModel );\n\t};\n\n\tconst handleDragEnd = () => {\n\t\tloadComponentsStyles( [ componentModel as V1ElementData ] );\n\n\t\tendDragElementFromPanel();\n\t};\n\n\treturn (\n\t\t<ListItemButton\n\t\t\tdraggable\n\t\t\tonDragStart={ () => startDragElementFromPanel( componentModel ) }\n\t\t\tonDragEnd={ handleDragEnd }\n\t\t\tshape=\"rounded\"\n\t\t\tsx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }\n\t\t>\n\t\t\t<Box sx={ { display: 'flex', width: '100%', alignItems: 'center', gap: 1 } } onClick={ handleClick }>\n\t\t\t\t<ListItemIcon size=\"tiny\">\n\t\t\t\t\t<ComponentsIcon fontSize=\"tiny\" />\n\t\t\t\t</ListItemIcon>\n\t\t\t\t<ListItemText\n\t\t\t\t\tprimary={\n\t\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t\t{ component.name }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</ListItemButton>\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\tloadComponentsStyles( [ 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 { 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 { getComponentIds } from '../utils/get-component-ids';\nimport { selectStyles, slice } from './store';\n\nexport async function loadComponentsStyles( elements: V1ElementData[] ) {\n\tconst componentIds = getComponentIds( elements );\n\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\tObject.values( newComponents ).forEach( ( [ , data ] ) => {\n\t\tloadComponentsStyles( data.elements ?? ( [] as V1ElementData[] ) );\n\t} );\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 { type V1ElementData } from '@elementor/editor-elements';\n\nimport { type ComponentInstancePropValue } from '../types';\n\nexport const getComponentIds = ( elements: V1ElementData[] ) => {\n\tconst result = elements.flatMap( ( element ) => {\n\t\tconst ids: number[] = [];\n\n\t\tconst type = element.widgetType || element.elType;\n\n\t\tif ( type === 'e-component' ) {\n\t\t\tconst componentId = ( element.settings?.component_instance as ComponentInstancePropValue< number > )?.value\n\t\t\t\t?.component_id;\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 ( element.elements ) {\n\t\t\tids.push( ...getComponentIds( element.elements ) );\n\t\t}\n\n\t\treturn ids;\n\t} );\n\n\treturn Array.from( new Set( result ) );\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\ntype ComponentInstanceParams = {\n\tid?: number;\n\tname: string;\n\tuid: string;\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: component.id ?? component.uid,\n\t\t\t\t},\n\t\t\t},\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","import * as React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getElementLabel, type V1ElementData } from '@elementor/editor-elements';\nimport { 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/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\treturn (\n\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"center\"\n\t\t\t\tpy={ 1 }\n\t\t\t\tpx={ 1.5 }\n\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }\n\t\t\t>\n\t\t\t\t<StarIcon fontSize={ FONT_SIZE } />\n\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t{ __( 'Save as a component', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t</Stack>\n\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" p={ 1.5 }>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<FormLabel htmlFor={ 'component-name' } size=\"tiny\">\n\t\t\t\t\t\t{ __( 'Name', 'elementor' ) }\n\t\t\t\t\t</FormLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<TextField\n\t\t\t\t\t\tid={ 'component-name' }\n\t\t\t\t\t\tsize={ FONT_SIZE }\n\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\tvalue={ values.componentName }\n\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\thandleChange( e, 'componentName', changeValidationSchema )\n\t\t\t\t\t\t}\n\t\t\t\t\t\tinputProps={ { style: { color: 'text.primary', fontWeight: '600' } } }\n\t\t\t\t\t\terror={ Boolean( errors.componentName ) }\n\t\t\t\t\t\thelperText={ errors.componentName }\n\t\t\t\t\t/>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" py={ 1 } px={ 1.5 }>\n\t\t\t\t<Button onClick={ closePopup } color=\"secondary\" variant=\"text\" size=\"small\">\n\t\t\t\t\t{ __( 'Cancel', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tonClick={ handleSubmit }\n\t\t\t\t\tdisabled={ ! isValid }\n\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\tcolor=\"primary\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Create', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</Stack>\n\t\t</Stack>\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 { trackComponentEvent } from '../utils/tracking';\nimport { slice } from './store';\n\nexport function createUnpublishedComponent(\n\tname: string,\n\telement: V1ElementData,\n\teventData: ComponentEventData | null\n) {\n\tconst uid = generateUniqueId( 'component' );\n\tconst componentBase = { uid, name };\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( uid ) );\n\n\treplaceElementWithComponent( element, componentBase );\n\n\ttrackComponentEvent( {\n\t\taction: 'created',\n\t\tcomponent_uid: uid,\n\t\tcomponent_name: name,\n\t\t...eventData,\n\t} );\n\n\trunCommand( 'document/save/auto' );\n\n\treturn uid;\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 { 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 { type Dispatch, type SetStateAction, useCallback, useEffect, useState } from 'react';\nimport { getV1DocumentsManager, type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport {\n\t__privateListenTo as listenTo,\n\t__privateRunCommand as runCommand,\n\tcommandEndEvent,\n} from '@elementor/editor-v1-adapters';\n\nimport { apiClient } from '../../api';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { ComponentModal } from './component-modal';\n\ntype ComponentsPathItem = {\n\tinstanceId: string | undefined;\n\tcomponent: V1Document;\n};\nexport function EditComponent() {\n\tconst [ componentsPath, setComponentsPath ] = useState< ComponentsPathItem[] >( [] );\n\n\tuseHandleDocumentSwitches( componentsPath, setComponentsPath );\n\tconst onBack = useNavigateBack( componentsPath );\n\n\tconst currentItem = componentsPath.at( -1 );\n\tconst { component: currentComponent } = currentItem ?? {};\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\tif ( ! elementDom ) {\n\t\treturn null;\n\t}\n\n\treturn <ComponentModal element={ elementDom } onClose={ onBack } />;\n}\n\nfunction useHandleDocumentSwitches(\n\tpath: ComponentsPathItem[],\n\tsetPath: Dispatch< SetStateAction< ComponentsPathItem[] > >\n) {\n\tconst documentsManager = getV1DocumentsManager();\n\n\tuseEffect(\n\t\t() =>\n\t\t\tlistenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => {\n\t\t\t\tconst { component: currentComponent } = path.at( -1 ) ?? {};\n\t\t\t\tconst { id: currentComponentId } = currentComponent ?? {};\n\t\t\t\tconst nextDocument = documentsManager.getCurrent();\n\n\t\t\t\tif ( nextDocument.id === currentComponentId ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( currentComponentId ) {\n\t\t\t\t\tapiClient.unlockComponent( currentComponentId );\n\t\t\t\t}\n\n\t\t\t\tconst isComponent = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;\n\n\t\t\t\tif ( ! isComponent ) {\n\t\t\t\t\tsetPath( [] );\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetPath( getUpdatedComponentPath( path, nextDocument ) );\n\t\t\t} ),\n\t\t[ path, setPath, documentsManager ]\n\t);\n}\n\nfunction getUpdatedComponentPath( path: ComponentsPathItem[], nextDocument: V1Document ): ComponentsPathItem[] {\n\tconst componentIndex = path.findIndex( ( { component } ) => component.id === 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\tcomponent: nextDocument,\n\t\t},\n\t];\n}\n\nfunction useNavigateBack( path: ComponentsPathItem[] ) {\n\tconst documentsManager = getV1DocumentsManager();\n\n\treturn useCallback( () => {\n\t\tconst { component: prevComponent, instanceId: prevComponentInstanceId } = path.at( -2 ) ?? {};\n\t\tconst { id: prevComponentId } = prevComponent ?? {};\n\t\tconst switchToDocument = ( id: number, selector?: string ) => {\n\t\t\trunCommand( 'editor/documents/switch', {\n\t\t\t\tid,\n\t\t\t\tselector,\n\t\t\t\tmode: 'autosave',\n\t\t\t\tsetAsInitial: false,\n\t\t\t\tshouldScroll: false,\n\t\t\t} );\n\t\t};\n\n\t\tif ( prevComponentId && prevComponentInstanceId ) {\n\t\t\tswitchToDocument( prevComponentId, `[data-id=\"${ prevComponentInstanceId }\"]` );\n\n\t\t\treturn;\n\t\t}\n\n\t\tswitchToDocument( documentsManager.getInitialId() );\n\t}, [ path, documentsManager ] );\n}\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\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 { useBoundProp } from '@elementor/editor-controls';\nimport { getV1CurrentDocument } from '@elementor/editor-documents';\nimport { useElement } from '@elementor/editor-editing-panel';\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 { selectOverridableProps } from '../../store/store';\nimport { type OverridableProps } from '../../types';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { Indicator } from './indicator';\n\nconst FORBIDDEN_KEYS = [ '_cssid', 'attributes' ];\n\nexport function OverridablePropIndicator() {\n\tconst { bind, value } = useBoundProp();\n\tconst currentDocument = getV1CurrentDocument();\n\n\tif ( currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE || ! currentDocument.id ) {\n\t\treturn null;\n\t}\n\n\tif ( ! isPropAllowed( bind ) ) {\n\t\treturn null;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), currentDocument.id );\n\tconst isOverridable = componentOverridablePropTypeUtil.isValid( value );\n\n\treturn (\n\t\t<Content\n\t\t\tcomponentId={ currentDocument.id }\n\t\t\tisOverridable={ isOverridable }\n\t\t\toverridableProps={ overridableProps }\n\t\t/>\n\t);\n}\n\ntype Props = {\n\tcomponentId: number;\n\tisOverridable: boolean;\n\toverridableProps?: OverridableProps;\n};\nexport function Content( { isOverridable, overridableProps }: Props ) {\n\tconst {\n\t\telement: { id: elementId },\n\t} = useElement();\n\tconst { bind } = useBoundProp();\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 overridableConfig = Object.values( overridableProps?.props ?? {} ).find(\n\t\t( prop ) => prop.elementId === elementId && prop.propKey === bind\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip placement=\"top\" title={ __( 'Override Property', 'elementor' ) }>\n\t\t\t\t<Indicator\n\t\t\t\t\ttriggerProps={ triggerProps }\n\t\t\t\t\tisOpen={ !! popoverProps.open }\n\t\t\t\t\tisOverridable={ isOverridable }\n\t\t\t\t/>\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{ JSON.stringify( overridableConfig ) /** TODO: replace with actual form */ }\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 { 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\tdefault_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","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { CheckIcon, PlusIcon } from '@elementor/icons';\nimport { type bindTrigger, 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\ttriggerProps: ReturnType< typeof bindTrigger >;\n\tisOpen: boolean;\n};\nexport const Indicator = forwardRef< HTMLDivElement, Props >( ( { triggerProps, isOpen, isOverridable }, ref ) => (\n\t<Content ref={ ref } { ...triggerProps } 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 {\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 { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\nimport { type ComponentInstancePropValue, type ExtendedWindow } from './types';\nimport { trackComponentEvent } from './utils/tracking';\n\ntype ContextMenuEventData = { location: string; secondaryLocation: string; trigger: string };\n\nexport const TYPE = 'e-component';\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 & { showLockedByModal?: ( lockedBy: string ) => void }\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\tif ( settings.component_instance ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection(\n\t\t\t\t\tsettings.component_instance\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;\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 newGroup = [\n\t\t\t\t{\n\t\t\t\t\tname: 'edit component',\n\t\t\t\t\tactions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'edit component',\n\t\t\t\t\t\t\ticon: 'eicon-edit',\n\t\t\t\t\t\t\ttitle: () => __( 'Edit Component', 'elementor' ),\n\t\t\t\t\t\t\tisEnabled: () => true,\n\t\t\t\t\t\t\tcallback: ( _: unknown, eventData: ContextMenuEventData ) =>\n\t\t\t\t\t\t\t\tthis.editComponent( eventData ),\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t];\n\t\t\treturn [ ...filteredGroups, ...newGroup ];\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\trunCommand( 'editor/documents/switch', {\n\t\t\t\t\tid: this.getComponentId(),\n\t\t\t\t\tmode: 'autosave',\n\t\t\t\t\tselector: `[data-id=\"${ this.model.get( 'id' ) }\"]`,\n\t\t\t\t\tshouldScroll: false,\n\t\t\t\t} );\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 { 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 { 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 { __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 { 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 {\n\ttype ComponentInstancePropValue,\n\ttype Container,\n\ttype DocumentSaveStatus,\n\ttype UnpublishedComponent,\n} from '../types';\n\nexport async function createComponentsBeforeSave( {\n\tcontainer,\n\tstatus,\n}: {\n\tcontainer: Container;\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\tconst elements = container.model.get( 'elements' ).toJSON();\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} ) )\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} ) ),\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;\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: { component_id: componentId },\n\t\t\t},\n\t\t},\n\t\twithHistory: false,\n\t} );\n}\n","import { apiClient } from '../api';\nimport { type Container, 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\tcontainer: Container;\n};\n\nexport async function updateComponentsBeforeSave( { status, container }: Options ) {\n\tif ( status !== 'publish' ) {\n\t\treturn;\n\t}\n\n\tconst elements = container.model.get( 'elements' ).toJSON();\n\n\tconst componentDocumentData = await Promise.all(\n\t\tgetComponentIds( elements ).map( ( id ) => getComponentDocumentData( id ) )\n\t);\n\n\tconst draftIds = componentDocumentData\n\t\t.filter( ( document ) => !! document )\n\t\t.filter( ( document ) => {\n\t\t\tconst isDraft = document.status.value === 'draft';\n\n\t\t\t// When the component is published, but have draft version.\n\t\t\tconst hasAutosave = document.revisions.current_id !== document.id;\n\n\t\t\treturn isDraft || hasAutosave;\n\t\t} )\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 Container, type DocumentSaveStatus } from '../types';\nimport { createComponentsBeforeSave } from './create-components-before-save';\nimport { updateComponentsBeforeSave } from './update-components-before-save';\n\ntype Options = {\n\tcontainer: Container;\n\tstatus: DocumentSaveStatus;\n};\n\nexport const beforeSave = ( { container, status }: Options ) => {\n\treturn Promise.all( [\n\t\tcreateComponentsBeforeSave( { container, status } ),\n\t\tupdateComponentsBeforeSave( { container, status } ),\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","React","React","React","import_icons","import_ui","import_i18n","import_store","useSelector","React","import_editor_canvas","import_editor_elements","import_icons","import_ui","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","import_store","getState","dispatch","runCommand","import_react","import_i18n","validateForm","React","import_react","import_editor_v1_adapters","React","import_react","import_i18n","import_editor_canvas","import_editor_v1_adapters","useListenTo","import_react","import_utils","listenTo","runCommand","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_documents","import_store","import_ui","import_i18n","import_schema","React","import_react","import_icons","import_ui","import_i18n","getState","Content","import_editor_canvas","import_editor_documents","import_editor_v1_adapters","import_i18n","runCommand","import_react","import_store","dispatch","import_store","subscribeWithSelector","getState","import_store","dispatch","import_editor_elements","import_store","getState","dispatch","COMPONENT_DOCUMENT_TYPE","registerSlice","listenTo"]}
|