@elementor/editor-components 3.33.0-249 → 3.33.0-250

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 CHANGED
@@ -69,6 +69,10 @@ var getParams = (id) => ({
69
69
  var apiClient = {
70
70
  get: () => (0, import_http_client.httpService)().get(`${BASE_URL}`).then((res) => res.data.data),
71
71
  create: (payload) => (0, import_http_client.httpService)().post(`${BASE_URL}`, payload).then((res) => res.data.data),
72
+ updateStatuses: (ids, status) => (0, import_http_client.httpService)().put(`${BASE_URL}/status`, {
73
+ ids,
74
+ status
75
+ }),
72
76
  getComponentConfig: (id) => import_editor_v1_adapters.ajax.load(getParams(id)),
73
77
  invalidateComponentConfigCache: (id) => import_editor_v1_adapters.ajax.invalidateCache(getParams(id)),
74
78
  getComponentLockStatus: async (componentId) => await (0, import_http_client.httpService)().get(`${BASE_URL_LOCK_STATUS}`, {
@@ -171,6 +175,28 @@ var selectLoadIsError = (0, import_store2.__createSelector)(selectLoadStatus, (s
171
175
  var selectStyles = (state) => state[SLICE_NAME].styles ?? {};
172
176
  var selectFlatStyles = (0, import_store2.__createSelector)(selectStylesDefinitions, (data) => Object.values(data).flat());
173
177
 
178
+ // src/utils/component-document-data.ts
179
+ var getComponentDocumentData = async (id) => {
180
+ const documentManager = getDocumentsManager();
181
+ try {
182
+ return await documentManager.request(id);
183
+ } catch {
184
+ return null;
185
+ }
186
+ };
187
+ var invalidateComponentDocumentData = (id) => {
188
+ const documentManager = getDocumentsManager();
189
+ documentManager.invalidateCache(id);
190
+ };
191
+ function getDocumentsManager() {
192
+ const extendedWindow = window;
193
+ const documentManager = extendedWindow.elementor?.documents;
194
+ if (!documentManager) {
195
+ throw new Error("Elementor documents manager not found");
196
+ }
197
+ return documentManager;
198
+ }
199
+
174
200
  // src/component-id-transformer.ts
175
201
  var componentIdTransformer = (0, import_editor_canvas.createTransformer)(async (id) => {
176
202
  const unpublishedComponents = selectUnpublishedComponents((0, import_store3.__getState)());
@@ -178,13 +204,8 @@ var componentIdTransformer = (0, import_editor_canvas.createTransformer)(async (
178
204
  if (unpublishedComponent) {
179
205
  return structuredClone(unpublishedComponent.elements);
180
206
  }
181
- const extendedWindow = window;
182
- const documentManager = extendedWindow.elementor?.documents;
183
- if (!documentManager) {
184
- throw new Error("Elementor documents manager not found");
185
- }
186
- const data = await documentManager.request(id);
187
- return data.elements ?? [];
207
+ const data = await getComponentDocumentData(id);
208
+ return data?.elements ?? [];
188
209
  });
189
210
 
190
211
  // src/components/components-tab/components.tsx
@@ -266,7 +287,7 @@ var import_store7 = require("@elementor/store");
266
287
  // src/utils/get-component-ids.ts
267
288
  var import_editor_props = require("@elementor/editor-props");
268
289
  var getComponentIds = (elements) => {
269
- return elements.flatMap((element) => {
290
+ const result = elements.flatMap((element) => {
270
291
  const ids = [];
271
292
  const type = element.widgetType || element.elType;
272
293
  if (type === "e-component" && element.settings?.component && (0, import_editor_props.isTransformable)(element.settings?.component)) {
@@ -277,11 +298,12 @@ var getComponentIds = (elements) => {
277
298
  }
278
299
  return ids;
279
300
  });
301
+ return Array.from(new Set(result));
280
302
  };
281
303
 
282
304
  // src/store/load-components-styles.ts
283
305
  async function loadComponentsStyles(elements) {
284
- const componentIds = Array.from(new Set(getComponentIds(elements)));
306
+ const componentIds = getComponentIds(elements);
285
307
  if (!componentIds.length) {
286
308
  return;
287
309
  }
@@ -1225,10 +1247,13 @@ function removeComponentStyles(id) {
1225
1247
  (0, import_store16.__dispatch)(slice.actions.removeStyles({ id }));
1226
1248
  }
1227
1249
 
1228
- // src/utils/before-save.ts
1250
+ // src/sync/create-components-before-save.ts
1229
1251
  var import_editor_elements5 = require("@elementor/editor-elements");
1230
1252
  var import_store18 = require("@elementor/store");
1231
- var beforeSave = async ({ container, status }) => {
1253
+ async function createComponentsBeforeSave({
1254
+ container,
1255
+ status
1256
+ }) {
1232
1257
  const unpublishedComponents = selectUnpublishedComponents((0, import_store18.__getState)());
1233
1258
  if (!unpublishedComponents.length) {
1234
1259
  return;
@@ -1249,7 +1274,7 @@ var beforeSave = async ({ container, status }) => {
1249
1274
  } catch (error) {
1250
1275
  throw new Error(`Failed to publish components and update component instances: ${error}`);
1251
1276
  }
1252
- };
1277
+ }
1253
1278
  async function createComponents(components, status) {
1254
1279
  const response = await apiClient.create({
1255
1280
  status,
@@ -1298,6 +1323,35 @@ function updateElementComponentId(elementId, componentId) {
1298
1323
  });
1299
1324
  }
1300
1325
 
1326
+ // src/sync/update-components-before-save.ts
1327
+ async function updateComponentsBeforeSave({ status, container }) {
1328
+ if (status !== "publish") {
1329
+ return;
1330
+ }
1331
+ const elements = container.model.get("elements").toJSON();
1332
+ const componentDocumentData = await Promise.all(
1333
+ getComponentIds(elements).map((id) => getComponentDocumentData(id))
1334
+ );
1335
+ const draftIds = componentDocumentData.filter((document) => !!document).filter((document) => {
1336
+ const isDraft = document.status.value === "draft";
1337
+ const hasAutosave = document.revisions.current_id !== document.id;
1338
+ return isDraft || hasAutosave;
1339
+ }).map((document) => document.id);
1340
+ if (draftIds.length === 0) {
1341
+ return;
1342
+ }
1343
+ await apiClient.updateStatuses(draftIds, "publish");
1344
+ draftIds.forEach((id) => invalidateComponentDocumentData(id));
1345
+ }
1346
+
1347
+ // src/sync/before-save.ts
1348
+ var beforeSave = ({ container, status }) => {
1349
+ return Promise.all([
1350
+ createComponentsBeforeSave({ container, status }),
1351
+ updateComponentsBeforeSave({ container, status })
1352
+ ]);
1353
+ };
1354
+
1301
1355
  // src/init.ts
1302
1356
  var COMPONENT_DOCUMENT_TYPE = "elementor_component";
1303
1357
  function init() {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/component-id-transformer.ts","../src/store/store.ts","../src/store/thunks.ts","../src/api.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/components/create-component-form/hooks/use-form.ts","../src/components/create-component-form/utils/component-form-schema.ts","../src/components/edit-component/edit-component.tsx","../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/utils/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 { componentIdTransformer } from './component-id-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 { type ExtendedWindow } from './types';\nimport { beforeSave } from './utils/before-save';\n\nconst COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n\nexport function init() {\n\tstylesRepository.register( componentsStylesProvider );\n\tregisterSlice( slice );\n\tregisterElementType( TYPE, ( options: CreateTemplatedElementTypeOptions ) =>\n\t\tcreateComponentType( { ...options, showLockedByModal: openEditModeDialog } )\n\t);\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\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-id', componentIdTransformer );\n}\n","import { createTransformer } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectUnpublishedComponents } from './store/store';\n\ntype ComponentIdTransformerWindow = Window & {\n\telementor?: {\n\t\tdocuments?: {\n\t\t\trequest: ( id: number ) => Promise< { elements?: unknown[] } >;\n\t\t};\n\t};\n};\n\nexport const componentIdTransformer = createTransformer( async ( id: number ) => {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tconst unpublishedComponent = unpublishedComponents.find( ( component ) => component.id === id );\n\tif ( unpublishedComponent ) {\n\t\treturn structuredClone( unpublishedComponent.elements );\n\t}\n\n\tconst extendedWindow = window as unknown as ComponentIdTransformerWindow;\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\tconst data = await documentManager.request( id );\n\n\treturn data.elements ?? [];\n} );\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport { type Component, type ComponentId, type StylesDefinition } from '../types';\nimport { loadComponents } from './thunks';\n\ntype GetComponentResponse = Component[];\n\nexport type UnpublishedComponent = Component & {\n\telements: V1ElementData[];\n};\n\ntype Status = 'idle' | 'pending' | 'error';\n\ntype ComponentsState = {\n\tdata: Component[];\n\tunpublishedData: UnpublishedComponent[];\n\tloadStatus: Status;\n\tstyles: StylesDefinition;\n};\n\ntype ComponentsSlice = SliceState< typeof slice >;\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\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< Component | Component[] > ) => {\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< Component[] > ) => {\n\t\t\tstate.data = payload;\n\t\t},\n\t\taddUnpublished: ( state, { payload } ) => {\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},\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;\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: Component[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( { id: item.id, name: item.name } ) ),\n\t\t...data,\n\t]\n);\nexport const selectUnpublishedComponents = createSelector(\n\tselectUnpublishedData,\n\t( unpublishedData: UnpublishedComponent[] ) => unpublishedData\n);\nexport const selectComponentsObject = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: Component[], unpublishedData: UnpublishedComponent[] ) =>\n\t\tdata.concat( unpublishedData ).reduce< Record< ComponentId, Component > >( ( acc, component ) => {\n\t\t\tacc[ component.id ] = component;\n\t\t\treturn acc;\n\t\t}, {} )\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() );\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 Component, type DocumentStatus } 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: DocumentStatus;\n\titems: Array< {\n\t\ttemp_id: number;\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< Component >;\n\nexport type CreateComponentResponse = Record< number, 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\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 * 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.id } component={ component } />\n\t\t\t) ) }\n\t\t</List>\n\t);\n}\n\nconst EmptyState = () => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tsx={ { px: 2.5, pt: 10 } }\n\t\t\tgap={ 1.75 }\n\t\t\toverflow=\"hidden\"\n\t\t>\n\t\t\t<Icon fontSize=\"large\">\n\t\t\t\t<EyeIcon fontSize=\"large\" />\n\t\t\t</Icon>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"text.secondary\" fontWeight=\"bold\">\n\t\t\t\t{ __( 'Text that explains that there are no Components yet.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography variant=\"caption\" align=\"center\" color=\"text.secondary\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Once you have Components, this is where you can manage them—rearrange, duplicate, rename and delete irrelevant classes.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<Divider sx={ { width: '100%' } } color=\"text.secondary\" />\n\t\t\t<Typography align=\"left\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t{ __( 'To create a component, first design it, then choose one of three options:', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography\n\t\t\t\talign=\"left\"\n\t\t\t\tvariant=\"caption\"\n\t\t\t\tcolor=\"text.secondary\"\n\t\t\t\tsx={ { display: 'flex', flexDirection: 'column' } }\n\t\t\t>\n\t\t\t\t<span>{ __( '1. Right-click and select Create Component', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '2. Use the component icon in the Structure panel', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '3. Use the component icon in the Edit panel header', 'elementor' ) }</span>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst EmptySearchResult = () => {\n\tconst { searchValue, clearSearch } = useSearch();\n\treturn (\n\t\t<Stack\n\t\t\tcolor={ 'text.secondary' }\n\t\t\tpt={ 5 }\n\t\t\talignItems=\"center\"\n\t\t\tgap={ 1 }\n\t\t\toverflow={ 'hidden' }\n\t\t\tjustifySelf={ 'center' }\n\t\t>\n\t\t\t<ComponentsIcon />\n\t\t\t<Box\n\t\t\t\tsx={ {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t\t{ searchValue && (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>&ldquo;</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span>&rdquo;.</span>\n\t\t\t\t\t</Typography>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t{ __( 'Try something else.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ clearSearch }>\n\t\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t\t</Link>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst useFilteredComponents = () => {\n\tconst { components, isLoading } = useComponents();\n\tconst { searchValue } = useSearch();\n\n\treturn {\n\t\tcomponents: components.filter( ( component ) =>\n\t\t\tcomponent.name.toLowerCase().includes( searchValue.toLowerCase() )\n\t\t),\n\t\tisLoading,\n\t\tsearchValue,\n\t};\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectComponents, selectLoadIsPending } from '../store/store';\n\nexport const useComponents = () => {\n\tconst components = useSelector( selectComponents );\n\tconst isLoading = useSelector( selectLoadIsPending );\n\n\treturn { components, isLoading };\n};\n","import * as React from 'react';\nimport { endDragElementFromPanel, startDragElementFromPanel } from '@elementor/editor-canvas';\nimport { dropElement, type DropElementParams, type V1ElementData } from '@elementor/editor-elements';\nimport { 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\nexport const ComponentItem = ( { component }: { component: Component } ) => {\n\tconst componentModel = createComponentModel( { id: component.id, name: component.name } );\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 = Array.from( new Set( 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';\nimport { isTransformable } from '@elementor/editor-props';\n\nexport const getComponentIds = ( elements: V1ElementData[] ) => {\n\treturn elements.flatMap( ( element ) => {\n\t\tconst ids: number[] = [];\n\n\t\tconst type = element.widgetType || element.elType;\n\n\t\tif ( type === 'e-component' && element.settings?.component && isTransformable( element.settings?.component ) ) {\n\t\t\tids.push( element.settings.component.value );\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","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 V1Element } from '@elementor/editor-elements';\n\nimport { type Component } from '../../../types';\n\nexport const replaceElementWithComponent = ( element: V1Element, component: Component ) => {\n\treplaceElement( {\n\t\tcurrentElement: element,\n\t\tnewElement: createComponentModel( component ),\n\t\twithHistory: false,\n\t} );\n};\n\nexport const createComponentModel = (\n\tcomponent: Component\n): Parameters< typeof replaceElement >[ 0 ][ 'newElement' ] => {\n\treturn {\n\t\telType: 'widget',\n\t\twidgetType: 'e-component',\n\t\tsettings: {\n\t\t\tcomponent: {\n\t\t\t\t$$type: 'component-id',\n\t\t\t\tvalue: component.id,\n\t\t\t},\n\t\t},\n\t\teditor_settings: {\n\t\t\ttitle: component.name,\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, useState } from 'react';\nimport { getElementLabel, type V1Element } from '@elementor/editor-elements';\nimport { ThemeProvider } from '@elementor/editor-ui';\nimport { StarIcon } from '@elementor/icons';\nimport { __useDispatch as useDispatch } from '@elementor/store';\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 { slice } from '../../store/store';\nimport { type ComponentFormValues } from '../../types';\nimport { useForm } from './hooks/use-form';\nimport { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';\nimport { replaceElementWithComponent } from './utils/replace-element-with-component';\n\ntype SaveAsComponentEventData = {\n\telement: V1Element;\n\tanchorPosition: { top: number; left: number };\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: V1Element;\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 dispatch = useDispatch();\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\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 = async ( 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 tempId = generateTempId();\n\n\t\t\tdispatch(\n\t\t\t\tslice.actions.addUnpublished( {\n\t\t\t\t\tid: tempId,\n\t\t\t\t\tname: values.componentName,\n\t\t\t\t\telements: [ element.element.model.toJSON( { remove: [ 'default' ] } ) ],\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\treplaceElementWithComponent( element.element, {\n\t\t\t\tid: tempId,\n\t\t\t\tname: values.componentName,\n\t\t\t} );\n\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\t// Translators: %1$s: Component name, %2$s: Component temp ID\n\t\t\t\tmessage: __( 'Component saved successfully as: %1$s (temp ID: %2$s)', 'elementor' )\n\t\t\t\t\t.replace( '%1$s', values.componentName )\n\t\t\t\t\t.replace( '%2$s', tempId.toString() ),\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\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Popover\n\t\t\t\topen={ element !== null }\n\t\t\t\tonClose={ resetAndClosePopup }\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={ resetAndClosePopup }\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\nexport const generateTempId = () => {\n\treturn Date.now() + Math.floor( Math.random() * 1000000 );\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 * 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';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { selectComponentsObject } from '../../store/store';\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 components = useSelector( selectComponentsObject );\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 = !! components?.[ nextDocument.id ];\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, components, 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","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 { type NumberPropValue } from '@elementor/editor-props';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\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;\n\n\t\tafterSettingsResolve( settings: { [ key: string ]: unknown } ) {\n\t\t\tif ( settings.component ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection( settings.component );\n\n\t\t\t\tthis.collection.models.forEach( setInactiveRecursively );\n\n\t\t\t\tsettings.component = '<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\treturn this.options?.model?.get( 'settings' )?.get( 'component' ) as NumberPropValue;\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()?.value as number;\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: () => this.switchDocument(),\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\tconst { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(\n\t\t\t\tthis.getComponentId()?.value 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()?.value as number,\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\thandleDblClick( e: MouseEvent ) {\n\t\t\te.stopPropagation();\n\n\t\t\tthis.switchDocument();\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().value,\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 { type TransformablePropValue } from '@elementor/editor-props';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectUnpublishedComponents, slice, type UnpublishedComponent } from '../store/store';\nimport { type DocumentStatus } from '../types';\n\ntype Container = {\n\tmodel: {\n\t\tget: ( key: 'elements' ) => {\n\t\t\ttoJSON: () => V1ElementData[];\n\t\t};\n\t};\n};\n\nexport const beforeSave = async ( { container, status }: { container: Container; status: DocumentStatus } ) => {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tif ( ! unpublishedComponents.length ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst tempIdToComponentId = await createComponents( unpublishedComponents, status );\n\n\t\tconst elements = container.model.get( 'elements' ).toJSON();\n\t\tupdateComponentInstances( elements, tempIdToComponentId );\n\n\t\tdispatch(\n\t\t\tslice.actions.add(\n\t\t\t\tunpublishedComponents.map( ( component ) => ( {\n\t\t\t\t\tid: tempIdToComponentId.get( component.id ) as number,\n\t\t\t\t\tname: component.name,\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: DocumentStatus\n): Promise< Map< number, number > > {\n\tconst response = await apiClient.create( {\n\t\tstatus,\n\t\titems: components.map( ( component ) => ( {\n\t\t\ttemp_id: component.id,\n\t\t\ttitle: component.name,\n\t\t\telements: component.elements,\n\t\t} ) ),\n\t} );\n\n\tconst map = new Map< number, number >();\n\n\tObject.entries( response ).forEach( ( [ key, value ] ) => {\n\t\tmap.set( Number( key ), value );\n\t} );\n\n\treturn map;\n}\n\nfunction updateComponentInstances( elements: V1ElementData[], tempIdToComponentId: Map< number, number > ): void {\n\telements.forEach( ( element ) => {\n\t\tconst { shouldUpdate, newComponentId } = shouldUpdateElement( element, tempIdToComponentId );\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, tempIdToComponentId );\n\t\t}\n\t} );\n}\n\nfunction shouldUpdateElement(\n\telement: V1ElementData,\n\ttempIdToComponentId: Map< number, number >\n): { shouldUpdate: true; newComponentId: number } | { shouldUpdate: false; newComponentId: null } {\n\tif ( element.widgetType === 'e-component' ) {\n\t\tconst currentComponentId = ( element.settings?.component as TransformablePropValue< 'component-id', number > )\n\t\t\t?.value;\n\t\tif ( currentComponentId && tempIdToComponentId.has( currentComponentId ) ) {\n\t\t\treturn { shouldUpdate: true, newComponentId: tempIdToComponentId.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: {\n\t\t\t\t$$type: 'component-id',\n\t\t\t\tvalue: componentId,\n\t\t\t},\n\t\t},\n\t\twithHistory: false,\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","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_store","import_ui","import_i18n","import_react","import_i18n","dispatch","useDispatch","validateForm","React","import_react","import_editor_v1_adapters","import_store","React","import_react","import_i18n","import_editor_canvas","import_editor_v1_adapters","useListenTo","import_react","import_utils","useSelector","listenTo","runCommand","React","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_canvas","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","registerSlice","listenTo"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/component-id-transformer.ts","../src/store/store.ts","../src/store/thunks.ts","../src/api.ts","../src/utils/component-document-data.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/components/create-component-form/hooks/use-form.ts","../src/components/create-component-form/utils/component-form-schema.ts","../src/components/edit-component/edit-component.tsx","../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 { componentIdTransformer } from './component-id-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';\n\nconst COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n\nexport function init() {\n\tstylesRepository.register( componentsStylesProvider );\n\tregisterSlice( slice );\n\tregisterElementType( TYPE, ( options: CreateTemplatedElementTypeOptions ) =>\n\t\tcreateComponentType( { ...options, showLockedByModal: openEditModeDialog } )\n\t);\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\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-id', componentIdTransformer );\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 componentIdTransformer = createTransformer( async ( id: number ) => {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tconst unpublishedComponent = unpublishedComponents.find( ( component ) => component.id === id );\n\n\tif ( unpublishedComponent ) {\n\t\treturn structuredClone( unpublishedComponent.elements );\n\t}\n\n\tconst data = await getComponentDocumentData( id );\n\n\treturn data?.elements ?? [];\n} );\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport { type Component, type ComponentId, type StylesDefinition } from '../types';\nimport { loadComponents } from './thunks';\n\ntype GetComponentResponse = Component[];\n\nexport type UnpublishedComponent = Component & {\n\telements: V1ElementData[];\n};\n\ntype Status = 'idle' | 'pending' | 'error';\n\ntype ComponentsState = {\n\tdata: Component[];\n\tunpublishedData: UnpublishedComponent[];\n\tloadStatus: Status;\n\tstyles: StylesDefinition;\n};\n\ntype ComponentsSlice = SliceState< typeof slice >;\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\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< Component | Component[] > ) => {\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< Component[] > ) => {\n\t\t\tstate.data = payload;\n\t\t},\n\t\taddUnpublished: ( state, { payload } ) => {\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},\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;\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: Component[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( { id: item.id, name: item.name } ) ),\n\t\t...data,\n\t]\n);\nexport const selectUnpublishedComponents = createSelector(\n\tselectUnpublishedData,\n\t( unpublishedData: UnpublishedComponent[] ) => unpublishedData\n);\nexport const selectComponentsObject = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: Component[], unpublishedData: UnpublishedComponent[] ) =>\n\t\tdata.concat( unpublishedData ).reduce< Record< ComponentId, Component > >( ( acc, component ) => {\n\t\t\tacc[ component.id ] = component;\n\t\t\treturn acc;\n\t\t}, {} )\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() );\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 Component, type DocumentSaveStatus } 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\ttemp_id: number;\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< Component >;\n\nexport type CreateComponentResponse = Record< number, 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 ComponentIdTransformerWindow = 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 ComponentIdTransformerWindow;\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 * 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.id } component={ component } />\n\t\t\t) ) }\n\t\t</List>\n\t);\n}\n\nconst EmptyState = () => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tsx={ { px: 2.5, pt: 10 } }\n\t\t\tgap={ 1.75 }\n\t\t\toverflow=\"hidden\"\n\t\t>\n\t\t\t<Icon fontSize=\"large\">\n\t\t\t\t<EyeIcon fontSize=\"large\" />\n\t\t\t</Icon>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"text.secondary\" fontWeight=\"bold\">\n\t\t\t\t{ __( 'Text that explains that there are no Components yet.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography variant=\"caption\" align=\"center\" color=\"text.secondary\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Once you have Components, this is where you can manage them—rearrange, duplicate, rename and delete irrelevant classes.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<Divider sx={ { width: '100%' } } color=\"text.secondary\" />\n\t\t\t<Typography align=\"left\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t{ __( 'To create a component, first design it, then choose one of three options:', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography\n\t\t\t\talign=\"left\"\n\t\t\t\tvariant=\"caption\"\n\t\t\t\tcolor=\"text.secondary\"\n\t\t\t\tsx={ { display: 'flex', flexDirection: 'column' } }\n\t\t\t>\n\t\t\t\t<span>{ __( '1. Right-click and select Create Component', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '2. Use the component icon in the Structure panel', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '3. Use the component icon in the Edit panel header', 'elementor' ) }</span>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst EmptySearchResult = () => {\n\tconst { searchValue, clearSearch } = useSearch();\n\treturn (\n\t\t<Stack\n\t\t\tcolor={ 'text.secondary' }\n\t\t\tpt={ 5 }\n\t\t\talignItems=\"center\"\n\t\t\tgap={ 1 }\n\t\t\toverflow={ 'hidden' }\n\t\t\tjustifySelf={ 'center' }\n\t\t>\n\t\t\t<ComponentsIcon />\n\t\t\t<Box\n\t\t\t\tsx={ {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t\t{ searchValue && (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>&ldquo;</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span>&rdquo;.</span>\n\t\t\t\t\t</Typography>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t{ __( 'Try something else.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ clearSearch }>\n\t\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t\t</Link>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst useFilteredComponents = () => {\n\tconst { components, isLoading } = useComponents();\n\tconst { searchValue } = useSearch();\n\n\treturn {\n\t\tcomponents: components.filter( ( component ) =>\n\t\t\tcomponent.name.toLowerCase().includes( searchValue.toLowerCase() )\n\t\t),\n\t\tisLoading,\n\t\tsearchValue,\n\t};\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectComponents, selectLoadIsPending } from '../store/store';\n\nexport const useComponents = () => {\n\tconst components = useSelector( selectComponents );\n\tconst isLoading = useSelector( selectLoadIsPending );\n\n\treturn { components, isLoading };\n};\n","import * as React from 'react';\nimport { endDragElementFromPanel, startDragElementFromPanel } from '@elementor/editor-canvas';\nimport { dropElement, type DropElementParams, type V1ElementData } from '@elementor/editor-elements';\nimport { 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\nexport const ComponentItem = ( { component }: { component: Component } ) => {\n\tconst componentModel = createComponentModel( { id: component.id, name: component.name } );\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';\nimport { isTransformable } from '@elementor/editor-props';\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' && element.settings?.component && isTransformable( element.settings?.component ) ) {\n\t\t\tids.push( element.settings.component.value );\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 V1Element } from '@elementor/editor-elements';\n\nimport { type Component } from '../../../types';\n\nexport const replaceElementWithComponent = ( element: V1Element, component: Component ) => {\n\treplaceElement( {\n\t\tcurrentElement: element,\n\t\tnewElement: createComponentModel( component ),\n\t\twithHistory: false,\n\t} );\n};\n\nexport const createComponentModel = (\n\tcomponent: Component\n): Parameters< typeof replaceElement >[ 0 ][ 'newElement' ] => {\n\treturn {\n\t\telType: 'widget',\n\t\twidgetType: 'e-component',\n\t\tsettings: {\n\t\t\tcomponent: {\n\t\t\t\t$$type: 'component-id',\n\t\t\t\tvalue: component.id,\n\t\t\t},\n\t\t},\n\t\teditor_settings: {\n\t\t\ttitle: component.name,\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, useState } from 'react';\nimport { getElementLabel, type V1Element } from '@elementor/editor-elements';\nimport { ThemeProvider } from '@elementor/editor-ui';\nimport { StarIcon } from '@elementor/icons';\nimport { __useDispatch as useDispatch } from '@elementor/store';\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 { slice } from '../../store/store';\nimport { type ComponentFormValues } from '../../types';\nimport { useForm } from './hooks/use-form';\nimport { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';\nimport { replaceElementWithComponent } from './utils/replace-element-with-component';\n\ntype SaveAsComponentEventData = {\n\telement: V1Element;\n\tanchorPosition: { top: number; left: number };\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: V1Element;\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 dispatch = useDispatch();\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\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 = async ( 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 tempId = generateTempId();\n\n\t\t\tdispatch(\n\t\t\t\tslice.actions.addUnpublished( {\n\t\t\t\t\tid: tempId,\n\t\t\t\t\tname: values.componentName,\n\t\t\t\t\telements: [ element.element.model.toJSON( { remove: [ 'default' ] } ) ],\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\treplaceElementWithComponent( element.element, {\n\t\t\t\tid: tempId,\n\t\t\t\tname: values.componentName,\n\t\t\t} );\n\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\t// Translators: %1$s: Component name, %2$s: Component temp ID\n\t\t\t\tmessage: __( 'Component saved successfully as: %1$s (temp ID: %2$s)', 'elementor' )\n\t\t\t\t\t.replace( '%1$s', values.componentName )\n\t\t\t\t\t.replace( '%2$s', tempId.toString() ),\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\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Popover\n\t\t\t\topen={ element !== null }\n\t\t\t\tonClose={ resetAndClosePopup }\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={ resetAndClosePopup }\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\nexport const generateTempId = () => {\n\treturn Date.now() + Math.floor( Math.random() * 1000000 );\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 * 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';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { selectComponentsObject } from '../../store/store';\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 components = useSelector( selectComponentsObject );\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 = !! components?.[ nextDocument.id ];\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, components, 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","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 { type NumberPropValue } from '@elementor/editor-props';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\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;\n\n\t\tafterSettingsResolve( settings: { [ key: string ]: unknown } ) {\n\t\t\tif ( settings.component ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection( settings.component );\n\n\t\t\t\tthis.collection.models.forEach( setInactiveRecursively );\n\n\t\t\t\tsettings.component = '<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\treturn this.options?.model?.get( 'settings' )?.get( 'component' ) as NumberPropValue;\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()?.value as number;\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: () => this.switchDocument(),\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\tconst { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(\n\t\t\t\tthis.getComponentId()?.value 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()?.value as number,\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\thandleDblClick( e: MouseEvent ) {\n\t\t\te.stopPropagation();\n\n\t\t\tthis.switchDocument();\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().value,\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 { type TransformablePropValue } from '@elementor/editor-props';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectUnpublishedComponents, slice, type UnpublishedComponent } from '../store/store';\nimport { type Container, type DocumentSaveStatus } 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 tempIdToComponentId = await createComponents( unpublishedComponents, status );\n\n\t\tconst elements = container.model.get( 'elements' ).toJSON();\n\t\tupdateComponentInstances( elements, tempIdToComponentId );\n\n\t\tdispatch(\n\t\t\tslice.actions.add(\n\t\t\t\tunpublishedComponents.map( ( component ) => ( {\n\t\t\t\t\tid: tempIdToComponentId.get( component.id ) as number,\n\t\t\t\t\tname: component.name,\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< number, number > > {\n\tconst response = await apiClient.create( {\n\t\tstatus,\n\t\titems: components.map( ( component ) => ( {\n\t\t\ttemp_id: component.id,\n\t\t\ttitle: component.name,\n\t\t\telements: component.elements,\n\t\t} ) ),\n\t} );\n\n\tconst map = new Map< number, number >();\n\n\tObject.entries( response ).forEach( ( [ key, value ] ) => {\n\t\tmap.set( Number( key ), value );\n\t} );\n\n\treturn map;\n}\n\nfunction updateComponentInstances( elements: V1ElementData[], tempIdToComponentId: Map< number, number > ): void {\n\telements.forEach( ( element ) => {\n\t\tconst { shouldUpdate, newComponentId } = shouldUpdateElement( element, tempIdToComponentId );\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, tempIdToComponentId );\n\t\t}\n\t} );\n}\n\nfunction shouldUpdateElement(\n\telement: V1ElementData,\n\ttempIdToComponentId: Map< number, number >\n): { shouldUpdate: true; newComponentId: number } | { shouldUpdate: false; newComponentId: null } {\n\tif ( element.widgetType === 'e-component' ) {\n\t\tconst currentComponentId = ( element.settings?.component as TransformablePropValue< 'component-id', number > )\n\t\t\t?.value;\n\t\tif ( currentComponentId && tempIdToComponentId.has( currentComponentId ) ) {\n\t\t\treturn { shouldUpdate: true, newComponentId: tempIdToComponentId.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: {\n\t\t\t\t$$type: 'component-id',\n\t\t\t\tvalue: 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","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_store","import_ui","import_i18n","import_react","import_i18n","dispatch","useDispatch","validateForm","React","import_react","import_editor_v1_adapters","import_store","React","import_react","import_i18n","import_editor_canvas","import_editor_v1_adapters","useListenTo","import_react","import_utils","useSelector","listenTo","runCommand","React","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_canvas","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","registerSlice","listenTo"]}