@elementor/editor-components 3.35.0-352 → 3.35.0-354

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/init.ts","../src/component-instance-transformer.ts","../src/store/store.ts","../src/store/thunks.ts","../src/api.ts","../src/utils/component-document-data.ts","../src/component-overridable-transformer.ts","../src/components/component-panel-header/component-panel-header.tsx","../src/hooks/use-navigate-back.ts","../src/utils/switch-to-component.ts","../src/components/component-panel-header/component-badge.tsx","../src/components/component-panel-header/use-overridable-props.ts","../src/components/components-tab/components.tsx","../src/components/components-tab/component-search.tsx","../src/components/components-tab/search-provider.tsx","../src/components/components-tab/components-list.tsx","../src/hooks/use-components.ts","../src/components/components-tab/components-item.tsx","../src/store/actions/archive-component.ts","../src/store/actions/load-components-assets.ts","../src/create-component-type.ts","../src/utils/tracking.ts","../src/utils/get-component-ids.ts","../src/store/actions/load-components-overridable-props.ts","../src/store/actions/load-components-styles.ts","../src/utils/get-container-for-new-element.ts","../src/components/create-component-form/utils/replace-element-with-component.ts","../src/components/components-tab/loading-components.tsx","../src/components/consts.ts","../src/components/create-component-form/create-component-form.tsx","../src/store/actions/create-unpublished-component.ts","../src/components/create-component-form/hooks/use-form.ts","../src/components/create-component-form/utils/component-form-schema.ts","../src/components/create-component-form/utils/get-component-event-data.ts","../src/components/edit-component/edit-component.tsx","../src/store/actions/update-current-component.ts","../src/components/edit-component/component-modal.tsx","../src/hooks/use-canvas-document.ts","../src/hooks/use-element-rect.ts","../src/components/in-edit-mode.tsx","../src/components/instance-editing-panel/instance-editing-panel.tsx","../src/prop-types/component-instance-prop-type.ts","../src/prop-types/component-instance-overrides-prop-type.ts","../src/prop-types/component-instance-override-prop-type.ts","../src/components/instance-editing-panel/empty-state.tsx","../src/components/instance-editing-panel/override-props-group.tsx","../src/components/overridable-props/overridable-prop-control.tsx","../src/prop-types/component-overridable-prop-type.ts","../src/provider/overridable-prop-context.tsx","../src/store/actions/update-overridable-prop-origin-value.ts","../src/components/overridable-props/overridable-prop-indicator.tsx","../src/store/actions/set-overridable-prop.ts","../src/components/overridable-props/indicator.tsx","../src/components/overridable-props/overridable-prop-form.tsx","../src/components/overridable-props/utils/get-overridable-prop.ts","../src/mcp/index.ts","../src/mcp/save-as-component-tool.ts","../src/populate-store.ts","../src/store/actions/remove-component-styles.ts","../src/store/components-styles-provider.ts","../src/sync/create-components-before-save.ts","../src/sync/set-component-overridable-props-settings-before-save.ts","../src/sync/update-archived-component-before-save.ts","../src/sync/update-components-before-save.ts","../src/sync/before-save.ts"],"sourcesContent":["import { injectIntoLogic, injectIntoTop } from '@elementor/editor';\nimport {\n\ttype CreateTemplatedElementTypeOptions,\n\tregisterElementType,\n\tsettingsTransformersRegistry,\n} from '@elementor/editor-canvas';\nimport { getV1CurrentDocument } from '@elementor/editor-documents';\nimport {\n\tFIELD_TYPE,\n\tinjectIntoPanelHeaderTop,\n\tregisterControlReplacement,\n\tregisterEditingPanelReplacement,\n\tregisterFieldIndicator,\n} from '@elementor/editor-editing-panel';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { injectTab } from '@elementor/editor-elements-panel';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __registerSlice as registerSlice } from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstanceTransformer } from './component-instance-transformer';\nimport { componentOverridableTransformer } from './component-overridable-transformer';\nimport { ComponentPanelHeader } from './components/component-panel-header/component-panel-header';\nimport { Components } from './components/components-tab/components';\nimport { COMPONENT_DOCUMENT_TYPE } from './components/consts';\nimport { CreateComponentForm } from './components/create-component-form/create-component-form';\nimport { EditComponent } from './components/edit-component/edit-component';\nimport { openEditModeDialog } from './components/in-edit-mode';\nimport { InstanceEditingPanel } from './components/instance-editing-panel/instance-editing-panel';\nimport { OverridablePropControl } from './components/overridable-props/overridable-prop-control';\nimport { OverridablePropIndicator } from './components/overridable-props/overridable-prop-indicator';\nimport { createComponentType, TYPE } from './create-component-type';\nimport { initMcp } from './mcp';\nimport { PopulateStore } from './populate-store';\nimport { componentOverridablePropTypeUtil } from './prop-types/component-overridable-prop-type';\nimport { loadComponentsAssets } from './store/actions/load-components-assets';\nimport { removeComponentStyles } from './store/actions/remove-component-styles';\nimport { componentsStylesProvider } from './store/components-styles-provider';\nimport { slice } from './store/store';\nimport { beforeSave } from './sync/before-save';\nimport { type ExtendedWindow } from './types';\nimport { onElementDrop } from './utils/tracking';\n\nexport function init() {\n\tstylesRepository.register( componentsStylesProvider );\n\n\tregisterSlice( slice );\n\n\tregisterElementType( TYPE, ( options: CreateTemplatedElementTypeOptions ) =>\n\t\tcreateComponentType( { ...options, showLockedByModal: openEditModeDialog } )\n\t);\n\n\tregisterDataHook( 'dependency', 'editor/documents/close', ( args ) => {\n\t\tconst document = getV1CurrentDocument();\n\t\tif ( document.config.type === COMPONENT_DOCUMENT_TYPE ) {\n\t\t\targs.mode = 'autosave';\n\t\t}\n\t\treturn true;\n\t} );\n\n\tregisterDataHook( 'after', 'preview/drop', onElementDrop );\n\n\t( window as unknown as ExtendedWindow ).elementorCommon.__beforeSave = beforeSave;\n\n\tinjectTab( {\n\t\tid: 'components',\n\t\tlabel: __( 'Components', 'elementor' ),\n\t\tcomponent: Components,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'create-component-popup',\n\t\tcomponent: CreateComponentForm,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'components-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'edit-component',\n\t\tcomponent: EditComponent,\n\t} );\n\n\tinjectIntoPanelHeaderTop( {\n\t\tid: 'component-panel-header',\n\t\tcomponent: ComponentPanelHeader,\n\t} );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\tconst { id, config } = getV1CurrentDocument();\n\n\t\tif ( id ) {\n\t\t\tremoveComponentStyles( id );\n\t\t}\n\n\t\tawait loadComponentsAssets( ( config?.elements as V1ElementData[] ) ?? [] );\n\t} );\n\n\tregisterFieldIndicator( {\n\t\tfieldType: FIELD_TYPE.SETTINGS,\n\t\tid: 'component-overridable-prop',\n\t\tpriority: 1,\n\t\tindicator: OverridablePropIndicator,\n\t} );\n\n\tregisterControlReplacement( {\n\t\tcomponent: OverridablePropControl,\n\t\tcondition: ( { value } ) => componentOverridablePropTypeUtil.isValid( value ),\n\t} );\n\n\tregisterEditingPanelReplacement( {\n\t\tid: 'component-instance-edit-panel',\n\t\tcondition: ( _, elementType ) => elementType.key === 'e-component',\n\t\tcomponent: InstanceEditingPanel,\n\t} );\n\n\tsettingsTransformersRegistry.register( 'component-instance', componentInstanceTransformer );\n\tsettingsTransformersRegistry.register( 'overridable', componentOverridableTransformer );\n\n\tinitMcp();\n}\n","import { createTransformer } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectUnpublishedComponents } from './store/store';\nimport { getComponentDocumentData } from './utils/component-document-data';\n\nexport const componentInstanceTransformer = createTransformer(\n\tasync ( { component_id: id }: { component_id: number | string } ) => {\n\t\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\t\tconst unpublishedComponent = unpublishedComponents.find( ( { uid } ) => uid === id );\n\t\tif ( unpublishedComponent ) {\n\t\t\treturn structuredClone( unpublishedComponent.elements );\n\t\t}\n\n\t\tif ( typeof id !== 'number' ) {\n\t\t\tthrow new Error( `Component ID \"${ id }\" not found.` );\n\t\t}\n\n\t\tconst data = await getComponentDocumentData( id );\n\n\t\treturn data?.elements ?? [];\n\t}\n);\n","import { type V1Document } from '@elementor/editor-documents';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport {\n\ttype Component,\n\ttype ComponentId,\n\ttype OverridableProps,\n\ttype PublishedComponent,\n\ttype StylesDefinition,\n\ttype UnpublishedComponent,\n} from '../types';\nimport { loadComponents } from './thunks';\n\ntype GetComponentResponse = PublishedComponent[];\n\ntype Status = 'idle' | 'pending' | 'error';\n\ntype ComponentsState = {\n\tdata: PublishedComponent[];\n\tunpublishedData: UnpublishedComponent[];\n\tloadStatus: Status;\n\tstyles: StylesDefinition;\n\tcreatedThisSession: Component[ 'uid' ][];\n\tarchivedData: PublishedComponent[];\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n};\n\nexport type ComponentsSlice = SliceState< typeof slice >;\n\nexport type ComponentsPathItem = {\n\tinstanceId?: string;\n\tcomponentId: V1Document[ 'id' ];\n};\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\n\tcreatedThisSession: [],\n\tarchivedData: [],\n\tpath: [],\n\tcurrentComponentId: null,\n};\n\nexport const SLICE_NAME = 'components';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tadd: ( state, { payload }: PayloadAction< PublishedComponent | PublishedComponent[] > ) => {\n\t\t\tif ( Array.isArray( payload ) ) {\n\t\t\t\tstate.data = [ ...state.data, ...payload ];\n\t\t\t} else {\n\t\t\t\tstate.data.unshift( payload );\n\t\t\t}\n\t\t},\n\t\tload: ( state, { payload }: PayloadAction< PublishedComponent[] > ) => {\n\t\t\tstate.data = payload;\n\t\t},\n\t\taddUnpublished: ( state, { payload }: PayloadAction< UnpublishedComponent > ) => {\n\t\t\tstate.unpublishedData.unshift( payload );\n\t\t},\n\t\tresetUnpublished: ( state ) => {\n\t\t\tstate.unpublishedData = [];\n\t\t},\n\t\tremoveStyles( state, { payload }: PayloadAction< { id: ComponentId } > ) {\n\t\t\tconst { [ payload.id ]: _, ...rest } = state.styles;\n\n\t\t\tstate.styles = rest;\n\t\t},\n\t\taddStyles: ( state, { payload } ) => {\n\t\t\tstate.styles = { ...state.styles, ...payload };\n\t\t},\n\t\taddCreatedThisSession: ( state, { payload }: PayloadAction< string > ) => {\n\t\t\tstate.createdThisSession.push( payload );\n\t\t},\n\t\tarchive: ( state, { payload }: PayloadAction< number > ) => {\n\t\t\tstate.data = state.data.filter( ( component ) => {\n\t\t\t\tconst isArchived = component.id === payload;\n\t\t\t\tif ( isArchived ) {\n\t\t\t\t\tstate.archivedData.push( component );\n\t\t\t\t}\n\n\t\t\t\treturn ! isArchived;\n\t\t\t} );\n\t\t},\n\t\tsetCurrentComponentId: ( state, { payload }: PayloadAction< V1Document[ 'id' ] | null > ) => {\n\t\t\tstate.currentComponentId = payload;\n\t\t},\n\t\tsetPath: ( state, { payload }: PayloadAction< ComponentsPathItem[] > ) => {\n\t\t\tstate.path = payload;\n\t\t},\n\t\tsetOverridableProps: (\n\t\t\tstate,\n\t\t\t{ payload }: PayloadAction< { componentId: ComponentId; overridableProps: OverridableProps } >\n\t\t) => {\n\t\t\tconst component = state.data.find( ( comp ) => comp.id === payload.componentId );\n\n\t\t\tif ( ! component ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcomponent.overridableProps = payload.overridableProps;\n\t\t},\n\t},\n\textraReducers: ( builder ) => {\n\t\tbuilder.addCase( loadComponents.fulfilled, ( state, { payload }: PayloadAction< GetComponentResponse > ) => {\n\t\t\tstate.data = payload;\n\t\t\tstate.loadStatus = 'idle';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.pending, ( state ) => {\n\t\t\tstate.loadStatus = 'pending';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.rejected, ( state ) => {\n\t\t\tstate.loadStatus = 'error';\n\t\t} );\n\t},\n} );\n\nconst selectData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].data;\nconst selectArchivedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].archivedData;\nconst selectLoadStatus = ( state: ComponentsSlice ) => state[ SLICE_NAME ].loadStatus;\nconst selectStylesDefinitions = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nconst selectUnpublishedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].unpublishedData;\nconst getCreatedThisSession = ( state: ComponentsSlice ) => state[ SLICE_NAME ].createdThisSession;\nconst getPath = ( state: ComponentsSlice ) => state[ SLICE_NAME ].path;\nconst getCurrentComponentId = ( state: ComponentsSlice ) => state[ SLICE_NAME ].currentComponentId;\nexport const selectComponent = ( state: ComponentsSlice, componentId: ComponentId ) =>\n\tstate[ SLICE_NAME ].data.find( ( component ) => component.id === componentId );\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: PublishedComponent[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( { uid: item.uid, name: item.name } ) ),\n\t\t...data,\n\t]\n);\nexport const selectUnpublishedComponents = createSelector(\n\tselectUnpublishedData,\n\t( unpublishedData: UnpublishedComponent[] ) => unpublishedData\n);\nexport const selectLoadIsPending = createSelector( selectLoadStatus, ( status ) => status === 'pending' );\nexport const selectLoadIsError = createSelector( selectLoadStatus, ( status ) => status === 'error' );\nexport const selectStyles = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nexport const selectFlatStyles = createSelector( selectStylesDefinitions, ( data ) => Object.values( data ).flat() );\nexport const selectCreatedThisSession = createSelector(\n\tgetCreatedThisSession,\n\t( createdThisSession ) => createdThisSession\n);\n\nconst DEFAULT_OVERRIDABLE_PROPS: OverridableProps = {\n\tprops: {},\n\tgroups: {\n\t\titems: {},\n\t\torder: [],\n\t},\n};\n\nexport const selectOverridableProps = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\tif ( ! component ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;\n\t}\n);\nexport const selectIsOverridablePropsLoaded = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\treturn !! component?.overridableProps;\n\t}\n);\nexport const selectPath = createSelector( getPath, ( path ) => path );\nexport const selectCurrentComponentId = createSelector(\n\tgetCurrentComponentId,\n\t( currentComponentId ) => currentComponentId\n);\n\nexport const selectArchivedComponents = createSelector(\n\tselectArchivedData,\n\t( archivedData: PublishedComponent[] ) => archivedData\n);\n","import { __createAsyncThunk as createAsyncThunk } from '@elementor/store';\n\nimport { apiClient } from '../api';\n\nconst loadComponents = createAsyncThunk( 'components/load', async () => {\n\tconst response = await apiClient.get();\n\treturn response;\n} );\n\nexport { loadComponents };\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { ajax } from '@elementor/editor-v1-adapters';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type DocumentSaveStatus, type OverridableProps, type PublishedComponent } from './types';\n\nconst BASE_URL = 'elementor/v1/components';\n\nexport type CreateComponentPayload = {\n\tstatus: DocumentSaveStatus;\n\titems: Array< {\n\t\tuid: string;\n\t\ttitle: string;\n\t\telements: V1ElementData[];\n\t} >;\n};\n\ntype ComponentLockStatusResponse = {\n\tis_current_user_allow_to_edit: boolean;\n\tlocked_by: string;\n};\n\ntype GetComponentResponse = Array< PublishedComponent >;\n\nexport type CreateComponentResponse = Record< string, number >;\n\nexport const getParams = ( id: number ) => ( {\n\taction: 'get_document_config',\n\tunique_id: `document-config-${ id }`,\n\tdata: { id },\n} );\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< HttpResponse< GetComponentResponse > >( `${ BASE_URL }` )\n\t\t\t.then( ( res ) => res.data.data ),\n\tcreate: ( payload: CreateComponentPayload ) =>\n\t\thttpService()\n\t\t\t.post< HttpResponse< CreateComponentResponse > >( `${ BASE_URL }`, payload )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateStatuses: ( ids: number[], status: DocumentSaveStatus ) =>\n\t\thttpService().put( `${ BASE_URL }/status`, {\n\t\t\tids,\n\t\t\tstatus,\n\t\t} ),\n\tgetComponentConfig: ( id: number ) => ajax.load< { id: number }, V1ElementData >( getParams( id ) ),\n\tinvalidateComponentConfigCache: ( id: number ) => ajax.invalidateCache< { id: number } >( getParams( id ) ),\n\tgetComponentLockStatus: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< { data: ComponentLockStatusResponse } >( `${ BASE_URL }/lock-status`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId,\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => {\n\t\t\t\tconst { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data;\n\t\t\t\treturn { isAllowedToSwitchDocument, lockedBy: lockedBy || '' };\n\t\t\t} ),\n\tlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/lock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tunlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/unlock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tgetOverridableProps: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< HttpResponse< OverridableProps > >( `${ BASE_URL }/overridable-props`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId: componentId.toString(),\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateArchivedComponents: async ( componentIds: number[] ) =>\n\t\tawait httpService()\n\t\t\t.post< { data: { failedIds: number[]; successIds: number[]; success: boolean } } >(\n\t\t\t\t`${ BASE_URL }/archive`,\n\t\t\t\t{\n\t\t\t\t\tcomponentIds,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then( ( res ) => res.data.data ),\n};\n","import { type Document, getV1DocumentsManager } from '@elementor/editor-documents';\n\ntype ComponentDocumentData = Document;\n\nexport const getComponentDocumentData = async ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\ttry {\n\t\treturn await documentManager.request< ComponentDocumentData >( id );\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const invalidateComponentDocumentData = ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\tdocumentManager.invalidateCache( id );\n};\n","import { createTransformer } from '@elementor/editor-canvas';\n\nimport { type ComponentOverridable } from './types';\n\nexport const componentOverridableTransformer = createTransformer( ( value: ComponentOverridable ) => {\n\t// todo: render component overrides\n\treturn value.origin_value;\n} );\n","import * as React from 'react';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { ArrowLeftIcon, ComponentsFilledIcon } from '@elementor/icons';\nimport { __useSelector as useSelector } from '@elementor/store';\nimport { Box, Divider, IconButton, Stack, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { selectCurrentComponentId } from '../../store/store';\nimport { ComponentsBadge } from './component-badge';\nimport { useOverridableProps } from './use-overridable-props';\n\nexport const ComponentPanelHeader = () => {\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\tconst onBack = useNavigateBack();\n\tconst componentName = getComponentName();\n\n\tconst overridesCount = overridableProps ? Object.keys( overridableProps.props ).length : 0;\n\n\tif ( ! currentComponentId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Box>\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"center\"\n\t\t\t\tjustifyContent=\"space-between\"\n\t\t\t\tsx={ { height: 48, pl: 1.5, pr: 2, py: 1 } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t<Tooltip title={ __( 'Back', 'elementor' ) }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onBack } aria-label={ __( 'Back', 'elementor' ) }>\n\t\t\t\t\t\t\t<ArrowLeftIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 }>\n\t\t\t\t\t\t<ComponentsFilledIcon fontSize=\"tiny\" stroke=\"currentColor\" />\n\t\t\t\t\t\t<Typography variant=\"caption\" sx={ { fontWeight: 500 } }>\n\t\t\t\t\t\t\t{ componentName }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t\t<ComponentsBadge overridesCount={ overridesCount } />\n\t\t\t</Stack>\n\t\t\t<Divider />\n\t\t</Box>\n\t);\n};\n\nfunction getComponentName() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentDocument = documentsManager.getCurrent();\n\n\treturn currentDocument?.container?.settings?.get( 'post_title' ) ?? '';\n}\n","import { useCallback } from 'react';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectPath } from '../store/store';\nimport { switchToComponent } from '../utils/switch-to-component';\n\nexport function useNavigateBack() {\n\tconst path = useSelector( selectPath );\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\treturn useCallback( () => {\n\t\tconst { componentId: prevComponentId, instanceId: prevComponentInstanceId } = path.at( -2 ) ?? {};\n\n\t\tif ( prevComponentId && prevComponentInstanceId ) {\n\t\t\tswitchToComponent( prevComponentId, prevComponentInstanceId );\n\n\t\t\treturn;\n\t\t}\n\n\t\tswitchToComponent( documentsManager.getInitialId() );\n\t}, [ path, documentsManager ] );\n}\n","import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport function switchToComponent( componentId: number | string, componentInstanceId?: string | null ) {\n\trunCommand( 'editor/documents/switch', {\n\t\tid: componentId,\n\t\tselector: componentInstanceId ? `[data-id=\"${ componentInstanceId }\"]` : undefined,\n\t\tmode: 'autosave',\n\t\tsetAsInitial: false,\n\t\tshouldScroll: false,\n\t} );\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { ComponentPropListIcon } from '@elementor/icons';\nimport { Badge, Box, keyframes, styled, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const ComponentsBadge = ( { overridesCount }: { overridesCount: number } ) => {\n\tconst prevCount = usePrevious( overridesCount );\n\n\tconst isFirstOverride = prevCount === 0 && overridesCount === 1;\n\n\treturn (\n\t\t<StyledBadge\n\t\t\tcolor=\"primary\"\n\t\t\tkey={ overridesCount }\n\t\t\tinvisible={ overridesCount === 0 }\n\t\t\tanimate={ isFirstOverride }\n\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\tbadgeContent={\n\t\t\t\t<Box sx={ { animation: ! isFirstOverride ? `${ slideUp } 300ms ease-out` : 'none' } }>\n\t\t\t\t\t{ overridesCount }\n\t\t\t\t</Box>\n\t\t\t}\n\t\t>\n\t\t\t<ToggleButton value=\"overrides\" size=\"tiny\" aria-label={ __( 'View overrides', 'elementor' ) }>\n\t\t\t\t<ComponentPropListIcon fontSize=\"tiny\" />\n\t\t\t</ToggleButton>\n\t\t</StyledBadge>\n\t);\n};\n\nconst StyledBadge = styled( Badge, { shouldForwardProp: ( prop ) => prop !== 'animate' } )(\n\t( { theme, animate } ) => ( {\n\t\t'& .MuiBadge-badge': {\n\t\t\tminWidth: theme.spacing( 2 ),\n\t\t\theight: theme.spacing( 2 ),\n\t\t\tminHeight: theme.spacing( 2 ),\n\t\t\tmaxWidth: theme.spacing( 2 ),\n\t\t\tfontSize: theme.typography.caption.fontSize as string,\n\t\t\tanimation: animate ? `${ bounceIn } 300ms ease-out` : 'none',\n\t\t},\n\t} )\n);\n\nfunction usePrevious< T >( value: T ) {\n\tconst ref = useRef< T >( value );\n\tuseEffect( () => {\n\t\tref.current = value;\n\t}, [ value ] );\n\treturn ref.current;\n}\n\nconst bounceIn = keyframes`\n\t0% { transform: scale(0) translate(50%, 50%); opacity: 0; }\n\t70% { transform: scale(1.1) translate(50%, -50%); opacity: 1; }\n\t100% { transform: scale(1) translate(50%, -50%); opacity: 1; }\n`;\n\nconst slideUp = keyframes`\n\tfrom { transform: translateY(100%); opacity: 0; }\n\tto { transform: translateY(0); opacity: 1; }\n`;\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { type ComponentsSlice, selectOverridableProps } from '../../store/store';\nimport { type ComponentId, type OverridableProps } from '../../types';\n\nexport function useOverridableProps( componentId: ComponentId | null ): OverridableProps | undefined {\n\treturn useSelector( ( state: ComponentsSlice ) => {\n\t\tif ( ! componentId ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn selectOverridableProps( state, componentId );\n\t} );\n}\n","import * as React from 'react';\nimport { ThemeProvider } from '@elementor/editor-ui';\n\nimport { ComponentSearch } from './component-search';\nimport { ComponentsList } from './components-list';\nimport { SearchProvider } from './search-provider';\n\nexport const Components = () => {\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<SearchProvider localStorageKey=\"elementor-components-search\">\n\t\t\t\t<ComponentSearch />\n\t\t\t\t<ComponentsList />\n\t\t\t</SearchProvider>\n\t\t</ThemeProvider>\n\t);\n};\n","import * as React from 'react';\nimport { SearchIcon } from '@elementor/icons';\nimport { Box, InputAdornment, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearch } from './search-provider';\n\nexport const ComponentSearch = () => {\n\tconst { inputValue, handleChange } = useSearch();\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={ 0.5 } sx={ { width: '100%', px: 2, py: 1.5 } }>\n\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t<TextField\n\t\t\t\t\trole={ 'search' }\n\t\t\t\t\tfullWidth\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t<SearchIcon fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { useSearchState, type UseSearchStateResult } from '@elementor/utils';\n\ntype SearchContextType = Pick< UseSearchStateResult, 'handleChange' | 'inputValue' > & {\n\tsearchValue: UseSearchStateResult[ 'debouncedValue' ];\n\tclearSearch: () => void;\n};\n\nconst SearchContext = createContext< SearchContextType | undefined >( undefined );\n\nexport const SearchProvider = ( {\n\tchildren,\n\tlocalStorageKey,\n}: {\n\tchildren: React.ReactNode;\n\tlocalStorageKey: string;\n} ) => {\n\tconst { debouncedValue, handleChange, inputValue } = useSearchState( { localStorageKey } );\n\n\tconst clearSearch = () => {\n\t\thandleChange( '' );\n\t};\n\n\treturn (\n\t\t<SearchContext.Provider value={ { handleChange, clearSearch, searchValue: debouncedValue, inputValue } }>\n\t\t\t{ children }\n\t\t</SearchContext.Provider>\n\t);\n};\n\nexport const useSearch = () => {\n\tconst context = useContext( SearchContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useSearch must be used within a SearchProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { ComponentsIcon, EyeIcon } from '@elementor/icons';\nimport { Box, Divider, Icon, Link, List, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { ComponentItem } from './components-item';\nimport { LoadingComponents } from './loading-components';\nimport { useSearch } from './search-provider';\n\nexport function ComponentsList() {\n\tconst { components, isLoading, searchValue } = useFilteredComponents();\n\n\tif ( isLoading ) {\n\t\treturn <LoadingComponents />;\n\t}\n\tconst isEmpty = ! components || components.length === 0;\n\tif ( isEmpty ) {\n\t\tif ( searchValue.length > 0 ) {\n\t\t\treturn <EmptySearchResult />;\n\t\t}\n\t\treturn <EmptyState />;\n\t}\n\n\treturn (\n\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 1, px: 2 } }>\n\t\t\t{ components.map( ( component ) => (\n\t\t\t\t<ComponentItem key={ component.uid } component={ component } />\n\t\t\t) ) }\n\t\t</List>\n\t);\n}\n\nconst EmptyState = () => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tsx={ { px: 2.5, pt: 10 } }\n\t\t\tgap={ 1.75 }\n\t\t\toverflow=\"hidden\"\n\t\t>\n\t\t\t<Icon fontSize=\"large\">\n\t\t\t\t<EyeIcon fontSize=\"large\" />\n\t\t\t</Icon>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"text.secondary\" fontWeight=\"bold\">\n\t\t\t\t{ __( 'Text that explains that there are no Components yet.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography variant=\"caption\" align=\"center\" color=\"text.secondary\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Once you have Components, this is where you can manage them—rearrange, duplicate, rename and delete irrelevant classes.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<Divider sx={ { width: '100%' } } color=\"text.secondary\" />\n\t\t\t<Typography align=\"left\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t{ __( 'To create a component, first design it, then choose one of three options:', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography\n\t\t\t\talign=\"left\"\n\t\t\t\tvariant=\"caption\"\n\t\t\t\tcolor=\"text.secondary\"\n\t\t\t\tsx={ { display: 'flex', flexDirection: 'column' } }\n\t\t\t>\n\t\t\t\t<span>{ __( '1. Right-click and select Create Component', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '2. Use the component icon in the Structure panel', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '3. Use the component icon in the Edit panel header', 'elementor' ) }</span>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst EmptySearchResult = () => {\n\tconst { searchValue, clearSearch } = useSearch();\n\treturn (\n\t\t<Stack\n\t\t\tcolor={ 'text.secondary' }\n\t\t\tpt={ 5 }\n\t\t\talignItems=\"center\"\n\t\t\tgap={ 1 }\n\t\t\toverflow={ 'hidden' }\n\t\t\tjustifySelf={ 'center' }\n\t\t>\n\t\t\t<ComponentsIcon />\n\t\t\t<Box\n\t\t\t\tsx={ {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t\t{ searchValue && (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>&ldquo;</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span>&rdquo;.</span>\n\t\t\t\t\t</Typography>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t{ __( 'Try something else.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ clearSearch }>\n\t\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t\t</Link>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst useFilteredComponents = () => {\n\tconst { components, isLoading } = useComponents();\n\tconst { searchValue } = useSearch();\n\n\treturn {\n\t\tcomponents: components.filter( ( component ) =>\n\t\t\tcomponent.name.toLowerCase().includes( searchValue.toLowerCase() )\n\t\t),\n\t\tisLoading,\n\t\tsearchValue,\n\t};\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectComponents, selectLoadIsPending } from '../store/store';\n\nexport const useComponents = () => {\n\tconst components = useSelector( selectComponents );\n\tconst isLoading = useSelector( selectLoadIsPending );\n\n\treturn { components, isLoading };\n};\n","import * as React from 'react';\nimport { endDragElementFromPanel, startDragElementFromPanel } from '@elementor/editor-canvas';\nimport { dropElement, type DropElementParams, type V1ElementData } from '@elementor/editor-elements';\nimport { EllipsisWithTooltip, MenuListItem } from '@elementor/editor-ui';\nimport { ComponentsIcon, DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tListItemButton,\n\tListItemIcon,\n\tMenu,\n\tStack,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { archiveComponent } from '../../store/actions/archive-component';\nimport { loadComponentsAssets } from '../../store/actions/load-components-assets';\nimport { type Component } from '../../types';\nimport { getContainerForNewElement } from '../../utils/get-container-for-new-element';\nimport { createComponentModel } from '../create-component-form/utils/replace-element-with-component';\n\ntype ComponentItemProps = {\n\tcomponent: Omit< Component, 'id' > & { id?: number };\n};\n\nexport const ComponentItem = ( { component }: ComponentItemProps ) => {\n\tconst componentModel = createComponentModel( component );\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst handleClick = () => {\n\t\taddComponentToPage( componentModel );\n\t};\n\n\tconst handleDragEnd = () => {\n\t\tloadComponentsAssets( [ componentModel as V1ElementData ] );\n\n\t\tendDragElementFromPanel();\n\t};\n\n\tconst handleArchiveClick = () => {\n\t\tpopupState.close();\n\n\t\tif ( ! component.id ) {\n\t\t\tthrow new Error( 'Component ID is required' );\n\t\t}\n\n\t\tarchiveComponent( component.id );\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<ListItemButton\n\t\t\t\tdraggable\n\t\t\t\tonDragStart={ () => startDragElementFromPanel( componentModel ) }\n\t\t\t\tonDragEnd={ handleDragEnd }\n\t\t\t\tshape=\"rounded\"\n\t\t\t\tsx={ {\n\t\t\t\t\tborder: 'solid 1px',\n\t\t\t\t\tborderColor: 'divider',\n\t\t\t\t\tpy: 0.5,\n\t\t\t\t\tpx: 1,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 1,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Box\n\t\t\t\t\tonClick={ handleClick }\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tgap: 1,\n\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<ListItemIcon size=\"tiny\">\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"tiny\" />\n\t\t\t\t\t</ListItemIcon>\n\t\t\t\t\t<Box display=\"flex\" flex={ 1 } minWidth={ 0 } flexGrow={ 1 }>\n\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\ttitle={ component.name }\n\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\tcolor=\"text.primary\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t\t<IconButton size=\"tiny\" { ...bindTrigger( popupState ) } aria-label=\"More actions\">\n\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</ListItemButton>\n\t\t\t<Menu\n\t\t\t\t{ ...bindMenu( popupState ) }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<MenuListItem sx={ { minWidth: '160px' } } onClick={ handleArchiveClick }>\n\t\t\t\t\t{ __( 'Archive', 'elementor' ) }\n\t\t\t\t</MenuListItem>\n\t\t\t</Menu>\n\t\t</Stack>\n\t);\n};\n\nconst addComponentToPage = ( model: DropElementParams[ 'model' ] ) => {\n\tconst { container, options } = getContainerForNewElement();\n\n\tif ( ! container ) {\n\t\tthrow new Error( `Can't find container to drop new component instance at` );\n\t}\n\n\tloadComponentsAssets( [ model as V1ElementData ] );\n\n\tdropElement( {\n\t\tcontainerId: container.id,\n\t\tmodel,\n\t\toptions: { ...options, useHistory: false, scrollIntoView: true },\n\t} );\n};\n","import { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { slice } from '../store';\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import { isDocumentDirty, setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { getComponentDocumentData } from '../../utils/component-document-data';\nimport { getComponentIds } from '../../utils/get-component-ids';\nimport { loadComponentsOverridableProps } from './load-components-overridable-props';\nimport { loadComponentsStyles } from './load-components-styles';\n\nexport async function loadComponentsAssets( elements: V1ElementData[] ) {\n\tconst componentIds = await getComponentIds( elements );\n\n\treturn Promise.all( [\n\t\tupdateDocumentState( componentIds ),\n\t\tloadComponentsOverridableProps( componentIds ),\n\t\tloadComponentsStyles( componentIds ),\n\t] );\n}\n\nasync function updateDocumentState( componentIds: number[] ) {\n\tconst components = ( await Promise.all( componentIds.map( getComponentDocumentData ) ) ).filter(\n\t\t( document ) => !! document\n\t);\n\n\tconst isDrafted = components.some( isDocumentDirty );\n\n\tif ( isDrafted ) {\n\t\tsetDocumentModifiedStatus( true );\n\t}\n}\n","import {\n\ttype BackboneModel,\n\ttype CreateTemplatedElementTypeOptions,\n\tcreateTemplatedElementView,\n\ttype ElementModel,\n\ttype ElementType,\n\ttype ElementView,\n\ttype LegacyWindow,\n} from '@elementor/editor-canvas';\nimport { getCurrentDocument } from '@elementor/editor-documents';\nimport { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\nimport { type ComponentInstancePropValue, type ExtendedWindow } from './types';\nimport { switchToComponent } from './utils/switch-to-component';\nimport { trackComponentEvent } from './utils/tracking';\n\ntype ContextMenuEventData = { location: string; secondaryLocation: string; trigger: string };\n\nexport type ContextMenuAction = {\n\tname: string;\n\ticon: string;\n\ttitle: string | ( () => string );\n\tisEnabled: () => boolean;\n\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => void;\n};\n\ntype ContextMenuGroupConfig = {\n\tdisable: Record< string, string[] >;\n\tadd: Record< string, { index: number; action: ContextMenuAction } >;\n};\n\ntype ContextMenuGroup = {\n\tname: string;\n\tactions: ContextMenuAction[];\n};\n\nexport const TYPE = 'e-component';\n\nconst updateGroups = ( groups: ContextMenuGroup[], config: ContextMenuGroupConfig ): ContextMenuGroup[] => {\n\tconst disableMap = new Map( Object.entries( config.disable ?? {} ) );\n\tconst addMap = new Map( Object.entries( config.add ?? {} ) );\n\n\treturn groups.map( ( group ) => {\n\t\tconst disabledActions = disableMap.get( group.name ) ?? [];\n\t\tconst addConfig = addMap.get( group.name );\n\n\t\t// Update disabled actions\n\t\tconst updatedActions = group.actions.map( ( action ) =>\n\t\t\tdisabledActions.includes( action.name ) ? { ...action, isEnabled: () => false } : action\n\t\t);\n\n\t\t// Insert additional action if needed\n\t\tif ( addConfig ) {\n\t\t\tupdatedActions.splice( addConfig.index, 0, addConfig.action );\n\t\t}\n\n\t\treturn { ...group, actions: updatedActions };\n\t} );\n};\n\nexport function createComponentType(\n\toptions: CreateTemplatedElementTypeOptions & { showLockedByModal?: ( lockedBy: string ) => void }\n): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn options.type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createComponentView( { ...options } );\n\t\t}\n\t};\n}\n\nfunction createComponentView(\n\toptions: CreateTemplatedElementTypeOptions & {\n\t\tshowLockedByModal?: ( lockedBy: string ) => void;\n\t}\n): typeof ElementView {\n\treturn class extends createTemplatedElementView( options ) {\n\t\tlegacyWindow = window as unknown as LegacyWindow & ExtendedWindow;\n\t\teventsManagerConfig = this.legacyWindow.elementorCommon.eventsManager.config;\n\n\t\tisComponentCurrentlyEdited() {\n\t\t\tconst currentDocument = getCurrentDocument();\n\n\t\t\treturn currentDocument?.id === this.getComponentId();\n\t\t}\n\n\t\tafterSettingsResolve( settings: { [ key: string ]: unknown } ) {\n\t\t\tif ( settings.component_instance ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection(\n\t\t\t\t\tsettings.component_instance\n\t\t\t\t);\n\n\t\t\t\tthis.collection.models.forEach( setInactiveRecursively );\n\n\t\t\t\tsettings.component_instance = '<template data-children-placeholder></template>';\n\t\t\t}\n\n\t\t\treturn settings;\n\t\t}\n\n\t\tgetDomElement() {\n\t\t\t// Component does not have a DOM element, so we return the first child's DOM element.\n\t\t\treturn this.children.findByIndex( 0 )?.getDomElement() ?? this.$el;\n\t\t}\n\n\t\tattachBuffer( collectionView: this, buffer: DocumentFragment ): void {\n\t\t\tconst childrenPlaceholder = collectionView.$el.find( '[data-children-placeholder]' ).get( 0 );\n\n\t\t\tif ( ! childrenPlaceholder ) {\n\t\t\t\tsuper.attachBuffer( collectionView, buffer );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tchildrenPlaceholder.replaceWith( buffer );\n\t\t}\n\n\t\tgetComponentId() {\n\t\t\tconst componentInstance = (\n\t\t\t\tthis.options?.model?.get( 'settings' )?.get( 'component_instance' ) as ComponentInstancePropValue\n\t\t\t )?.value;\n\n\t\t\treturn componentInstance.component_id.value;\n\t\t}\n\n\t\tgetContextMenuGroups() {\n\t\t\tconst filteredGroups = super.getContextMenuGroups().filter( ( group ) => group.name !== 'save' );\n\t\t\tconst componentId = this.getComponentId();\n\t\t\tif ( ! componentId ) {\n\t\t\t\treturn filteredGroups;\n\t\t\t}\n\n\t\t\tconst newGroups = updateGroups(\n\t\t\t\tfilteredGroups as ContextMenuGroup[],\n\t\t\t\tthis._getContextMenuConfig() as unknown as ContextMenuGroupConfig\n\t\t\t);\n\t\t\treturn newGroups;\n\t\t}\n\n\t\t_getContextMenuConfig() {\n\t\t\tconst legacyWindow = this.legacyWindow || ( window as unknown as LegacyWindow & ExtendedWindow );\n\t\t\tconst elementorWithConfig = legacyWindow.elementor as typeof legacyWindow.elementor & {\n\t\t\t\tconfig?: { user?: { is_administrator?: boolean } };\n\t\t\t};\n\t\t\tconst isAdministrator = elementorWithConfig.config?.user?.is_administrator ?? false;\n\n\t\t\tconst addedGroup = {\n\t\t\t\tgeneral: {\n\t\t\t\t\tindex: 1,\n\t\t\t\t\taction: {\n\t\t\t\t\t\tname: 'edit component',\n\t\t\t\t\t\ticon: 'eicon-edit',\n\t\t\t\t\t\ttitle: () => __( 'Edit Component', 'elementor' ),\n\t\t\t\t\t\tisEnabled: () => true,\n\t\t\t\t\t\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => this.editComponent( eventData ),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst disabledGroup = {\n\t\t\t\tclipboard: [ 'pasteStyle', 'resetStyle' ],\n\t\t\t};\n\n\t\t\treturn { add: isAdministrator ? addedGroup : {}, disable: disabledGroup };\n\t\t}\n\n\t\tasync switchDocument() {\n\t\t\t//todo: handle unpublished\n\t\t\tconst { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(\n\t\t\t\tthis.getComponentId() as number\n\t\t\t);\n\n\t\t\tif ( ! isAllowedToSwitchDocument ) {\n\t\t\t\toptions.showLockedByModal?.( lockedBy || '' );\n\t\t\t} else {\n\t\t\t\tswitchToComponent( this.getComponentId(), this.model.get( 'id' ) );\n\t\t\t}\n\t\t}\n\n\t\teditComponent( { trigger, location, secondaryLocation }: ContextMenuEventData ) {\n\t\t\tif ( this.isComponentCurrentlyEdited() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.switchDocument();\n\n\t\t\tconst editorSettings = this.model.get( 'editor_settings' );\n\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'edited',\n\t\t\t\tcomponent_uid: editorSettings?.component_uid,\n\t\t\t\tcomponent_name: editorSettings?.title,\n\t\t\t\tlocation,\n\t\t\t\tsecondary_location: secondaryLocation,\n\t\t\t\ttrigger,\n\t\t\t} );\n\t\t}\n\n\t\thandleDblClick( e: MouseEvent ) {\n\t\t\te.stopPropagation();\n\n\t\t\tconst { triggers, locations, secondaryLocations } = this.eventsManagerConfig;\n\n\t\t\tthis.editComponent( {\n\t\t\t\ttrigger: triggers.doubleClick,\n\t\t\t\tlocation: locations.canvas,\n\t\t\t\tsecondaryLocation: secondaryLocations.canvasElement,\n\t\t\t} );\n\t\t}\n\n\t\tevents() {\n\t\t\treturn {\n\t\t\t\t...super.events(),\n\t\t\t\tdblclick: this.handleDblClick,\n\t\t\t};\n\t\t}\n\n\t\tattributes() {\n\t\t\treturn {\n\t\t\t\t...super.attributes(),\n\t\t\t\t'data-elementor-id': this.getComponentId(),\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction setInactiveRecursively( model: BackboneModel< ElementModel > ) {\n\tconst editSettings = model.get( 'editSettings' );\n\n\tif ( editSettings ) {\n\t\teditSettings.set( 'inactive', true );\n\t}\n\n\tconst elements = model.get( 'elements' );\n\n\tif ( elements ) {\n\t\telements.forEach( ( childModel ) => {\n\t\t\tsetInactiveRecursively( childModel );\n\t\t} );\n\t}\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport { getMixpanel } from '@elementor/mixpanel';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectCreatedThisSession } from '../store/store';\nimport { type ExtendedWindow } from '../types';\n\ntype ComponentEventData = Record< string, unknown > & {\n\taction: 'createClicked' | 'created' | 'createCancelled' | 'instanceAdded' | 'edited';\n};\n\nexport const trackComponentEvent = ( { action, ...data }: ComponentEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.components?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.components[ action ];\n\tdispatchEvent?.( name, data );\n};\n\nexport const onElementDrop = ( _args: unknown, element: V1Element ) => {\n\tif ( ! ( element.model.get( 'widgetType' ) === 'e-component' ) ) {\n\t\treturn;\n\t}\n\n\tconst editorSettings = element.model.get( 'editor_settings' );\n\tconst componentName = editorSettings?.title;\n\tconst componentUID = editorSettings?.component_uid;\n\tconst instanceId = element.id;\n\n\tconst createdThisSession = selectCreatedThisSession( getState() );\n\tconst isSameSessionReuse = componentUID && createdThisSession.includes( componentUID );\n\n\tconst eventsManagerConfig = ( window as unknown as ExtendedWindow ).elementorCommon.eventsManager.config;\n\tconst { locations, secondaryLocations } = eventsManagerConfig;\n\n\ttrackComponentEvent( {\n\t\taction: 'instanceAdded',\n\t\tinstance_id: instanceId,\n\t\tcomponent_uid: componentUID,\n\t\tcomponent_name: componentName,\n\t\tis_same_session_reuse: isSameSessionReuse,\n\t\tlocation: locations.widgetPanel,\n\t\tsecondary_location: secondaryLocations.componentsTab,\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nimport { TYPE } from '../create-component-type';\nimport { type ComponentInstancePropValue } from '../types';\nimport { getComponentDocumentData } from './component-document-data';\n\nexport const getComponentIds = async ( elements: V1ElementData[] ) => {\n\tconst components = elements.map( async ( { widgetType, elType, elements: childElements, settings } ) => {\n\t\tconst ids: number[] = [];\n\n\t\tconst isComponent = [ widgetType, elType ].includes( TYPE );\n\n\t\tif ( isComponent ) {\n\t\t\tconst componentId = ( settings?.component_instance as ComponentInstancePropValue< number > )?.value\n\t\t\t\t?.component_id.value;\n\n\t\t\tconst document = await getComponentDocumentData( componentId );\n\n\t\t\tchildElements = document?.elements;\n\n\t\t\tif ( Boolean( componentId ) ) {\n\t\t\t\tids.push( componentId );\n\t\t\t}\n\t\t}\n\n\t\tif ( !! childElements?.length ) {\n\t\t\tids.push( ...( await getComponentIds( childElements ) ) );\n\t\t}\n\n\t\treturn ids;\n\t} );\n\n\tconst result = ( await Promise.all( components ) ).flat();\n\n\treturn Array.from( new Set( result ) );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { selectIsOverridablePropsLoaded, slice } from '../store';\n\nexport function loadComponentsOverridableProps( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tcomponentIds.forEach( loadComponentOverrides );\n}\n\nasync function loadComponentOverrides( componentId: number ) {\n\tconst isOverridablePropsLoaded = selectIsOverridablePropsLoaded( getState(), componentId );\n\n\tif ( isOverridablePropsLoaded ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = await apiClient.getOverridableProps( componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps,\n\t\t} )\n\t);\n}\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { type ComponentId } from '../../types';\nimport { selectStyles, slice } from '../store';\n\nexport async function loadComponentsStyles( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tconst knownComponents = selectStyles( getState() );\n\tconst unknownComponentIds = componentIds.filter( ( id ) => ! knownComponents[ id ] );\n\n\tif ( ! unknownComponentIds.length ) {\n\t\treturn;\n\t}\n\n\taddComponentStyles( unknownComponentIds );\n}\n\nasync function addComponentStyles( ids: ComponentId[] ) {\n\tconst newComponents = await loadStyles( ids );\n\n\taddStyles( newComponents );\n}\n\nasync function loadStyles( ids: number[] ): Promise< [ number, V1ElementData ][] > {\n\treturn Promise.all( ids.map( async ( id ) => [ id, await apiClient.getComponentConfig( id ) ] ) );\n}\n\nfunction addStyles( data: ( readonly [ ComponentId, V1ElementData ] )[] ) {\n\tconst styles = Object.fromEntries(\n\t\tdata.map( ( [ componentId, componentData ] ) => [ componentId, extractStyles( componentData ) ] )\n\t);\n\n\tdispatch( slice.actions.addStyles( styles ) );\n}\n\nfunction extractStyles( element: V1ElementData ): Array< StyleDefinition > {\n\treturn [ ...Object.values( element.styles ?? {} ), ...( element.elements ?? [] ).flatMap( extractStyles ) ];\n}\n","import {\n\tgetContainer,\n\tgetCurrentDocumentContainer,\n\tgetSelectedElements,\n\ttype V1Element,\n} from '@elementor/editor-elements';\n\nexport const getContainerForNewElement = (): { container: V1Element | null; options?: { at: number } } => {\n\tconst currentDocumentContainer = getCurrentDocumentContainer();\n\tconst selectedElement = getSelectedElementContainer();\n\n\tlet container, options;\n\n\tif ( selectedElement ) {\n\t\tswitch ( selectedElement.model.get( 'elType' ) ) {\n\t\t\tcase 'widget': {\n\t\t\t\tcontainer = selectedElement?.parent;\n\n\t\t\t\tconst selectedElIndex = selectedElement.view?._index ?? -1;\n\n\t\t\t\tif ( selectedElIndex > -1 ) {\n\t\t\t\t\toptions = { at: selectedElIndex + 1 };\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'section': {\n\t\t\t\tcontainer = selectedElement?.children?.[ 0 ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tcontainer = selectedElement;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { container: container ?? currentDocumentContainer, options };\n};\n\nfunction getSelectedElementContainer() {\n\tconst selectedElements = getSelectedElements();\n\n\tif ( selectedElements.length !== 1 ) {\n\t\treturn undefined;\n\t}\n\n\treturn getContainer( selectedElements[ 0 ].id );\n}\n","import { replaceElement, type V1ElementData, type V1ElementModelProps } from '@elementor/editor-elements';\n\ntype ComponentInstanceParams = {\n\tid?: number;\n\tname: string;\n\tuid: string;\n};\n\nexport const replaceElementWithComponent = ( element: V1ElementData, component: ComponentInstanceParams ) => {\n\treplaceElement( {\n\t\tcurrentElement: element,\n\t\tnewElement: createComponentModel( component ),\n\t\twithHistory: false,\n\t} );\n};\n\nexport const createComponentModel = ( component: ComponentInstanceParams ): Omit< V1ElementModelProps, 'id' > => {\n\treturn {\n\t\telType: 'widget',\n\t\twidgetType: 'e-component',\n\t\tsettings: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: {\n\t\t\t\t\t\t$$type: 'number',\n\t\t\t\t\t\tvalue: component.id ?? component.uid,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\teditor_settings: {\n\t\t\ttitle: component.name,\n\t\t\tcomponent_uid: component.uid,\n\t\t},\n\t};\n};\n","import * as React from 'react';\nimport { Box, ListItemButton, Skeleton, Stack } from '@elementor/ui';\nconst ROWS_COUNT = 6;\n\nconst rows = Array.from( { length: ROWS_COUNT }, ( _, index ) => index );\n\nexport const LoadingComponents = () => {\n\treturn (\n\t\t<Stack\n\t\t\taria-label=\"Loading components\"\n\t\t\tgap={ 1 }\n\t\t\tsx={ {\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tposition: 'relative',\n\t\t\t\tmaxHeight: '300px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t'&:after': {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tcontent: '\"\"',\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '300px',\n\t\t\t\t\tbackground: 'linear-gradient(to top, white, transparent)',\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ rows.map( ( row ) => (\n\t\t\t\t<ListItemButton\n\t\t\t\t\tkey={ row }\n\t\t\t\t\tsx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t>\n\t\t\t\t\t<Box display=\"flex\" gap={ 1 } width=\"100%\">\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '24px' } height={ '36px' } />\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '100%' } height={ '36px' } />\n\t\t\t\t\t</Box>\n\t\t\t\t</ListItemButton>\n\t\t\t) ) }\n\t\t</Stack>\n\t);\n};\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n","import * as React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getElementLabel, type V1ElementData } from '@elementor/editor-elements';\nimport { Form as FormElement, ThemeProvider } from '@elementor/editor-ui';\nimport { StarIcon } from '@elementor/icons';\nimport { Alert, Button, FormLabel, Grid, Popover, Snackbar, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { createUnpublishedComponent } from '../../store/actions/create-unpublished-component';\nimport { type ComponentFormValues } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { useForm } from './hooks/use-form';\nimport { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';\nimport {\n\ttype ComponentEventData,\n\ttype ContextMenuEventOptions,\n\tgetComponentEventData,\n} from './utils/get-component-event-data';\n\ntype SaveAsComponentEventData = {\n\telement: V1ElementData;\n\tanchorPosition: { top: number; left: number };\n\toptions?: ContextMenuEventOptions;\n};\n\ntype ResultNotification = {\n\tshow: boolean;\n\tmessage: string;\n\ttype: 'success' | 'error';\n};\n\nexport function CreateComponentForm() {\n\tconst [ element, setElement ] = useState< {\n\t\telement: V1ElementData;\n\t\telementLabel: string;\n\t} | null >( null );\n\n\tconst [ anchorPosition, setAnchorPosition ] = useState< { top: number; left: number } >();\n\n\tconst [ resultNotification, setResultNotification ] = useState< ResultNotification | null >( null );\n\n\tconst eventData = useRef< ComponentEventData | null >( null );\n\n\tuseEffect( () => {\n\t\tconst OPEN_SAVE_AS_COMPONENT_FORM_EVENT = 'elementor/editor/open-save-as-component-form';\n\n\t\tconst openPopup = ( event: CustomEvent< SaveAsComponentEventData > ) => {\n\t\t\tsetElement( { element: event.detail.element, elementLabel: getElementLabel( event.detail.element.id ) } );\n\t\t\tsetAnchorPosition( event.detail.anchorPosition );\n\n\t\t\teventData.current = getComponentEventData( event.detail.element, event.detail.options );\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'createClicked',\n\t\t\t\t...eventData.current,\n\t\t\t} );\n\t\t};\n\n\t\twindow.addEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\t\t};\n\t}, [] );\n\n\tconst handleSave = ( values: ComponentFormValues ) => {\n\t\ttry {\n\t\t\tif ( ! element ) {\n\t\t\t\tthrow new Error( `Can't save element as component: element not found` );\n\t\t\t}\n\n\t\t\tconst uid = createUnpublishedComponent( values.componentName, element.element, eventData.current );\n\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\t// Translators: %1$s: Component name, %2$s: Component UID\n\t\t\t\tmessage: __( 'Component saved successfully as: %1$s (UID: %2$s)', 'elementor' )\n\t\t\t\t\t.replace( '%1$s', values.componentName )\n\t\t\t\t\t.replace( '%2$s', uid ),\n\t\t\t\ttype: 'success',\n\t\t\t} );\n\n\t\t\tresetAndClosePopup();\n\t\t} catch {\n\t\t\tconst errorMessage = __( 'Failed to save component. Please try again.', 'elementor' );\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t\ttype: 'error',\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst resetAndClosePopup = () => {\n\t\tsetElement( null );\n\t\tsetAnchorPosition( undefined );\n\t};\n\n\tconst cancelSave = () => {\n\t\tresetAndClosePopup();\n\n\t\ttrackComponentEvent( {\n\t\t\taction: 'createCancelled',\n\t\t\t...eventData.current,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Popover\n\t\t\t\topen={ element !== null }\n\t\t\t\tonClose={ cancelSave }\n\t\t\t\tanchorReference=\"anchorPosition\"\n\t\t\t\tanchorPosition={ anchorPosition }\n\t\t\t>\n\t\t\t\t{ element !== null && (\n\t\t\t\t\t<Form\n\t\t\t\t\t\tinitialValues={ { componentName: element.elementLabel } }\n\t\t\t\t\t\thandleSave={ handleSave }\n\t\t\t\t\t\tclosePopup={ cancelSave }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</Popover>\n\t\t\t<Snackbar open={ resultNotification?.show } onClose={ () => setResultNotification( null ) }>\n\t\t\t\t<Alert\n\t\t\t\t\tonClose={ () => setResultNotification( null ) }\n\t\t\t\t\tseverity={ resultNotification?.type }\n\t\t\t\t\tsx={ { width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t{ resultNotification?.message }\n\t\t\t\t</Alert>\n\t\t\t</Snackbar>\n\t\t</ThemeProvider>\n\t);\n}\n\nconst FONT_SIZE = 'tiny';\n\nconst Form = ( {\n\tinitialValues,\n\thandleSave,\n\tclosePopup,\n}: {\n\tinitialValues: ComponentFormValues;\n\thandleSave: ( values: ComponentFormValues ) => void;\n\tclosePopup: () => void;\n} ) => {\n\tconst { values, errors, isValid, handleChange, validateForm } = useForm< ComponentFormValues >( initialValues );\n\n\tconst { components } = useComponents();\n\n\tconst existingComponentNames = useMemo( () => {\n\t\treturn components?.map( ( component ) => component.name ) ?? [];\n\t}, [ components ] );\n\n\tconst changeValidationSchema = useMemo(\n\t\t() => createBaseComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\tconst submitValidationSchema = useMemo(\n\t\t() => createSubmitComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\n\tconst handleSubmit = () => {\n\t\tconst { success, parsedValues } = validateForm( submitValidationSchema );\n\n\t\tif ( success ) {\n\t\t\thandleSave( parsedValues );\n\t\t}\n\t};\n\n\tconst texts = {\n\t\theading: __( 'Save as a component', 'elementor' ),\n\t\tname: __( 'Name', 'elementor' ),\n\t\tcancel: __( 'Cancel', 'elementor' ),\n\t\tcreate: __( 'Create', 'elementor' ),\n\t};\n\n\tconst nameInputId = 'component-name';\n\n\treturn (\n\t\t<FormElement onSubmit={ handleSubmit }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t<StarIcon fontSize={ FONT_SIZE } />\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ texts.heading }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" p={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel htmlFor={ nameInputId } size=\"tiny\">\n\t\t\t\t\t\t\t{ texts.name }\n\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tid={ nameInputId }\n\t\t\t\t\t\t\tsize={ FONT_SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ values.componentName }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\t\thandleChange( e, 'componentName', changeValidationSchema )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinputProps={ { style: { color: 'text.primary', fontWeight: '600' } } }\n\t\t\t\t\t\t\terror={ Boolean( errors.componentName ) }\n\t\t\t\t\t\t\thelperText={ errors.componentName }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button onClick={ closePopup } color=\"secondary\" variant=\"text\" size=\"small\">\n\t\t\t\t\t\t{ texts.cancel }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! isValid } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ texts.create }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</FormElement>\n\t);\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { type ComponentEventData } from '../../components/create-component-form/utils/get-component-event-data';\nimport { replaceElementWithComponent } from '../../components/create-component-form/utils/replace-element-with-component';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { slice } from '../store';\n\nexport function createUnpublishedComponent(\n\tname: string,\n\telement: V1ElementData,\n\teventData: ComponentEventData | null\n) {\n\tconst uid = generateUniqueId( 'component' );\n\tconst componentBase = { uid, name };\n\n\tdispatch(\n\t\tslice.actions.addUnpublished( {\n\t\t\t...componentBase,\n\t\t\telements: [ element ],\n\t\t} )\n\t);\n\n\tdispatch( slice.actions.addCreatedThisSession( uid ) );\n\n\treplaceElementWithComponent( element, componentBase );\n\n\ttrackComponentEvent( {\n\t\taction: 'created',\n\t\tcomponent_uid: uid,\n\t\tcomponent_name: name,\n\t\t...eventData,\n\t} );\n\n\trunCommand( 'document/save/auto' );\n\n\treturn uid;\n}\n","import { useMemo, useState } from 'react';\nimport { type z } from '@elementor/schema';\n\nexport const useForm = < TValues extends Record< string, unknown > >( initialValues: TValues ) => {\n\tconst [ values, setValues ] = useState< TValues >( initialValues );\n\tconst [ errors, setErrors ] = useState< Partial< Record< keyof TValues, string > > >( {} );\n\n\tconst isValid = useMemo( () => {\n\t\treturn ! Object.values( errors ).some( ( error ) => error );\n\t}, [ errors ] );\n\n\tconst handleChange = (\n\t\te: React.ChangeEvent< HTMLInputElement >,\n\t\tfield: keyof TValues,\n\t\tvalidationSchema: z.ZodType< TValues >\n\t) => {\n\t\tconst updated = { ...values, [ field ]: e.target.value };\n\t\tsetValues( updated );\n\n\t\tconst { success, errors: validationErrors } = validateForm( updated, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t} else {\n\t\t\tsetErrors( {} );\n\t\t}\n\t};\n\n\tconst validate = (\n\t\tvalidationSchema: z.ZodType< TValues >\n\t): { success: true; parsedValues: TValues } | { success: false; parsedValues?: never } => {\n\t\tconst { success, errors: validationErrors, parsedValues } = validateForm( values, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t\treturn { success };\n\t\t}\n\t\tsetErrors( {} );\n\t\treturn { success, parsedValues };\n\t};\n\n\treturn {\n\t\tvalues,\n\t\terrors,\n\t\tisValid,\n\t\thandleChange,\n\t\tvalidateForm: validate,\n\t};\n};\n\nconst validateForm = < TValues extends Record< string, unknown > >(\n\tvalues: TValues,\n\tschema: z.ZodType< TValues >\n):\n\t| { success: false; parsedValues?: never; errors: Partial< Record< keyof TValues, string > > }\n\t| { success: true; parsedValues: TValues; errors?: never } => {\n\tconst result = schema.safeParse( values );\n\n\tif ( result.success ) {\n\t\treturn { success: true, parsedValues: result.data };\n\t}\n\n\tconst errors = {} as Partial< Record< keyof TValues, string > >;\n\n\t( Object.entries( result.error.formErrors.fieldErrors ) as Array< [ keyof TValues, string[] ] > ).forEach(\n\t\t( [ field, error ] ) => {\n\t\t\terrors[ field ] = error[ 0 ];\n\t\t}\n\t);\n\n\treturn { success: false, errors };\n};\n","import { z } from '@elementor/schema';\nimport { __ } from '@wordpress/i18n';\n\nconst MIN_NAME_LENGTH = 2;\nconst MAX_NAME_LENGTH = 50;\n\nexport const createBaseComponentSchema = ( existingNames: string[] ) => {\n\treturn z.object( {\n\t\tcomponentName: z\n\t\t\t.string()\n\t\t\t.trim()\n\t\t\t.max(\n\t\t\t\tMAX_NAME_LENGTH,\n\t\t\t\t__( 'Component name is too long. Please keep it under 50 characters.', 'elementor' )\n\t\t\t)\n\t\t\t.refine( ( value ) => ! existingNames.includes( value ), {\n\t\t\t\tmessage: __( 'Component name already exists', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n\nexport const createSubmitComponentSchema = ( existingNames: string[] ) => {\n\tconst baseSchema = createBaseComponentSchema( existingNames );\n\n\treturn baseSchema.extend( {\n\t\tcomponentName: baseSchema.shape.componentName\n\t\t\t.refine( ( value ) => value.length > 0, {\n\t\t\t\tmessage: __( 'Component name is required.', 'elementor' ),\n\t\t\t} )\n\t\t\t.refine( ( value ) => value.length >= MIN_NAME_LENGTH, {\n\t\t\t\tmessage: __( 'Component name is too short. Please enter at least 2 characters.', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nexport type ComponentEventData = {\n\tnested_elements_count: number;\n\tnested_components_count: number;\n\ttop_element_type: string;\n\tlocation?: string;\n\tsecondary_location?: string;\n\ttrigger?: string;\n};\n\nexport type ContextMenuEventOptions = Record< string, unknown > & {\n\tlocation: string;\n\tsecondaryLocation: string;\n\ttrigger: string;\n};\n\nexport const getComponentEventData = (\n\tcontainerElement: V1ElementData,\n\toptions?: ContextMenuEventOptions\n): ComponentEventData => {\n\tconst { elementsCount, componentsCount } = countNestedElements( containerElement );\n\n\treturn {\n\t\tnested_elements_count: elementsCount,\n\t\tnested_components_count: componentsCount,\n\t\ttop_element_type: containerElement.elType,\n\t\tlocation: options?.location,\n\t\tsecondary_location: options?.secondaryLocation,\n\t\ttrigger: options?.trigger,\n\t};\n};\n\nfunction countNestedElements( container: V1ElementData ): { elementsCount: number; componentsCount: number } {\n\tif ( ! container.elements || container.elements.length === 0 ) {\n\t\treturn { elementsCount: 0, componentsCount: 0 };\n\t}\n\n\tlet elementsCount = container.elements.length;\n\tlet componentsCount = 0;\n\n\tfor ( const element of container.elements ) {\n\t\tif ( element.widgetType === 'e-component' ) {\n\t\t\tcomponentsCount++;\n\t\t}\n\n\t\tconst { elementsCount: nestedElementsCount, componentsCount: nestedComponentsCount } =\n\t\t\tcountNestedElements( element );\n\t\telementsCount += nestedElementsCount;\n\t\tcomponentsCount += nestedComponentsCount;\n\t}\n\n\treturn { elementsCount, componentsCount };\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { getV1DocumentsManager, type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { updateCurrentComponent } from '../../store/actions/update-current-component';\nimport { type ComponentsPathItem, selectCurrentComponentId, selectPath } from '../../store/store';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { ComponentModal } from './component-modal';\n\nexport function EditComponent() {\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\n\tuseHandleDocumentSwitches();\n\n\tconst onBack = useNavigateBack();\n\n\tconst elementDom = getComponentDOMElement( currentComponentId ?? undefined );\n\n\tif ( ! elementDom ) {\n\t\treturn null;\n\t}\n\n\treturn <ComponentModal element={ elementDom } onClose={ onBack } />;\n}\n\nfunction useHandleDocumentSwitches() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\tconst path = useSelector( selectPath );\n\n\tuseEffect( () => {\n\t\treturn listenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => {\n\t\t\tconst nextDocument = documentsManager.getCurrent();\n\n\t\t\tif ( nextDocument.id === currentComponentId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( currentComponentId ) {\n\t\t\t\tapiClient.unlockComponent( currentComponentId );\n\t\t\t}\n\n\t\t\tconst isComponent = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;\n\n\t\t\tif ( ! isComponent ) {\n\t\t\t\tupdateCurrentComponent( { path: [], currentComponentId: null } );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateCurrentComponent( {\n\t\t\t\tpath: getUpdatedComponentPath( path, nextDocument ),\n\t\t\t\tcurrentComponentId: nextDocument.id,\n\t\t\t} );\n\t\t} );\n\t}, [ path, documentsManager, currentComponentId ] );\n}\n\nfunction getUpdatedComponentPath( path: ComponentsPathItem[], nextDocument: V1Document ): ComponentsPathItem[] {\n\tconst componentIndex = path.findIndex( ( { componentId } ) => componentId === nextDocument.id );\n\n\tif ( componentIndex >= 0 ) {\n\t\t// When exiting the editing of a nested component - we in fact go back a step\n\t\t// so we need to make sure the path is cleaned up of any newer items\n\t\t// By doing it with the slice and not a simple pop() - we could jump to any component in the path and make sure it becomes the current one\n\t\treturn path.slice( 0, componentIndex + 1 );\n\t}\n\n\treturn [\n\t\t...path,\n\t\t{\n\t\t\tinstanceId: nextDocument?.container.view?.el?.dataset.id,\n\t\t\tcomponentId: nextDocument.id,\n\t\t},\n\t];\n}\n\nfunction getComponentDOMElement( id: V1Document[ 'id' ] | undefined ) {\n\tif ( ! id ) {\n\t\treturn null;\n\t}\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\tconst currentComponent = documentsManager.get( id );\n\n\tconst widget = currentComponent?.container as V1Element;\n\tconst container = ( widget?.view?.el?.children?.[ 0 ] ?? null ) as HTMLElement | null;\n\tconst elementDom = container?.children[ 0 ] as HTMLElement | null;\n\n\treturn elementDom ?? null;\n}\n","import { setDocumentModifiedStatus, type V1Document } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { type ComponentsPathItem, slice } from '../store';\n\nexport function updateCurrentComponent( {\n\tpath,\n\tcurrentComponentId,\n}: {\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n} ) {\n\tconst dispatch = getStore()?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.setPath( path ) );\n\tdispatch( slice.actions.setCurrentComponentId( currentComponentId ) );\n}\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import * as React from 'react';\nimport { type CSSProperties, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCanvasDocument } from '../../hooks/use-canvas-document';\nimport { useElementRect } from '../../hooks/use-element-rect';\n\ntype ModalProps = {\n\telement: HTMLElement;\n\tonClose: () => void;\n};\nexport function ComponentModal( { element, onClose }: ModalProps ) {\n\tconst canvasDocument = useCanvasDocument();\n\n\tuseEffect( () => {\n\t\tconst handleEsc = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tcanvasDocument?.body.addEventListener( 'keydown', handleEsc );\n\n\t\treturn () => {\n\t\t\tcanvasDocument?.body.removeEventListener( 'keydown', handleEsc );\n\t\t};\n\t}, [ canvasDocument, onClose ] );\n\n\tif ( ! canvasDocument?.body ) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<>\n\t\t\t<BlockEditPage />\n\t\t\t<Backdrop canvas={ canvasDocument } element={ element } onClose={ onClose } />\n\t\t</>,\n\t\tcanvasDocument.body\n\t);\n}\n\nfunction Backdrop( { canvas, element, onClose }: { canvas: HTMLDocument; element: HTMLElement; onClose: () => void } ) {\n\tconst rect = useElementRect( element );\n\tconst backdropStyle: CSSProperties = {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\twidth: '100vw',\n\t\theight: '100vh',\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\t\tzIndex: 999,\n\t\tpointerEvents: 'painted',\n\t\tcursor: 'pointer',\n\t\tclipPath: getRoundedRectPath( rect, canvas.defaultView as Window, 5 ),\n\t};\n\n\tconst handleKeyDown = ( event: React.KeyboardEvent ) => {\n\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\tevent.preventDefault();\n\t\t\tonClose();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tstyle={ backdropStyle }\n\t\t\tonClick={ onClose }\n\t\t\tonKeyDown={ handleKeyDown }\n\t\t\trole=\"button\"\n\t\t\ttabIndex={ 0 }\n\t\t\taria-label={ __( 'Exit component editing mode', 'elementor' ) }\n\t\t/>\n\t);\n}\n\nfunction getRoundedRectPath( rect: DOMRect, viewport: Window, borderRadius: number ) {\n\tconst padding = borderRadius / 2;\n\tconst { x: originalX, y: originalY, width: originalWidth, height: originalHeight } = rect;\n\tconst x = originalX - padding;\n\tconst y = originalY - padding;\n\tconst width = originalWidth + 2 * padding;\n\tconst height = originalHeight + 2 * padding;\n\tconst radius = Math.min( borderRadius, width / 2, height / 2 );\n\n\tconst { innerWidth: vw, innerHeight: vh } = viewport;\n\n\tconst path = `path(evenodd, 'M 0 0 \n\t\tL ${ vw } 0\n\t\tL ${ vw } ${ vh }\n\t\tL 0 ${ vh }\n\t\tZ\n\t\tM ${ x + radius } ${ y }\n\t\tL ${ x + width - radius } ${ y }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width } ${ y + radius }\n\t\tL ${ x + width } ${ y + height - radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width - radius } ${ y + height }\n\t\tL ${ x + radius } ${ y + height }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x } ${ y + height - radius }\n\t\tL ${ x } ${ y + radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + radius } ${ y }\n \tZ'\n\t)`;\n\n\treturn path.replace( /\\s{2,}/g, ' ' );\n}\n\n/**\n * when switching to another document id, we get a document handler when hovering\n * this functionality originates in Pro, and is intended for editing templates, e.g. header/footer\n * in components we don't want that, so the easy way out is to prevent it of being displayed via a CSS rule\n */\nfunction BlockEditPage() {\n\tconst blockV3DocumentHandlesStyles = `\n\t.elementor-editor-active {\n\t\t& .elementor-section-wrap.ui-sortable {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\t& *[data-editable-elementor-document]:not(.elementor-edit-mode):hover {\n\t\t\t& .elementor-document-handle:not(.elementor-document-save-back-handle) {\n\t\t\t\tdisplay: none;\n\n\t\t\t\t&::before,\n\t\t\t\t& .elementor-document-handle__inner {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t`;\n\n\treturn <style data-e-style-id=\"e-block-v3-document-handles-styles\">{ blockV3DocumentHandlesStyles }</style>;\n}\n","import { getCanvasIframeDocument } from '@elementor/editor-canvas';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\n\nexport function useCanvasDocument() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument() );\n}\n","import { useEffect, useState } from 'react';\nimport { throttle } from '@elementor/utils';\n\nexport function useElementRect( element: HTMLElement | null ) {\n\tconst [ rect, setRect ] = useState< DOMRect >( new DOMRect( 0, 0, 0, 0 ) );\n\n\tconst onChange = throttle(\n\t\t() => {\n\t\t\tsetRect( element?.getBoundingClientRect() ?? new DOMRect( 0, 0, 0, 0 ) );\n\t\t},\n\t\t20,\n\t\ttrue\n\t);\n\n\tuseScrollListener( { element, onChange } );\n\tuseResizeListener( { element, onChange } );\n\tuseMutationsListener( { element, onChange } );\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tonChange.cancel();\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\treturn rect;\n}\n\ntype ListenerProps = {\n\telement: HTMLElement | null;\n\tonChange: () => void;\n};\n\nfunction useScrollListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'scroll', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\twin?.removeEventListener( 'scroll', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useResizeListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeObserver = new ResizeObserver( onChange );\n\t\tresizeObserver.observe( element );\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'resize', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\twin?.removeEventListener( 'resize', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useMutationsListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mutationObserver = new MutationObserver( onChange );\n\t\tmutationObserver.observe( element, { childList: true, subtree: true } );\n\n\t\treturn () => {\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, [ element, onChange ] );\n}\n","import * as React from 'react';\nimport { closeDialog, openDialog } from '@elementor/editor-ui';\nimport { InfoCircleFilledIcon } from '@elementor/icons';\nimport { Box, Button, DialogActions, DialogContent, DialogHeader, Icon, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const openEditModeDialog = ( lockedBy: string ) => {\n\topenDialog( {\n\t\tcomponent: <EditModeDialog lockedBy={ lockedBy } />,\n\t} );\n};\n\nconst EditModeDialog = ( { lockedBy }: { lockedBy: string } ) => {\n\t/* translators: %s is the name of the user who is currently editing the document */\n\tconst content = __( '%s is currently editing this document', 'elementor' ).replace( '%s', lockedBy );\n\treturn (\n\t\t<>\n\t\t\t<DialogHeader logo={ false }>\n\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t\t<Icon color=\"secondary\">\n\t\t\t\t\t\t<InfoCircleFilledIcon fontSize=\"medium\" />\n\t\t\t\t\t</Icon>\n\t\t\t\t\t<Typography variant=\"subtitle1\">{ content }</Typography>\n\t\t\t\t</Box>\n\t\t\t</DialogHeader>\n\t\t\t<DialogContent>\n\t\t\t\t<Stack spacing={ 2 } direction=\"column\">\n\t\t\t\t\t<Typography variant=\"body2\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'You can wait for them to finish or reach out to coordinate your changes together.',\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<DialogActions>\n\t\t\t\t\t\t<Button color=\"secondary\" variant=\"contained\" onClick={ closeDialog }>\n\t\t\t\t\t\t\t{ __( 'Close', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</DialogActions>\n\t\t\t\t</Stack>\n\t\t\t</DialogContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { useElementSetting, useSelectedElement } from '@elementor/editor-elements';\nimport { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { type NumberPropValue } from '@elementor/editor-props';\nimport { ComponentsIcon, PencilIcon } from '@elementor/icons';\nimport { __getState as getState } from '@elementor/store';\nimport { IconButton, Stack, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstancePropTypeUtil } from '../../prop-types/component-instance-prop-type';\nimport { selectComponent, selectOverridableProps } from '../../store/store';\nimport { type OverridablePropsGroup } from '../../types';\nimport { switchToComponent } from '../../utils/switch-to-component';\nimport { EmptyState } from './empty-state';\nimport { OverridePropsGroup } from './override-props-group';\n\nexport function InstanceEditingPanel() {\n\tconst { element } = useElement();\n\tconst settings = useElementSetting( element.id, 'component_instance' );\n\tconst componentId = ( componentInstancePropTypeUtil.extract( settings )?.component_id as NumberPropValue ).value;\n\n\tconst component = componentId ? selectComponent( getState(), componentId ) : null;\n\tconst overridableProps = componentId ? selectOverridableProps( getState(), componentId ) : null;\n\n\tconst componentInstanceId = useSelectedElement()?.element?.id ?? null;\n\n\tif ( ! componentId || ! overridableProps || ! component ) {\n\t\treturn null;\n\t}\n\n\t/* translators: %s: component name. */\n\tconst panelTitle = __( 'Edit %s', 'elementor' ).replace( '%s', component.name );\n\n\tconst handleEditComponent = () => switchToComponent( componentId, componentInstanceId );\n\n\tconst groups = overridableProps.groups.order\n\t\t.map( ( groupId ) =>\n\t\t\toverridableProps.groups.items[ groupId ] ? overridableProps.groups.items[ groupId ] : null\n\t\t)\n\t\t.filter( Boolean ) as OverridablePropsGroup[];\n\n\tconst isEmpty = groups.length === 0 || Object.keys( overridableProps.props ).length === 0;\n\n\treturn (\n\t\t<>\n\t\t\t<PanelHeader sx={ { justifyContent: 'start' } }>\n\t\t\t\t<Stack direction=\"row\" alignContent=\"space-between\" flexGrow={ 1 }>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"start\" gap={ 1 } flexGrow={ 1 }>\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"small\" sx={ { color: 'text.tertiary' } } />\n\t\t\t\t\t\t<PanelHeaderTitle>{ component.name }</PanelHeaderTitle>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Tooltip title={ panelTitle }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ handleEditComponent } aria-label={ panelTitle }>\n\t\t\t\t\t\t\t<PencilIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</Stack>\n\t\t\t</PanelHeader>\n\t\t\t<PanelBody>\n\t\t\t\t{ isEmpty ? (\n\t\t\t\t\t<EmptyState onEditComponent={ handleEditComponent } />\n\t\t\t\t) : (\n\t\t\t\t\t<Stack direction=\"column\" alignItems=\"stretch\">\n\t\t\t\t\t\t{ groups.map( ( group ) => (\n\t\t\t\t\t\t\t<OverridePropsGroup key={ group.id } group={ group } props={ overridableProps.props } />\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</Stack>\n\t\t\t\t) }\n\t\t\t</PanelBody>\n\t\t</>\n\t);\n}\n","import { createPropUtils, numberPropTypeUtil } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridesPropTypeUtil } from './component-instance-overrides-prop-type';\n\nexport const componentInstancePropTypeUtil = createPropUtils(\n\t'component-instance',\n\tz.object( {\n\t\tcomponent_id: numberPropTypeUtil.schema,\n\t\toverrides: componentInstanceOverridesPropTypeUtil.schema,\n\t} )\n);\n\nexport type ComponentInstancePropValue = z.infer< typeof componentInstancePropTypeUtil.schema >[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridePropTypeUtil } from './component-instance-override-prop-type';\n\nexport const componentInstanceOverridesPropTypeUtil = createPropUtils(\n\t'overrides',\n\tz.array( componentInstanceOverridePropTypeUtil.schema )\n);\n\nexport type ComponentInstanceOverridesPropValue = z.infer<\n\ttypeof componentInstanceOverridesPropTypeUtil.schema\n>[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentInstanceOverridePropTypeUtil = createPropUtils(\n\t'override',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\toverride_value: z.unknown(),\n\t\tschema_source: z.object( {\n\t\t\ttype: z.literal( 'component' ),\n\t\t\tid: z.number(),\n\t\t} ),\n\t} )\n);\n\nexport type ComponentInstanceOverridePropValue = z.infer<\n\ttypeof componentInstanceOverridePropTypeUtil.schema\n>[ 'value' ];\n","import * as React from 'react';\nimport { ComponentPropListIcon, PencilIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onEditComponent }: { onEditComponent: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"start\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5, mt: 1 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<ComponentPropListIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'No properties yet', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Edit the component to add properties, manage them or update the design across all instances.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onEditComponent }>\n\t\t\t\t<PencilIcon fontSize=\"small\" />\n\t\t\t\t{ __( 'Edit component', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useId } from 'react';\nimport { useStateByElement } from '@elementor/editor-editing-panel';\nimport { CollapseIcon } from '@elementor/editor-ui';\nimport { Collapse, ListItemButton, ListItemText, Stack } from '@elementor/ui';\n\nimport { type OverridableProp, type OverridablePropsGroup } from '../../types';\n\ntype Props = {\n\tgroup: OverridablePropsGroup;\n\tprops: Record< string, OverridableProp >;\n};\n\nexport function OverridePropsGroup( { group, props }: Props ) {\n\tconst [ isOpen, setIsOpen ] = useStateByElement( group.id, true );\n\n\tconst handleClick = () => {\n\t\tsetIsOpen( ! isOpen );\n\t};\n\n\tconst id = useId();\n\tconst labelId = `label-${ id }`;\n\tconst contentId = `content-${ id }`;\n\n\tconst title = group.label;\n\n\treturn (\n\t\t<>\n\t\t\t<ListItemButton\n\t\t\t\tid={ labelId }\n\t\t\t\taria-controls={ contentId }\n\t\t\t\taria-label={ `${ title } section` }\n\t\t\t\tonClick={ handleClick }\n\t\t\t\tp={ 0 }\n\t\t\t\tsx={ { '&:hover': { backgroundColor: 'transparent' } } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyItems=\"start\" flexGrow={ 1 } gap={ 0.5 }>\n\t\t\t\t\t<ListItemText\n\t\t\t\t\t\tsecondary={ title }\n\t\t\t\t\t\tsecondaryTypographyProps={ { color: 'text.primary', variant: 'caption', fontWeight: 'bold' } }\n\t\t\t\t\t\tsx={ { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 } }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t<CollapseIcon open={ isOpen } color=\"secondary\" fontSize=\"tiny\" />\n\t\t\t</ListItemButton>\n\t\t\t<Collapse id={ contentId } aria-labelledby={ labelId } in={ isOpen } timeout=\"auto\">\n\t\t\t\t<Stack direction=\"column\" gap={ 1 } p={ 2 }>\n\t\t\t\t\t{ group.props.map( ( propId ) => (\n\t\t\t\t\t\t// TODO: Render actual controls\n\t\t\t\t\t\t<pre key={ propId }>{ JSON.stringify( props[ propId ], null, 2 ) }</pre>\n\t\t\t\t\t) ) }\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { type ComponentType } from 'react';\nimport { ControlReplacementsProvider, PropKeyProvider, PropProvider, useBoundProp } from '@elementor/editor-controls';\nimport { createTopLevelObjectType, useElement } from '@elementor/editor-editing-panel';\nimport { type PropValue } from '@elementor/editor-props';\nimport { __getState as getState } from '@elementor/store';\n\nimport {\n\tcomponentOverridablePropTypeUtil,\n\ttype ComponentOverridablePropValue,\n} from '../../prop-types/component-overridable-prop-type';\nimport { OverridablePropProvider } from '../../provider/overridable-prop-context';\nimport { updateOverridablePropOriginValue } from '../../store/actions/update-overridable-prop-origin-value';\nimport { selectCurrentComponentId } from '../../store/store';\n\nexport function OverridablePropControl< T extends object >( {\n\tOriginalControl,\n\t...props\n}: T & { OriginalControl: ComponentType< T > } ) {\n\tconst { elementType } = useElement();\n\n\tconst { value, bind, setValue, placeholder, ...propContext } = useBoundProp( componentOverridablePropTypeUtil );\n\tconst componentId = selectCurrentComponentId( getState() );\n\n\tif ( ! componentId ) {\n\t\tthrow new Error( 'Component ID is required' );\n\t}\n\n\tif ( ! value?.override_key ) {\n\t\tthrow new Error( 'Override key is required' );\n\t}\n\n\tconst setOverridableValue = ( newValue: Record< typeof bind, PropValue | null > ) => {\n\t\tconst propValue = {\n\t\t\t...value,\n\t\t\torigin_value: newValue[ bind ],\n\t\t} as ComponentOverridablePropValue;\n\n\t\tsetValue( propValue );\n\t\tupdateOverridablePropOriginValue( componentId, propValue );\n\t};\n\n\tconst propType = createTopLevelObjectType( {\n\t\tschema: {\n\t\t\t[ bind ]: elementType.propsSchema[ bind ],\n\t\t},\n\t} );\n\n\tconst objectPlaceholder: Record< string, PropValue > | undefined = placeholder\n\t\t? { [ bind ]: placeholder }\n\t\t: undefined;\n\n\treturn (\n\t\t<OverridablePropProvider value={ value }>\n\t\t\t<PropProvider\n\t\t\t\t{ ...propContext }\n\t\t\t\tpropType={ propType }\n\t\t\t\tsetValue={ setOverridableValue }\n\t\t\t\tvalue={ { [ bind ]: value.origin_value } }\n\t\t\t\tplaceholder={ objectPlaceholder }\n\t\t\t>\n\t\t\t\t<PropKeyProvider bind={ bind }>\n\t\t\t\t\t<ControlReplacementsProvider replacements={ [] }>\n\t\t\t\t\t\t<OriginalControl { ...( props as T ) } />\n\t\t\t\t\t</ControlReplacementsProvider>\n\t\t\t\t</PropKeyProvider>\n\t\t\t</PropProvider>\n\t\t</OverridablePropProvider>\n\t);\n}\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentOverridablePropTypeUtil = createPropUtils(\n\t'overridable',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\torigin_value: z\n\t\t\t.object( {\n\t\t\t\t$$type: z.string(),\n\t\t\t\tvalue: z.unknown(),\n\t\t\t} )\n\t\t\t.nullable(),\n\t} )\n);\n\nexport type ComponentOverridablePropValue = z.infer< typeof componentOverridablePropTypeUtil.schema >[ 'value' ];\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { type ComponentOverridablePropValue } from '../prop-types/component-overridable-prop-type';\n\ntype OverridablePropData = {\n\tvalue: ComponentOverridablePropValue;\n};\n\nconst OverridablePropContext = createContext< OverridablePropData | null >( null );\n\nexport function OverridablePropProvider( { children, ...props }: PropsWithChildren< OverridablePropData > ) {\n\treturn <OverridablePropContext.Provider value={ props }>{ children }</OverridablePropContext.Provider>;\n}\n\nexport const useOverridablePropValue = () => useContext( OverridablePropContext )?.value;\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentOverridablePropValue } from '../../prop-types/component-overridable-prop-type';\nimport { type OverridableProps } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\nexport function updateOverridablePropOriginValue( componentId: number, propValue: ComponentOverridablePropValue ) {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overridableProps.props[ propValue.override_key ];\n\n\tif ( ! existingOverridableProp ) {\n\t\treturn;\n\t}\n\n\tconst newOverridableProps = {\n\t\t...overridableProps,\n\t\tprops: {\n\t\t\t...overridableProps.props,\n\t\t\t[ existingOverridableProp.overrideKey ]: {\n\t\t\t\t...existingOverridableProp,\n\t\t\t\toriginValue: propValue.origin_value,\n\t\t\t},\n\t\t},\n\t} satisfies OverridableProps;\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: newOverridableProps,\n\t\t} )\n\t);\n}\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { getWidgetsCache } from '@elementor/editor-elements';\nimport { type TransformablePropValue } from '@elementor/editor-props';\nimport { __getState as getState } from '@elementor/store';\nimport { bindPopover, bindTrigger, Popover, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentOverridablePropTypeUtil } from '../../prop-types/component-overridable-prop-type';\nimport { useOverridablePropValue } from '../../provider/overridable-prop-context';\nimport { setOverridableProp } from '../../store/actions/set-overridable-prop';\nimport { selectCurrentComponentId, selectOverridableProps } from '../../store/store';\nimport { type OverridableProps } from '../../types';\nimport { Indicator } from './indicator';\nimport { OverridablePropForm } from './overridable-prop-form';\nimport { getOverridableProp } from './utils/get-overridable-prop';\n\nconst FORBIDDEN_KEYS = [ '_cssid', 'attributes' ];\n\nexport function OverridablePropIndicator() {\n\tconst { bind } = useBoundProp();\n\tconst componentId = selectCurrentComponentId( getState() );\n\n\tif ( ! isPropAllowed( bind ) || ! componentId ) {\n\t\treturn null;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\treturn <Content componentId={ componentId } overridableProps={ overridableProps } />;\n}\n\ntype Props = {\n\tcomponentId: number;\n\toverridableProps?: OverridableProps;\n};\nexport function Content( { componentId, overridableProps }: Props ) {\n\tconst {\n\t\telement: { id: elementId },\n\t\telementType,\n\t} = useElement();\n\tconst { value, bind, propType } = useBoundProp();\n\n\tconst contextOverridableValue = useOverridablePropValue();\n\tconst { value: boundPropOverridableValue, setValue: setOverridableValue } = useBoundProp(\n\t\tcomponentOverridablePropTypeUtil\n\t);\n\n\t/**\n\t * This is intended to handle custom layout controls, such as <LinkControl />, which has <ControlLabel /> nested within it\n\t * i.e. its bound prop value would be the one manipulated by the new <PropProvider /> thus won't be considered overridable\n\t */\n\tconst overridableValue = boundPropOverridableValue ?? contextOverridableValue;\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\tconst triggerProps = bindTrigger( popupState );\n\tconst popoverProps = bindPopover( popupState );\n\n\tconst { elType } = getWidgetsCache()?.[ elementType.key ] ?? { elType: 'widget' };\n\n\tconst handleSubmit = ( { label, group }: { label: string; group: string | null } ) => {\n\t\tconst originValue = ! overridableValue ? value ?? propType.default : overridableValue?.origin_value ?? {};\n\n\t\tconst overridablePropConfig = setOverridableProp( {\n\t\t\tcomponentId,\n\t\t\toverrideKey: overridableValue?.override_key ?? null,\n\t\t\telementId,\n\t\t\tlabel,\n\t\t\tgroupId: group,\n\t\t\tpropKey: bind,\n\t\t\telType: elType ?? 'widget',\n\t\t\twidgetType: elementType.key,\n\t\t\toriginValue,\n\t\t} );\n\n\t\tif ( ! overridableValue && overridablePropConfig ) {\n\t\t\tsetOverridableValue( {\n\t\t\t\toverride_key: overridablePropConfig.overrideKey,\n\t\t\t\torigin_value: originValue as TransformablePropValue< string, unknown >,\n\t\t\t} );\n\t\t}\n\n\t\tpopupState.close();\n\t};\n\n\tconst overridableConfig = overridableValue\n\t\t? getOverridableProp( { componentId, overrideKey: overridableValue.override_key } )\n\t\t: undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip placement=\"top\" title={ __( 'Override Property', 'elementor' ) }>\n\t\t\t\t<Indicator { ...triggerProps } isOpen={ !! popoverProps.open } isOverridable={ !! overridableValue } />\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\tsx: { my: 2.5 },\n\t\t\t\t} }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<OverridablePropForm\n\t\t\t\t\tonSubmit={ handleSubmit }\n\t\t\t\t\tgroups={ overridableProps?.groups.order.map( ( groupId ) => ( {\n\t\t\t\t\t\tvalue: groupId,\n\t\t\t\t\t\tlabel: overridableProps.groups.items[ groupId ].label,\n\t\t\t\t\t} ) ) }\n\t\t\t\t\tcurrentValue={ overridableConfig }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nfunction isPropAllowed( bind: string ) {\n\treturn ! FORBIDDEN_KEYS.includes( bind );\n}\n","import { type PropValue } from '@elementor/editor-props';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp, type OverridableProps, type OverridablePropsGroup } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype Props = {\n\tcomponentId: number;\n\toverrideKey: string | null;\n\telementId: string;\n\tlabel: string;\n\tgroupId: string | null;\n\tpropKey: string;\n\telType: string;\n\twidgetType: string;\n\toriginValue: PropValue;\n};\nexport function setOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n\telementId,\n\tlabel,\n\tgroupId,\n\tpropKey,\n\telType,\n\twidgetType,\n\toriginValue,\n}: Props ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overrideKey ? overridableProps.props[ overrideKey ] : null;\n\tconst duplicatedTargetProps = Object.values( overridableProps.props ).filter(\n\t\t( prop ) => prop.elementId === elementId && prop.propKey === propKey && prop !== existingOverridableProp\n\t);\n\n\tconst { props: prevProps, groups: prevGroups } = { ...overridableProps };\n\n\tconst { groups: updatedGroups, currentGroupId } = getUpdatedGroups(\n\t\tprevGroups,\n\t\tgroupId || existingOverridableProp?.groupId\n\t);\n\n\tconst overridableProp = {\n\t\toverrideKey: existingOverridableProp?.overrideKey || generateUniqueId( 'prop' ),\n\t\tlabel,\n\t\telementId,\n\t\tpropKey,\n\t\twidgetType,\n\t\telType,\n\t\toriginValue,\n\t\tgroupId: currentGroupId,\n\t};\n\n\tconst { props: propsWithoutDuplicates, groups: groupsWithoutDuplicates } = removeProps( {\n\t\tprops: prevProps,\n\t\tgroups: updatedGroups,\n\t\tpropsToRemove: duplicatedTargetProps,\n\t} );\n\n\tconst props = {\n\t\t...propsWithoutDuplicates,\n\t\t[ overridableProp.overrideKey ]: overridableProp,\n\t};\n\n\tconst groups = {\n\t\titems: {\n\t\t\t...groupsWithoutDuplicates.items,\n\t\t\t[ currentGroupId ]: getGroupWithProp( groupsWithoutDuplicates, currentGroupId, overridableProp ),\n\t\t},\n\t\torder: groupsWithoutDuplicates.order.includes( currentGroupId )\n\t\t\t? groupsWithoutDuplicates.order\n\t\t\t: [ ...groupsWithoutDuplicates.order, currentGroupId ],\n\t};\n\n\tconst isChangingGroups = existingOverridableProp && existingOverridableProp.groupId !== currentGroupId;\n\n\tif ( isChangingGroups ) {\n\t\tgroups.items[ existingOverridableProp.groupId ] = getGroupWithoutProp(\n\t\t\tgroupsWithoutDuplicates,\n\t\t\texistingOverridableProp.groupId,\n\t\t\toverridableProp\n\t\t);\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\tprops,\n\t\t\t\tgroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn overridableProp;\n}\n\ntype UpdatedGroups = { groups: OverridableProps[ 'groups' ]; currentGroupId: string };\n\nfunction getUpdatedGroups( groups: OverridableProps[ 'groups' ], groupId: string | undefined ): UpdatedGroups {\n\tif ( ! groupId ) {\n\t\t// use first existing group\n\t\tif ( groups.order.length > 0 ) {\n\t\t\treturn { groups, currentGroupId: groups.order[ 0 ] };\n\t\t}\n\n\t\t// create the first group (default)\n\t\treturn addNewGroup( groups );\n\t}\n\n\tif ( ! groups.items[ groupId ] ) {\n\t\t// fallback - if for any reason there's no such group - create it\n\t\treturn addNewGroup( groups, groupId );\n\t}\n\n\t// use the existing group\n\treturn { groups, currentGroupId: groupId };\n}\n\nfunction addNewGroup( groups: OverridableProps[ 'groups' ], groupId?: string | undefined ): UpdatedGroups {\n\tconst currentGroupId = groupId || generateUniqueId( 'group' );\n\tconst updatedGroups = {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ currentGroupId ]: {\n\t\t\t\tid: currentGroupId,\n\t\t\t\tlabel: __( 'Default', 'elementor' ),\n\t\t\t\tprops: [],\n\t\t\t},\n\t\t},\n\t\torder: [ ...groups.order, currentGroupId ],\n\t};\n\n\treturn { groups: updatedGroups, currentGroupId };\n}\n\nfunction getGroupWithProp(\n\tgroups: OverridableProps[ 'groups' ],\n\tgroupId: string,\n\toverridableProp: OverridableProp\n): OverridablePropsGroup {\n\tconst group: OverridablePropsGroup = { ...groups.items[ groupId ] };\n\n\tif ( ! group.props.includes( overridableProp.overrideKey ) ) {\n\t\tgroup.props = [ ...group.props, overridableProp.overrideKey ];\n\t}\n\n\treturn group;\n}\n\nfunction getGroupWithoutProp(\n\tgroups: OverridableProps[ 'groups' ],\n\tgroupId: string,\n\toverridableProp: OverridableProp\n): OverridablePropsGroup {\n\tconst group = { ...groups.items[ groupId ] };\n\n\tif ( group ) {\n\t\tgroup.props = group.props.filter( ( key ) => key !== overridableProp.overrideKey );\n\t}\n\n\treturn group;\n}\n\nfunction removeProps( {\n\tprops,\n\tgroups,\n\tpropsToRemove,\n}: OverridableProps & { propsToRemove: OverridableProp[] } ): OverridableProps {\n\tconst allProps = Object.fromEntries(\n\t\tObject.entries( props ).filter( ( [ , prop ] ) => ! propsToRemove.includes( prop ) )\n\t);\n\n\tconst overrideKeysToRemove = propsToRemove.map( ( prop ) => prop.overrideKey );\n\n\tconst allGroupItems = Object.fromEntries(\n\t\tObject.entries( groups.items ).map( ( [ groupId, group ]: [ string, OverridablePropsGroup ] ) => [\n\t\t\tgroupId,\n\t\t\t{\n\t\t\t\t...group,\n\t\t\t\tprops: group.props.filter( ( prop ) => ! overrideKeysToRemove.includes( prop ) ),\n\t\t\t},\n\t\t] )\n\t);\n\n\treturn {\n\t\tprops: allProps,\n\t\tgroups: {\n\t\t\titems: allGroupItems,\n\t\t\torder: groups.order.filter( ( groupId ) => ! overrideKeysToRemove.includes( groupId ) ),\n\t\t},\n\t};\n}\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { CheckIcon, PlusIcon } from '@elementor/icons';\nimport { Box, styled } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\nconst IconContainer = styled( Box )`\n\tpointer-events: none;\n\topacity: 0;\n\ttransition: opacity 0.2s ease-in-out;\n\n\t& > svg {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate( -50%, -50% );\n\t\twidth: 10px;\n\t\theight: 10px;\n\t\tfill: ${ ( { theme } ) => theme.palette.primary.contrastText };\n\t\tstroke: ${ ( { theme } ) => theme.palette.primary.contrastText };\n\t\tstroke-width: 2px;\n\t}\n`;\n\nconst Content = styled( Box )`\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\twidth: 16px;\n\theight: 16px;\n\tmargin-inline: ${ ( { theme } ) => theme.spacing( 0.5 ) };\n\n\t&:before {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate( -50%, -50% ) rotate( 45deg );\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 1px;\n\t\tbackground-color: ${ ( { theme } ) => theme.palette.primary.main };\n\t\ttransition: all 0.1s ease-in-out;\n\t}\n\n\t&:hover,\n\t&.enlarged {\n\t\t&:before {\n\t\t\twidth: 12px;\n\t\t\theight: 12px;\n\t\t\tborder-radius: 2px;\n\t\t}\n\n\t\t.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n`;\n\ntype Props = {\n\tisOverridable: boolean;\n\tisOpen: boolean;\n};\nexport const Indicator = forwardRef< HTMLDivElement, Props >( ( { isOpen, isOverridable, ...props }, ref ) => (\n\t<Content ref={ ref } { ...props } className={ isOpen || isOverridable ? 'enlarged' : '' }>\n\t\t<IconContainer\n\t\t\tclassName=\"icon\"\n\t\t\taria-label={\n\t\t\t\tisOverridable ? __( 'Overridable property', 'elementor' ) : __( 'Make prop overridable', 'elementor' )\n\t\t\t}\n\t\t>\n\t\t\t{ isOverridable ? <CheckIcon fontSize={ SIZE } /> : <PlusIcon fontSize={ SIZE } /> }\n\t\t</IconContainer>\n\t</Content>\n) );\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { Form, MenuListItem } from '@elementor/editor-ui';\nimport { Button, FormLabel, Grid, Select, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp } from '../../types';\n\nconst SIZE = 'tiny';\n\nconst DEFAULT_GROUP = { value: null, label: __( 'Default', 'elementor' ) };\n\ntype Props = {\n\tonSubmit: ( data: { label: string; group: string | null } ) => void;\n\tcurrentValue?: OverridableProp;\n\tgroups?: { value: string; label: string }[];\n};\n\nexport function OverridablePropForm( { onSubmit, groups, currentValue }: Props ) {\n\tconst [ propLabel, setPropLabel ] = useState< string | null >( currentValue?.label ?? null );\n\tconst [ group, setGroup ] = useState< string | null >( currentValue?.groupId ?? groups?.[ 0 ]?.value ?? null );\n\n\tconst name = __( 'Name', 'elementor' );\n\tconst groupName = __( 'Group Name', 'elementor' );\n\n\tconst isCreate = currentValue === undefined;\n\n\tconst title = isCreate ? __( 'Create new property', 'elementor' ) : __( 'Update property', 'elementor' );\n\tconst ctaLabel = isCreate ? __( 'Create', 'elementor' ) : __( 'Update', 'elementor' );\n\n\treturn (\n\t\t<Form onSubmit={ () => onSubmit( { label: propLabel ?? '', group } ) }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%', mb: 1.5 } }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" px={ 1.5 } mb={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ name }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tname={ name }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tplaceholder={ __( 'Enter value', 'elementor' ) }\n\t\t\t\t\t\t\tvalue={ propLabel ?? '' }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => setPropLabel( e.target.value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" px={ 1.5 } mb={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ groupName }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\tname={ groupName }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ group ?? null }\n\t\t\t\t\t\t\tonChange={ setGroup }\n\t\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\t\trenderValue={ ( selectedValue: string | null ) => {\n\t\t\t\t\t\t\t\tif ( ! selectedValue || selectedValue === '' ) {\n\t\t\t\t\t\t\t\t\tconst [ firstGroup = DEFAULT_GROUP ] = groups ?? [];\n\n\t\t\t\t\t\t\t\t\treturn firstGroup.label;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn groups?.find( ( { value } ) => value === selectedValue )?.label ?? selectedValue;\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ ( groups ?? [ DEFAULT_GROUP ] ).map( ( { label: groupLabel, ...props } ) => (\n\t\t\t\t\t\t\t\t<MenuListItem key={ props.value } { ...props } value={ props.value ?? '' }>\n\t\t\t\t\t\t\t\t\t{ groupLabel }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" mt={ 1.5 } py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! propLabel } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ ctaLabel }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Form>\n\t);\n}\n","import { __getState as getState } from '@elementor/store';\n\nimport { selectOverridableProps } from '../../../store/store';\nimport { type OverridableProp } from '../../../types';\n\nexport function getOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n}: {\n\tcomponentId: number;\n\toverrideKey: string;\n} ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn undefined;\n\t}\n\n\treturn overridableProps.props[ overrideKey ];\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { initSaveAsComponentTool } from './save-as-component-tool';\n\nexport function initMcp() {\n\tconst { setMCPDescription } = getMCPByDomain( 'components' );\n\n\tsetMCPDescription(\n\t\t`Elementor Editor Components MCP - Tools for creating and managing reusable components. \n Components are reusable blocks of content that can be used multiple times across the pages, its a widget which contains a set of elements and styles.`\n\t);\n\n\tinitSaveAsComponentTool();\n}\n","import { getContainer, type V1ElementData } from '@elementor/editor-elements';\nimport { getMCPByDomain } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nimport { createUnpublishedComponent } from '../store/actions/create-unpublished-component';\n\nconst InputSchema = {\n\telement_id: z\n\t\t.string()\n\t\t.describe(\n\t\t\t'The unique identifier of the element to save as a component. ' +\n\t\t\t\t'Use the \"list-elements\" tool to find available element IDs in the current document.'\n\t\t),\n\tcomponent_name: z\n\t\t.string()\n\t\t.describe( 'The name for the new component. Should be descriptive and unique among existing components.' ),\n};\n\nconst OutputSchema = {\n\tmessage: z.string().optional().describe( 'Additional information about the operation result' ),\n\tcomponent_uid: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe( 'The unique identifier of the newly created component (only present on success)' ),\n};\n\nexport const VALID_ELEMENT_TYPES = [ 'e-div-block', 'e-flexbox', 'e-tabs' ];\nexport const ERROR_MESSAGES = {\n\tELEMENT_NOT_FOUND: \"Element not found. Use 'list-elements' to get valid element IDs.\",\n\tELEMENT_NOT_ONE_OF_TYPES: `Element is not one of the following types: ${ VALID_ELEMENT_TYPES.join( ', ' ) }`,\n\tELEMENT_IS_LOCKED: 'Cannot save a locked element as a component.',\n};\n\nexport const handleSaveAsComponent = async ( params: z.infer< z.ZodObject< typeof InputSchema > > ) => {\n\tconst { element_id: elementId, component_name: componentName } = params;\n\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_FOUND );\n\t}\n\n\tconst elType = container.model.get( 'elType' );\n\n\tif ( ! VALID_ELEMENT_TYPES.includes( elType ) ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_ONE_OF_TYPES );\n\t}\n\n\tconst element = container.model.toJSON( { remove: [ 'default' ] } ) as V1ElementData;\n\n\tif ( element?.isLocked ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_IS_LOCKED );\n\t}\n\n\tconst uid = createUnpublishedComponent( componentName, element, null );\n\n\treturn {\n\t\tstatus: 'ok' as const,\n\t\tmessage: `Component \"${ componentName }\" created successfully.`,\n\t\tcomponent_uid: uid,\n\t};\n};\n\nexport const initSaveAsComponentTool = () => {\n\treturn getMCPByDomain( 'components' ).addTool( {\n\t\tname: 'save-as-component',\n\t\tschema: InputSchema,\n\t\toutputSchema: OutputSchema,\n\t\tdescription: `Save an existing element as a reusable component in the Elementor editor.\n\n## When NOT to use this tool:\n- Do not use for elements that are already components (widgetType: 'e-component').\n- Do not use for locked elements.\n- Do not guess element IDs. Always use \"list-elements\" first to get valid IDs.\n\n## Prerequisites:\n- **Verify element type**: Ensure the element is not already a component (widgetType should not be 'e-component').\n- **Check if element is unlocked**: Locked elements cannot be saved as components.\n- **Check that the element is one of the following types**: ${ VALID_ELEMENT_TYPES.join( ', ' ) }\n\n## Required parameters:\n- **element_id**: The unique ID of the element to save.\n- **component_name**: A descriptive name for the component (2-50 characters).\n\n## Example tool call:\n\\`\\`\\`json\n{ \"element_id\": \"abc123\", \"component_name\": \"Hero Section\" }\n\\`\\`\\`\n`,\n\t\thandler: handleSaveAsComponent,\n\t} );\n};\n","import { useEffect } from 'react';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { loadComponents } from './store/thunks';\n\nexport function PopulateStore() {\n\tuseEffect( () => {\n\t\tdispatch( loadComponents() );\n\t}, [] );\n\n\treturn null;\n}\n","import { __dispatch as dispatch } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { slice } from '../store';\n\nexport function removeComponentStyles( id: number ) {\n\tapiClient.invalidateComponentConfigCache( id );\n\tdispatch( slice.actions.removeStyles( { id } ) );\n}\n","import { createStylesProvider } from '@elementor/editor-styles-repository';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { selectFlatStyles, SLICE_NAME } from './store';\n\nexport const componentsStylesProvider = createStylesProvider( {\n\tkey: 'components-styles',\n\tpriority: 100,\n\tsubscribe: ( cb ) =>\n\t\tsubscribeWithSelector(\n\t\t\t( state ) => state[ SLICE_NAME ],\n\t\t\t() => {\n\t\t\t\tcb();\n\t\t\t}\n\t\t),\n\tactions: {\n\t\tall: () => {\n\t\t\treturn selectFlatStyles( getState() );\n\t\t},\n\t\tget: ( id ) => {\n\t\t\treturn selectFlatStyles( getState() ).find( ( style ) => style.id === id ) ?? null;\n\t\t},\n\t},\n} );\n","import { updateElementSettings, type V1ElementData } from '@elementor/editor-elements';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectUnpublishedComponents, slice } from '../store/store';\nimport { type ComponentInstancePropValue, type DocumentSaveStatus, type UnpublishedComponent } from '../types';\n\nexport async function createComponentsBeforeSave( {\n\telements,\n\tstatus,\n}: {\n\telements: V1ElementData[];\n\tstatus: DocumentSaveStatus;\n} ) {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tif ( ! unpublishedComponents.length ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst uidToComponentId = await createComponents( unpublishedComponents, status );\n\n\t\tupdateComponentInstances( elements, uidToComponentId );\n\n\t\tdispatch(\n\t\t\tslice.actions.add(\n\t\t\t\tunpublishedComponents.map( ( component ) => ( {\n\t\t\t\t\tid: uidToComponentId.get( component.uid ) as number,\n\t\t\t\t\tname: component.name,\n\t\t\t\t\tuid: component.uid,\n\t\t\t\t} ) )\n\t\t\t)\n\t\t);\n\t\tdispatch( slice.actions.resetUnpublished() );\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to publish components and update component instances: ${ error }` );\n\t}\n}\n\nasync function createComponents(\n\tcomponents: UnpublishedComponent[],\n\tstatus: DocumentSaveStatus\n): Promise< Map< string, number > > {\n\tconst response = await apiClient.create( {\n\t\tstatus,\n\t\titems: components.map( ( component ) => ( {\n\t\t\tuid: component.uid,\n\t\t\ttitle: component.name,\n\t\t\telements: component.elements,\n\t\t} ) ),\n\t} );\n\n\tconst map = new Map< string, number >();\n\n\tObject.entries( response ).forEach( ( [ key, value ] ) => {\n\t\tmap.set( key, value );\n\t} );\n\n\treturn map;\n}\n\nfunction updateComponentInstances( elements: V1ElementData[], uidToComponentId: Map< string, number > ): void {\n\telements.forEach( ( element ) => {\n\t\tconst { shouldUpdate, newComponentId } = shouldUpdateElement( element, uidToComponentId );\n\t\tif ( shouldUpdate ) {\n\t\t\tupdateElementComponentId( element.id, newComponentId );\n\t\t}\n\n\t\tif ( element.elements ) {\n\t\t\tupdateComponentInstances( element.elements, uidToComponentId );\n\t\t}\n\t} );\n}\n\nfunction shouldUpdateElement(\n\telement: V1ElementData,\n\tuidToComponentId: Map< string, number >\n): { shouldUpdate: true; newComponentId: number } | { shouldUpdate: false; newComponentId: null } {\n\tif ( element.widgetType === 'e-component' ) {\n\t\tconst currentComponentId = ( element.settings?.component_instance as ComponentInstancePropValue< string > )\n\t\t\t?.value?.component_id.value;\n\n\t\tif ( currentComponentId && uidToComponentId.has( currentComponentId ) ) {\n\t\t\treturn { shouldUpdate: true, newComponentId: uidToComponentId.get( currentComponentId ) as number };\n\t\t}\n\t}\n\treturn { shouldUpdate: false, newComponentId: null };\n}\n\nfunction updateElementComponentId( elementId: string, componentId: number ): void {\n\tupdateElementSettings( {\n\t\tid: elementId,\n\t\tprops: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: { $$type: 'number', value: componentId },\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\twithHistory: false,\n\t} );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __getState as getState } from '@elementor/store';\n\nimport { COMPONENT_DOCUMENT_TYPE } from '../components/consts';\nimport { selectOverridableProps } from '../store/store';\n\nexport const setComponentOverridablePropsSettingsBeforeSave = ( {\n\tcontainer,\n}: {\n\tcontainer: V1Element & { document: V1Document };\n} ) => {\n\tconst currentDocument = container.document;\n\n\tif ( ! currentDocument || currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), currentDocument.id );\n\tif ( overridableProps ) {\n\t\tcontainer.settings.set( 'overridable_props', overridableProps );\n\t}\n};\n","import { type NotificationData, notify } from '@elementor/editor-notifications';\nimport { __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectArchivedComponents } from '../store/store';\n\nconst failedNotification = ( message: string ): NotificationData => ( {\n\ttype: 'error',\n\tmessage: `Failed to archive components: ${ message }`,\n\tid: 'failed-archived-components-notification',\n} );\n\nconst successNotification = ( message: string ): NotificationData => ( {\n\ttype: 'success',\n\tmessage: `Successfully archived components: ${ message }`,\n\tid: 'success-archived-components-notification',\n} );\n\nexport const updateArchivedComponentBeforeSave = async () => {\n\ttry {\n\t\tconst archivedComponents = selectArchivedComponents( getState() );\n\n\t\tif ( ! archivedComponents.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = await apiClient.updateArchivedComponents(\n\t\t\tarchivedComponents.map( ( component ) => component.id )\n\t\t);\n\n\t\tconst failedIds = result.failedIds.join( ', ' );\n\t\tconst successIds = result.successIds.join( ', ' );\n\n\t\tif ( failedIds ) {\n\t\t\tnotify( failedNotification( failedIds ) );\n\t\t}\n\n\t\tif ( successIds ) {\n\t\t\tnotify( successNotification( successIds ) );\n\t\t}\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to update archived components: ${ error }` );\n\t}\n};\n","import { isDocumentDirty } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { apiClient } from '../api';\nimport { type DocumentSaveStatus } from '../types';\nimport { getComponentDocumentData, invalidateComponentDocumentData } from '../utils/component-document-data';\nimport { getComponentIds } from '../utils/get-component-ids';\n\ntype Options = {\n\tstatus: DocumentSaveStatus;\n\telements: V1ElementData[];\n};\n\nexport async function updateComponentsBeforeSave( { status, elements }: Options ) {\n\tif ( status !== 'publish' ) {\n\t\treturn;\n\t}\n\n\tconst componentIds = await getComponentIds( elements );\n\n\tconst componentDocumentData = await Promise.all( componentIds.map( getComponentDocumentData ) );\n\n\tconst draftIds = componentDocumentData\n\t\t.filter( ( document ) => !! document )\n\t\t.filter( isDocumentDirty )\n\t\t.map( ( document ) => document.id );\n\n\tif ( draftIds.length === 0 ) {\n\t\treturn;\n\t}\n\n\tawait apiClient.updateStatuses( draftIds, 'publish' );\n\n\tdraftIds.forEach( ( id ) => invalidateComponentDocumentData( id ) );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element, type V1ElementData } from '@elementor/editor-elements';\n\nimport { type DocumentSaveStatus } from '../types';\nimport { createComponentsBeforeSave } from './create-components-before-save';\nimport { setComponentOverridablePropsSettingsBeforeSave } from './set-component-overridable-props-settings-before-save';\nimport { updateArchivedComponentBeforeSave } from './update-archived-component-before-save';\nimport { updateComponentsBeforeSave } from './update-components-before-save';\n\ntype Options = {\n\tcontainer: V1Element & {\n\t\tdocument: V1Document;\n\t\tmodel: {\n\t\t\tget: ( key: 'elements' ) => {\n\t\t\t\ttoJSON: () => V1ElementData[];\n\t\t\t};\n\t\t};\n\t};\n\tstatus: DocumentSaveStatus;\n};\n\nexport const beforeSave = ( { container, status }: Options ) => {\n\tconst elements = container.model.get( 'elements' )?.toJSON() ?? [];\n\n\treturn Promise.all( [\n\t\tupdateArchivedComponentBeforeSave(),\n\t\tcreateComponentsBeforeSave( { elements, status } ),\n\t\tupdateComponentsBeforeSave( { elements, status } ),\n\t\tsetComponentOverridablePropsSettingsBeforeSave( { container } ),\n\t] );\n};\n"],"mappings":"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","names":["__","createTransformer","React","getV1DocumentsManager","useSelector","Box","__","getV1DocumentsManager","getV1DocumentsManager","useSelector","useSelector","useSelector","Box","__","getV1DocumentsManager","React","React","Box","Stack","__","React","Stack","Box","__","React","ComponentsIcon","Box","Divider","Stack","Typography","__","useSelector","useSelector","React","Box","IconButton","Stack","Typography","__","dispatch","setDocumentModifiedStatus","__","getState","getState","__","getState","getState","dispatch","getState","getState","dispatch","setDocumentModifiedStatus","Stack","Box","Typography","IconButton","__","React","Box","ListItemButton","Stack","Stack","Typography","__","Divider","ComponentsIcon","Box","React","useEffect","useMemo","useRef","useState","ThemeProvider","Stack","TextField","Typography","__","runCommand","dispatch","dispatch","runCommand","__","useState","useRef","useEffect","__","ThemeProvider","validateForm","useMemo","Stack","Typography","TextField","React","useEffect","getV1DocumentsManager","commandEndEvent","useSelector","setDocumentModifiedStatus","getStore","dispatch","getStore","React","useEffect","__","useEffect","useState","useEffect","__","useSelector","getV1DocumentsManager","useEffect","commandEndEvent","React","Box","Button","Icon","Stack","Typography","__","React","ComponentsIcon","PencilIcon","getState","IconButton","Stack","Tooltip","__","createPropUtils","z","createPropUtils","z","z","createPropUtils","z","createPropUtils","z","React","ComponentPropListIcon","Button","Stack","Typography","__","EmptyState","React","ListItemButton","Stack","getState","__","Stack","ComponentsIcon","Tooltip","IconButton","PencilIcon","EmptyState","React","useElement","getState","createPropUtils","z","React","createContext","useContext","dispatch","getState","getState","dispatch","useElement","getState","React","useBoundProp","useElement","getState","bindTrigger","Popover","Tooltip","usePopupState","__","dispatch","getState","generateUniqueId","__","getState","generateUniqueId","dispatch","__","React","Box","styled","__","React","useState","Form","MenuListItem","Button","FormLabel","Grid","Stack","TextField","Typography","__","SIZE","getState","getState","useBoundProp","getState","Content","useElement","usePopupState","bindTrigger","Tooltip","__","Popover","getMCPByDomain","getContainer","z","z","getContainer","getMCPByDomain","useEffect","dispatch","useEffect","dispatch","dispatch","dispatch","getState","getState","dispatch","getState","getState","dispatch","getState","getState","getState","getState","isDocumentDirty","isDocumentDirty","__"]}
1
+ {"version":3,"sources":["../src/init.ts","../src/component-instance-transformer.ts","../src/store/store.ts","../src/store/thunks.ts","../src/api.ts","../src/utils/component-document-data.ts","../src/component-overridable-transformer.ts","../src/components/component-panel-header/component-panel-header.tsx","../src/hooks/use-navigate-back.ts","../src/utils/switch-to-component.ts","../src/components/component-panel-header/component-badge.tsx","../src/components/component-panel-header/use-overridable-props.ts","../src/components/components-tab/components.tsx","../src/components/components-tab/component-search.tsx","../src/components/components-tab/search-provider.tsx","../src/components/components-tab/components-list.tsx","../src/hooks/use-components.ts","../src/components/components-tab/components-item.tsx","../src/store/actions/archive-component.ts","../src/store/actions/load-components-assets.ts","../src/create-component-type.ts","../src/utils/tracking.ts","../src/utils/get-component-ids.ts","../src/store/actions/load-components-overridable-props.ts","../src/store/actions/load-components-styles.ts","../src/utils/get-container-for-new-element.ts","../src/components/create-component-form/utils/replace-element-with-component.ts","../src/components/components-tab/loading-components.tsx","../src/components/consts.ts","../src/components/create-component-form/create-component-form.tsx","../src/store/actions/create-unpublished-component.ts","../src/components/create-component-form/hooks/use-form.ts","../src/components/create-component-form/utils/component-form-schema.ts","../src/components/create-component-form/utils/get-component-event-data.ts","../src/components/edit-component/edit-component.tsx","../src/store/actions/update-current-component.ts","../src/components/edit-component/component-modal.tsx","../src/hooks/use-canvas-document.ts","../src/hooks/use-element-rect.ts","../src/components/in-edit-mode.tsx","../src/components/instance-editing-panel/instance-editing-panel.tsx","../src/prop-types/component-instance-prop-type.ts","../src/prop-types/component-instance-overrides-prop-type.ts","../src/prop-types/component-instance-override-prop-type.ts","../src/components/instance-editing-panel/empty-state.tsx","../src/components/instance-editing-panel/override-props-group.tsx","../src/components/overridable-props/overridable-prop-control.tsx","../src/prop-types/component-overridable-prop-type.ts","../src/provider/overridable-prop-context.tsx","../src/store/actions/update-overridable-prop-origin-value.ts","../src/components/overridable-props/overridable-prop-indicator.tsx","../src/store/actions/set-overridable-prop.ts","../src/components/overridable-props/indicator.tsx","../src/components/overridable-props/overridable-prop-form.tsx","../src/components/overridable-props/utils/get-overridable-prop.ts","../src/mcp/index.ts","../src/mcp/save-as-component-tool.ts","../src/populate-store.ts","../src/store/actions/remove-component-styles.ts","../src/store/components-styles-provider.ts","../src/sync/create-components-before-save.ts","../src/sync/set-component-overridable-props-settings-before-save.ts","../src/sync/update-archived-component-before-save.ts","../src/sync/update-components-before-save.ts","../src/sync/before-save.ts"],"sourcesContent":["import { injectIntoLogic, injectIntoTop } from '@elementor/editor';\nimport {\n\ttype CreateTemplatedElementTypeOptions,\n\tregisterElementType,\n\tsettingsTransformersRegistry,\n} from '@elementor/editor-canvas';\nimport { getV1CurrentDocument } from '@elementor/editor-documents';\nimport {\n\tFIELD_TYPE,\n\tinjectIntoPanelHeaderTop,\n\tregisterControlReplacement,\n\tregisterEditingPanelReplacement,\n\tregisterFieldIndicator,\n} from '@elementor/editor-editing-panel';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { injectTab } from '@elementor/editor-elements-panel';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __registerSlice as registerSlice } from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstanceTransformer } from './component-instance-transformer';\nimport { componentOverridableTransformer } from './component-overridable-transformer';\nimport { ComponentPanelHeader } from './components/component-panel-header/component-panel-header';\nimport { Components } from './components/components-tab/components';\nimport { COMPONENT_DOCUMENT_TYPE } from './components/consts';\nimport { CreateComponentForm } from './components/create-component-form/create-component-form';\nimport { EditComponent } from './components/edit-component/edit-component';\nimport { openEditModeDialog } from './components/in-edit-mode';\nimport { InstanceEditingPanel } from './components/instance-editing-panel/instance-editing-panel';\nimport { OverridablePropControl } from './components/overridable-props/overridable-prop-control';\nimport { OverridablePropIndicator } from './components/overridable-props/overridable-prop-indicator';\nimport { createComponentType, TYPE } from './create-component-type';\nimport { initMcp } from './mcp';\nimport { PopulateStore } from './populate-store';\nimport { componentOverridablePropTypeUtil } from './prop-types/component-overridable-prop-type';\nimport { loadComponentsAssets } from './store/actions/load-components-assets';\nimport { removeComponentStyles } from './store/actions/remove-component-styles';\nimport { componentsStylesProvider } from './store/components-styles-provider';\nimport { slice } from './store/store';\nimport { beforeSave } from './sync/before-save';\nimport { type ExtendedWindow } from './types';\nimport { onElementDrop } from './utils/tracking';\n\nexport function init() {\n\tstylesRepository.register( componentsStylesProvider );\n\n\tregisterSlice( slice );\n\n\tregisterElementType( TYPE, ( options: CreateTemplatedElementTypeOptions ) =>\n\t\tcreateComponentType( { ...options, showLockedByModal: openEditModeDialog } )\n\t);\n\n\tregisterDataHook( 'dependency', 'editor/documents/close', ( args ) => {\n\t\tconst document = getV1CurrentDocument();\n\t\tif ( document.config.type === COMPONENT_DOCUMENT_TYPE ) {\n\t\t\targs.mode = 'autosave';\n\t\t}\n\t\treturn true;\n\t} );\n\n\tregisterDataHook( 'after', 'preview/drop', onElementDrop );\n\n\t( window as unknown as ExtendedWindow ).elementorCommon.__beforeSave = beforeSave;\n\n\tinjectTab( {\n\t\tid: 'components',\n\t\tlabel: __( 'Components', 'elementor' ),\n\t\tcomponent: Components,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'create-component-popup',\n\t\tcomponent: CreateComponentForm,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'components-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'edit-component',\n\t\tcomponent: EditComponent,\n\t} );\n\n\tinjectIntoPanelHeaderTop( {\n\t\tid: 'component-panel-header',\n\t\tcomponent: ComponentPanelHeader,\n\t} );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\tconst { id, config } = getV1CurrentDocument();\n\n\t\tif ( id ) {\n\t\t\tremoveComponentStyles( id );\n\t\t}\n\n\t\tawait loadComponentsAssets( ( config?.elements as V1ElementData[] ) ?? [] );\n\t} );\n\n\tregisterFieldIndicator( {\n\t\tfieldType: FIELD_TYPE.SETTINGS,\n\t\tid: 'component-overridable-prop',\n\t\tpriority: 1,\n\t\tindicator: OverridablePropIndicator,\n\t} );\n\n\tregisterControlReplacement( {\n\t\tcomponent: OverridablePropControl,\n\t\tcondition: ( { value } ) => componentOverridablePropTypeUtil.isValid( value ),\n\t} );\n\n\tregisterEditingPanelReplacement( {\n\t\tid: 'component-instance-edit-panel',\n\t\tcondition: ( _, elementType ) => elementType.key === 'e-component',\n\t\tcomponent: InstanceEditingPanel,\n\t} );\n\n\tsettingsTransformersRegistry.register( 'component-instance', componentInstanceTransformer );\n\tsettingsTransformersRegistry.register( 'overridable', componentOverridableTransformer );\n\n\tinitMcp();\n}\n","import { createTransformer } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectUnpublishedComponents } from './store/store';\nimport { getComponentDocumentData } from './utils/component-document-data';\n\nexport const componentInstanceTransformer = createTransformer(\n\tasync ( { component_id: id }: { component_id: number | string } ) => {\n\t\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\t\tconst unpublishedComponent = unpublishedComponents.find( ( { uid } ) => uid === id );\n\t\tif ( unpublishedComponent ) {\n\t\t\treturn structuredClone( unpublishedComponent.elements );\n\t\t}\n\n\t\tif ( typeof id !== 'number' ) {\n\t\t\tthrow new Error( `Component ID \"${ id }\" not found.` );\n\t\t}\n\n\t\tconst data = await getComponentDocumentData( id );\n\n\t\treturn data?.elements ?? [];\n\t}\n);\n","import { type V1Document } from '@elementor/editor-documents';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport {\n\ttype Component,\n\ttype ComponentId,\n\ttype OverridableProps,\n\ttype PublishedComponent,\n\ttype StylesDefinition,\n\ttype UnpublishedComponent,\n} from '../types';\nimport { loadComponents } from './thunks';\n\ntype GetComponentResponse = PublishedComponent[];\n\ntype Status = 'idle' | 'pending' | 'error';\n\ntype ComponentsState = {\n\tdata: PublishedComponent[];\n\tunpublishedData: UnpublishedComponent[];\n\tloadStatus: Status;\n\tstyles: StylesDefinition;\n\tcreatedThisSession: Component[ 'uid' ][];\n\tarchivedData: PublishedComponent[];\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n};\n\nexport type ComponentsSlice = SliceState< typeof slice >;\n\nexport type ComponentsPathItem = {\n\tinstanceId?: string;\n\tcomponentId: V1Document[ 'id' ];\n};\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\n\tcreatedThisSession: [],\n\tarchivedData: [],\n\tpath: [],\n\tcurrentComponentId: null,\n};\n\nexport const SLICE_NAME = 'components';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tadd: ( state, { payload }: PayloadAction< PublishedComponent | PublishedComponent[] > ) => {\n\t\t\tif ( Array.isArray( payload ) ) {\n\t\t\t\tstate.data = [ ...state.data, ...payload ];\n\t\t\t} else {\n\t\t\t\tstate.data.unshift( payload );\n\t\t\t}\n\t\t},\n\t\tload: ( state, { payload }: PayloadAction< PublishedComponent[] > ) => {\n\t\t\tstate.data = payload;\n\t\t},\n\t\taddUnpublished: ( state, { payload }: PayloadAction< UnpublishedComponent > ) => {\n\t\t\tstate.unpublishedData.unshift( payload );\n\t\t},\n\t\tresetUnpublished: ( state ) => {\n\t\t\tstate.unpublishedData = [];\n\t\t},\n\t\tremoveStyles( state, { payload }: PayloadAction< { id: ComponentId } > ) {\n\t\t\tconst { [ payload.id ]: _, ...rest } = state.styles;\n\n\t\t\tstate.styles = rest;\n\t\t},\n\t\taddStyles: ( state, { payload } ) => {\n\t\t\tstate.styles = { ...state.styles, ...payload };\n\t\t},\n\t\taddCreatedThisSession: ( state, { payload }: PayloadAction< string > ) => {\n\t\t\tstate.createdThisSession.push( payload );\n\t\t},\n\t\tarchive: ( state, { payload }: PayloadAction< number > ) => {\n\t\t\tstate.data = state.data.filter( ( component ) => {\n\t\t\t\tconst isArchived = component.id === payload;\n\t\t\t\tif ( isArchived ) {\n\t\t\t\t\tstate.archivedData.push( component );\n\t\t\t\t}\n\n\t\t\t\treturn ! isArchived;\n\t\t\t} );\n\t\t},\n\t\tsetCurrentComponentId: ( state, { payload }: PayloadAction< V1Document[ 'id' ] | null > ) => {\n\t\t\tstate.currentComponentId = payload;\n\t\t},\n\t\tsetPath: ( state, { payload }: PayloadAction< ComponentsPathItem[] > ) => {\n\t\t\tstate.path = payload;\n\t\t},\n\t\tsetOverridableProps: (\n\t\t\tstate,\n\t\t\t{ payload }: PayloadAction< { componentId: ComponentId; overridableProps: OverridableProps } >\n\t\t) => {\n\t\t\tconst component = state.data.find( ( comp ) => comp.id === payload.componentId );\n\n\t\t\tif ( ! component ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcomponent.overridableProps = payload.overridableProps;\n\t\t},\n\t},\n\textraReducers: ( builder ) => {\n\t\tbuilder.addCase( loadComponents.fulfilled, ( state, { payload }: PayloadAction< GetComponentResponse > ) => {\n\t\t\tstate.data = payload;\n\t\t\tstate.loadStatus = 'idle';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.pending, ( state ) => {\n\t\t\tstate.loadStatus = 'pending';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.rejected, ( state ) => {\n\t\t\tstate.loadStatus = 'error';\n\t\t} );\n\t},\n} );\n\nconst selectData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].data;\nconst selectArchivedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].archivedData;\nconst selectLoadStatus = ( state: ComponentsSlice ) => state[ SLICE_NAME ].loadStatus;\nconst selectStylesDefinitions = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nconst selectUnpublishedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].unpublishedData;\nconst getCreatedThisSession = ( state: ComponentsSlice ) => state[ SLICE_NAME ].createdThisSession;\nconst getPath = ( state: ComponentsSlice ) => state[ SLICE_NAME ].path;\nconst getCurrentComponentId = ( state: ComponentsSlice ) => state[ SLICE_NAME ].currentComponentId;\nexport const selectComponent = ( state: ComponentsSlice, componentId: ComponentId ) =>\n\tstate[ SLICE_NAME ].data.find( ( component ) => component.id === componentId );\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: PublishedComponent[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( { uid: item.uid, name: item.name } ) ),\n\t\t...data,\n\t]\n);\nexport const selectUnpublishedComponents = createSelector(\n\tselectUnpublishedData,\n\t( unpublishedData: UnpublishedComponent[] ) => unpublishedData\n);\nexport const selectLoadIsPending = createSelector( selectLoadStatus, ( status ) => status === 'pending' );\nexport const selectLoadIsError = createSelector( selectLoadStatus, ( status ) => status === 'error' );\nexport const selectStyles = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nexport const selectFlatStyles = createSelector( selectStylesDefinitions, ( data ) => Object.values( data ).flat() );\nexport const selectCreatedThisSession = createSelector(\n\tgetCreatedThisSession,\n\t( createdThisSession ) => createdThisSession\n);\n\nconst DEFAULT_OVERRIDABLE_PROPS: OverridableProps = {\n\tprops: {},\n\tgroups: {\n\t\titems: {},\n\t\torder: [],\n\t},\n};\n\nexport const selectOverridableProps = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\tif ( ! component ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;\n\t}\n);\nexport const selectIsOverridablePropsLoaded = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\treturn !! component?.overridableProps;\n\t}\n);\nexport const selectPath = createSelector( getPath, ( path ) => path );\nexport const selectCurrentComponentId = createSelector(\n\tgetCurrentComponentId,\n\t( currentComponentId ) => currentComponentId\n);\n\nexport const selectArchivedComponents = createSelector(\n\tselectArchivedData,\n\t( archivedData: PublishedComponent[] ) => archivedData\n);\n","import { __createAsyncThunk as createAsyncThunk } from '@elementor/store';\n\nimport { apiClient } from '../api';\n\nconst loadComponents = createAsyncThunk( 'components/load', async () => {\n\tconst response = await apiClient.get();\n\treturn response;\n} );\n\nexport { loadComponents };\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { ajax } from '@elementor/editor-v1-adapters';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type DocumentSaveStatus, type OverridableProps, type PublishedComponent } from './types';\n\nconst BASE_URL = 'elementor/v1/components';\n\nexport type CreateComponentPayload = {\n\tstatus: DocumentSaveStatus;\n\titems: Array< {\n\t\tuid: string;\n\t\ttitle: string;\n\t\telements: V1ElementData[];\n\t} >;\n};\n\ntype ComponentLockStatusResponse = {\n\tis_current_user_allow_to_edit: boolean;\n\tlocked_by: string;\n};\n\ntype GetComponentResponse = Array< PublishedComponent >;\n\nexport type CreateComponentResponse = Record< string, number >;\n\nexport const getParams = ( id: number ) => ( {\n\taction: 'get_document_config',\n\tunique_id: `document-config-${ id }`,\n\tdata: { id },\n} );\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< HttpResponse< GetComponentResponse > >( `${ BASE_URL }` )\n\t\t\t.then( ( res ) => res.data.data ),\n\tcreate: ( payload: CreateComponentPayload ) =>\n\t\thttpService()\n\t\t\t.post< HttpResponse< CreateComponentResponse > >( `${ BASE_URL }`, payload )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateStatuses: ( ids: number[], status: DocumentSaveStatus ) =>\n\t\thttpService().put( `${ BASE_URL }/status`, {\n\t\t\tids,\n\t\t\tstatus,\n\t\t} ),\n\tgetComponentConfig: ( id: number ) => ajax.load< { id: number }, V1ElementData >( getParams( id ) ),\n\tinvalidateComponentConfigCache: ( id: number ) => ajax.invalidateCache< { id: number } >( getParams( id ) ),\n\tgetComponentLockStatus: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< { data: ComponentLockStatusResponse } >( `${ BASE_URL }/lock-status`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId,\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => {\n\t\t\t\tconst { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data;\n\t\t\t\treturn { isAllowedToSwitchDocument, lockedBy: lockedBy || '' };\n\t\t\t} ),\n\tlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/lock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tunlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/unlock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tgetOverridableProps: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< HttpResponse< OverridableProps > >( `${ BASE_URL }/overridable-props`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId: componentId.toString(),\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateArchivedComponents: async ( componentIds: number[] ) =>\n\t\tawait httpService()\n\t\t\t.post< { data: { failedIds: number[]; successIds: number[]; success: boolean } } >(\n\t\t\t\t`${ BASE_URL }/archive`,\n\t\t\t\t{\n\t\t\t\t\tcomponentIds,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then( ( res ) => res.data.data ),\n};\n","import { type Document, getV1DocumentsManager } from '@elementor/editor-documents';\n\ntype ComponentDocumentData = Document;\n\nexport const getComponentDocumentData = async ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\ttry {\n\t\treturn await documentManager.request< ComponentDocumentData >( id );\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const invalidateComponentDocumentData = ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\tdocumentManager.invalidateCache( id );\n};\n","import { createTransformer } from '@elementor/editor-canvas';\n\nimport { type ComponentOverridable } from './types';\n\nexport const componentOverridableTransformer = createTransformer( ( value: ComponentOverridable ) => {\n\t// todo: render component overrides\n\treturn value.origin_value;\n} );\n","import * as React from 'react';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { ArrowLeftIcon, ComponentsFilledIcon } from '@elementor/icons';\nimport { __useSelector as useSelector } from '@elementor/store';\nimport { Box, Divider, IconButton, Stack, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { selectCurrentComponentId } from '../../store/store';\nimport { ComponentsBadge } from './component-badge';\nimport { useOverridableProps } from './use-overridable-props';\n\nexport const ComponentPanelHeader = () => {\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\tconst onBack = useNavigateBack();\n\tconst componentName = getComponentName();\n\n\tconst overridesCount = overridableProps ? Object.keys( overridableProps.props ).length : 0;\n\n\tif ( ! currentComponentId ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Box>\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"center\"\n\t\t\t\tjustifyContent=\"space-between\"\n\t\t\t\tsx={ { height: 48, pl: 1.5, pr: 2, py: 1 } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t<Tooltip title={ __( 'Back', 'elementor' ) }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ onBack } aria-label={ __( 'Back', 'elementor' ) }>\n\t\t\t\t\t\t\t<ArrowLeftIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 }>\n\t\t\t\t\t\t<ComponentsFilledIcon fontSize=\"tiny\" stroke=\"currentColor\" />\n\t\t\t\t\t\t<Typography variant=\"caption\" sx={ { fontWeight: 500 } }>\n\t\t\t\t\t\t\t{ componentName }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t\t<ComponentsBadge overridesCount={ overridesCount } />\n\t\t\t</Stack>\n\t\t\t<Divider />\n\t\t</Box>\n\t);\n};\n\nfunction getComponentName() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentDocument = documentsManager.getCurrent();\n\n\treturn currentDocument?.container?.settings?.get( 'post_title' ) ?? '';\n}\n","import { useCallback } from 'react';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectPath } from '../store/store';\nimport { switchToComponent } from '../utils/switch-to-component';\n\nexport function useNavigateBack() {\n\tconst path = useSelector( selectPath );\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\treturn useCallback( () => {\n\t\tconst { componentId: prevComponentId, instanceId: prevComponentInstanceId } = path.at( -2 ) ?? {};\n\n\t\tif ( prevComponentId && prevComponentInstanceId ) {\n\t\t\tswitchToComponent( prevComponentId, prevComponentInstanceId );\n\n\t\t\treturn;\n\t\t}\n\n\t\tswitchToComponent( documentsManager.getInitialId() );\n\t}, [ path, documentsManager ] );\n}\n","import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\n\nexport function switchToComponent( componentId: number | string, componentInstanceId?: string | null ) {\n\trunCommand( 'editor/documents/switch', {\n\t\tid: componentId,\n\t\tselector: componentInstanceId ? `[data-id=\"${ componentInstanceId }\"]` : undefined,\n\t\tmode: 'autosave',\n\t\tsetAsInitial: false,\n\t\tshouldScroll: false,\n\t} );\n}\n","import * as React from 'react';\nimport { useEffect, useRef } from 'react';\nimport { ComponentPropListIcon } from '@elementor/icons';\nimport { Badge, Box, keyframes, styled, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const ComponentsBadge = ( { overridesCount }: { overridesCount: number } ) => {\n\tconst prevCount = usePrevious( overridesCount );\n\n\tconst isFirstOverride = prevCount === 0 && overridesCount === 1;\n\n\treturn (\n\t\t<StyledBadge\n\t\t\tcolor=\"primary\"\n\t\t\tkey={ overridesCount }\n\t\t\tinvisible={ overridesCount === 0 }\n\t\t\tanimate={ isFirstOverride }\n\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\tbadgeContent={\n\t\t\t\t<Box sx={ { animation: ! isFirstOverride ? `${ slideUp } 300ms ease-out` : 'none' } }>\n\t\t\t\t\t{ overridesCount }\n\t\t\t\t</Box>\n\t\t\t}\n\t\t>\n\t\t\t<ToggleButton value=\"overrides\" size=\"tiny\" aria-label={ __( 'View overrides', 'elementor' ) }>\n\t\t\t\t<ComponentPropListIcon fontSize=\"tiny\" />\n\t\t\t</ToggleButton>\n\t\t</StyledBadge>\n\t);\n};\n\nconst StyledBadge = styled( Badge, { shouldForwardProp: ( prop ) => prop !== 'animate' } )(\n\t( { theme, animate } ) => ( {\n\t\t'& .MuiBadge-badge': {\n\t\t\tminWidth: theme.spacing( 2 ),\n\t\t\theight: theme.spacing( 2 ),\n\t\t\tminHeight: theme.spacing( 2 ),\n\t\t\tmaxWidth: theme.spacing( 2 ),\n\t\t\tfontSize: theme.typography.caption.fontSize as string,\n\t\t\tanimation: animate ? `${ bounceIn } 300ms ease-out` : 'none',\n\t\t},\n\t} )\n);\n\nfunction usePrevious< T >( value: T ) {\n\tconst ref = useRef< T >( value );\n\tuseEffect( () => {\n\t\tref.current = value;\n\t}, [ value ] );\n\treturn ref.current;\n}\n\nconst bounceIn = keyframes`\n\t0% { transform: scale(0) translate(50%, 50%); opacity: 0; }\n\t70% { transform: scale(1.1) translate(50%, -50%); opacity: 1; }\n\t100% { transform: scale(1) translate(50%, -50%); opacity: 1; }\n`;\n\nconst slideUp = keyframes`\n\tfrom { transform: translateY(100%); opacity: 0; }\n\tto { transform: translateY(0); opacity: 1; }\n`;\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { type ComponentsSlice, selectOverridableProps } from '../../store/store';\nimport { type ComponentId, type OverridableProps } from '../../types';\n\nexport function useOverridableProps( componentId: ComponentId | null ): OverridableProps | undefined {\n\treturn useSelector( ( state: ComponentsSlice ) => {\n\t\tif ( ! componentId ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn selectOverridableProps( state, componentId );\n\t} );\n}\n","import * as React from 'react';\nimport { ThemeProvider } from '@elementor/editor-ui';\n\nimport { ComponentSearch } from './component-search';\nimport { ComponentsList } from './components-list';\nimport { SearchProvider } from './search-provider';\n\nexport const Components = () => {\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<SearchProvider localStorageKey=\"elementor-components-search\">\n\t\t\t\t<ComponentSearch />\n\t\t\t\t<ComponentsList />\n\t\t\t</SearchProvider>\n\t\t</ThemeProvider>\n\t);\n};\n","import * as React from 'react';\nimport { SearchIcon } from '@elementor/icons';\nimport { Box, InputAdornment, Stack, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useSearch } from './search-provider';\n\nexport const ComponentSearch = () => {\n\tconst { inputValue, handleChange } = useSearch();\n\n\treturn (\n\t\t<Stack direction=\"row\" gap={ 0.5 } sx={ { width: '100%', px: 2, py: 1.5 } }>\n\t\t\t<Box sx={ { flexGrow: 1 } }>\n\t\t\t\t<TextField\n\t\t\t\t\trole={ 'search' }\n\t\t\t\t\tfullWidth\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ inputValue }\n\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t<SearchIcon fontSize={ 'tiny' } />\n\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { useSearchState, type UseSearchStateResult } from '@elementor/utils';\n\ntype SearchContextType = Pick< UseSearchStateResult, 'handleChange' | 'inputValue' > & {\n\tsearchValue: UseSearchStateResult[ 'debouncedValue' ];\n\tclearSearch: () => void;\n};\n\nconst SearchContext = createContext< SearchContextType | undefined >( undefined );\n\nexport const SearchProvider = ( {\n\tchildren,\n\tlocalStorageKey,\n}: {\n\tchildren: React.ReactNode;\n\tlocalStorageKey: string;\n} ) => {\n\tconst { debouncedValue, handleChange, inputValue } = useSearchState( { localStorageKey } );\n\n\tconst clearSearch = () => {\n\t\thandleChange( '' );\n\t};\n\n\treturn (\n\t\t<SearchContext.Provider value={ { handleChange, clearSearch, searchValue: debouncedValue, inputValue } }>\n\t\t\t{ children }\n\t\t</SearchContext.Provider>\n\t);\n};\n\nexport const useSearch = () => {\n\tconst context = useContext( SearchContext );\n\tif ( ! context ) {\n\t\tthrow new Error( 'useSearch must be used within a SearchProvider' );\n\t}\n\treturn context;\n};\n","import * as React from 'react';\nimport { ComponentsIcon, EyeIcon } from '@elementor/icons';\nimport { Box, Divider, Icon, Link, List, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { ComponentItem } from './components-item';\nimport { LoadingComponents } from './loading-components';\nimport { useSearch } from './search-provider';\n\nexport function ComponentsList() {\n\tconst { components, isLoading, searchValue } = useFilteredComponents();\n\n\tif ( isLoading ) {\n\t\treturn <LoadingComponents />;\n\t}\n\tconst isEmpty = ! components || components.length === 0;\n\tif ( isEmpty ) {\n\t\tif ( searchValue.length > 0 ) {\n\t\t\treturn <EmptySearchResult />;\n\t\t}\n\t\treturn <EmptyState />;\n\t}\n\n\treturn (\n\t\t<List sx={ { display: 'flex', flexDirection: 'column', gap: 1, px: 2 } }>\n\t\t\t{ components.map( ( component ) => (\n\t\t\t\t<ComponentItem key={ component.uid } component={ component } />\n\t\t\t) ) }\n\t\t</List>\n\t);\n}\n\nconst EmptyState = () => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\theight=\"100%\"\n\t\t\tsx={ { px: 2.5, pt: 10 } }\n\t\t\tgap={ 1.75 }\n\t\t\toverflow=\"hidden\"\n\t\t>\n\t\t\t<Icon fontSize=\"large\">\n\t\t\t\t<EyeIcon fontSize=\"large\" />\n\t\t\t</Icon>\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"text.secondary\" fontWeight=\"bold\">\n\t\t\t\t{ __( 'Text that explains that there are no Components yet.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography variant=\"caption\" align=\"center\" color=\"text.secondary\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Once you have Components, this is where you can manage them—rearrange, duplicate, rename and delete irrelevant classes.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\t\t\t<Divider sx={ { width: '100%' } } color=\"text.secondary\" />\n\t\t\t<Typography align=\"left\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t{ __( 'To create a component, first design it, then choose one of three options:', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography\n\t\t\t\talign=\"left\"\n\t\t\t\tvariant=\"caption\"\n\t\t\t\tcolor=\"text.secondary\"\n\t\t\t\tsx={ { display: 'flex', flexDirection: 'column' } }\n\t\t\t>\n\t\t\t\t<span>{ __( '1. Right-click and select Create Component', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '2. Use the component icon in the Structure panel', 'elementor' ) }</span>\n\t\t\t\t<span>{ __( '3. Use the component icon in the Edit panel header', 'elementor' ) }</span>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst EmptySearchResult = () => {\n\tconst { searchValue, clearSearch } = useSearch();\n\treturn (\n\t\t<Stack\n\t\t\tcolor={ 'text.secondary' }\n\t\t\tpt={ 5 }\n\t\t\talignItems=\"center\"\n\t\t\tgap={ 1 }\n\t\t\toverflow={ 'hidden' }\n\t\t\tjustifySelf={ 'center' }\n\t\t>\n\t\t\t<ComponentsIcon />\n\t\t\t<Box\n\t\t\t\tsx={ {\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Typography align=\"center\" variant=\"subtitle2\" color=\"inherit\">\n\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t</Typography>\n\t\t\t\t{ searchValue && (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tvariant=\"subtitle2\"\n\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>&ldquo;</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tstyle={ {\n\t\t\t\t\t\t\t\tmaxWidth: '80%',\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ searchValue }\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span>&rdquo;.</span>\n\t\t\t\t\t</Typography>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t{ __( 'Try something else.', 'elementor' ) }\n\t\t\t</Typography>\n\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"inherit\">\n\t\t\t\t<Link color=\"secondary\" variant=\"caption\" component=\"button\" onClick={ clearSearch }>\n\t\t\t\t\t{ __( 'Clear & try again', 'elementor' ) }\n\t\t\t\t</Link>\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n};\n\nconst useFilteredComponents = () => {\n\tconst { components, isLoading } = useComponents();\n\tconst { searchValue } = useSearch();\n\n\treturn {\n\t\tcomponents: components.filter( ( component ) =>\n\t\t\tcomponent.name.toLowerCase().includes( searchValue.toLowerCase() )\n\t\t),\n\t\tisLoading,\n\t\tsearchValue,\n\t};\n};\n","import { __useSelector as useSelector } from '@elementor/store';\n\nimport { selectComponents, selectLoadIsPending } from '../store/store';\n\nexport const useComponents = () => {\n\tconst components = useSelector( selectComponents );\n\tconst isLoading = useSelector( selectLoadIsPending );\n\n\treturn { components, isLoading };\n};\n","import * as React from 'react';\nimport { endDragElementFromPanel, startDragElementFromPanel } from '@elementor/editor-canvas';\nimport { dropElement, type DropElementParams, type V1ElementData } from '@elementor/editor-elements';\nimport { EllipsisWithTooltip, MenuListItem } from '@elementor/editor-ui';\nimport { ComponentsIcon, DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tListItemButton,\n\tListItemIcon,\n\tMenu,\n\tStack,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { archiveComponent } from '../../store/actions/archive-component';\nimport { loadComponentsAssets } from '../../store/actions/load-components-assets';\nimport { type Component } from '../../types';\nimport { getContainerForNewElement } from '../../utils/get-container-for-new-element';\nimport { createComponentModel } from '../create-component-form/utils/replace-element-with-component';\n\ntype ComponentItemProps = {\n\tcomponent: Omit< Component, 'id' > & { id?: number };\n};\n\nexport const ComponentItem = ( { component }: ComponentItemProps ) => {\n\tconst componentModel = createComponentModel( component );\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst handleClick = () => {\n\t\taddComponentToPage( componentModel );\n\t};\n\n\tconst handleDragEnd = () => {\n\t\tloadComponentsAssets( [ componentModel as V1ElementData ] );\n\n\t\tendDragElementFromPanel();\n\t};\n\n\tconst handleArchiveClick = () => {\n\t\tpopupState.close();\n\n\t\tif ( ! component.id ) {\n\t\t\tthrow new Error( 'Component ID is required' );\n\t\t}\n\n\t\tarchiveComponent( component.id );\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<ListItemButton\n\t\t\t\tdraggable\n\t\t\t\tonDragStart={ () => startDragElementFromPanel( componentModel ) }\n\t\t\t\tonDragEnd={ handleDragEnd }\n\t\t\t\tshape=\"rounded\"\n\t\t\t\tsx={ {\n\t\t\t\t\tborder: 'solid 1px',\n\t\t\t\t\tborderColor: 'divider',\n\t\t\t\t\tpy: 0.5,\n\t\t\t\t\tpx: 1,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 1,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Box\n\t\t\t\t\tonClick={ handleClick }\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tgap: 1,\n\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\tflexGrow: 1,\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<ListItemIcon size=\"tiny\">\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"tiny\" />\n\t\t\t\t\t</ListItemIcon>\n\t\t\t\t\t<Box display=\"flex\" flex={ 1 } minWidth={ 0 } flexGrow={ 1 }>\n\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\ttitle={ component.name }\n\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\tcolor=\"text.primary\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t\t<IconButton size=\"tiny\" { ...bindTrigger( popupState ) } aria-label=\"More actions\">\n\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</ListItemButton>\n\t\t\t<Menu\n\t\t\t\t{ ...bindMenu( popupState ) }\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<MenuListItem sx={ { minWidth: '160px' } } onClick={ handleArchiveClick }>\n\t\t\t\t\t{ __( 'Archive', 'elementor' ) }\n\t\t\t\t</MenuListItem>\n\t\t\t</Menu>\n\t\t</Stack>\n\t);\n};\n\nconst addComponentToPage = ( model: DropElementParams[ 'model' ] ) => {\n\tconst { container, options } = getContainerForNewElement();\n\n\tif ( ! container ) {\n\t\tthrow new Error( `Can't find container to drop new component instance at` );\n\t}\n\n\tloadComponentsAssets( [ model as V1ElementData ] );\n\n\tdropElement( {\n\t\tcontainerId: container.id,\n\t\tmodel,\n\t\toptions: { ...options, useHistory: false, scrollIntoView: true },\n\t} );\n};\n","import { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { slice } from '../store';\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import { isDocumentDirty, setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { getComponentDocumentData } from '../../utils/component-document-data';\nimport { getComponentIds } from '../../utils/get-component-ids';\nimport { loadComponentsOverridableProps } from './load-components-overridable-props';\nimport { loadComponentsStyles } from './load-components-styles';\n\nexport async function loadComponentsAssets( elements: V1ElementData[] ) {\n\tconst componentIds = await getComponentIds( elements );\n\n\treturn Promise.all( [\n\t\tupdateDocumentState( componentIds ),\n\t\tloadComponentsOverridableProps( componentIds ),\n\t\tloadComponentsStyles( componentIds ),\n\t] );\n}\n\nasync function updateDocumentState( componentIds: number[] ) {\n\tconst components = ( await Promise.all( componentIds.map( getComponentDocumentData ) ) ).filter(\n\t\t( document ) => !! document\n\t);\n\n\tconst isDrafted = components.some( isDocumentDirty );\n\n\tif ( isDrafted ) {\n\t\tsetDocumentModifiedStatus( true );\n\t}\n}\n","import {\n\ttype BackboneModel,\n\ttype CreateTemplatedElementTypeOptions,\n\tcreateTemplatedElementView,\n\ttype ElementModel,\n\ttype ElementType,\n\ttype ElementView,\n\ttype LegacyWindow,\n} from '@elementor/editor-canvas';\nimport { getCurrentDocument } from '@elementor/editor-documents';\nimport { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\nimport { type ComponentInstancePropValue, type ExtendedWindow } from './types';\nimport { switchToComponent } from './utils/switch-to-component';\nimport { trackComponentEvent } from './utils/tracking';\n\ntype ContextMenuEventData = { location: string; secondaryLocation: string; trigger: string };\n\nexport type ContextMenuAction = {\n\tname: string;\n\ticon: string;\n\ttitle: string | ( () => string );\n\tisEnabled: () => boolean;\n\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => void;\n};\n\ntype ContextMenuGroupConfig = {\n\tdisable: Record< string, string[] >;\n\tadd: Record< string, { index: number; action: ContextMenuAction } >;\n};\n\ntype ContextMenuGroup = {\n\tname: string;\n\tactions: ContextMenuAction[];\n};\n\nexport const TYPE = 'e-component';\n\nconst updateGroups = ( groups: ContextMenuGroup[], config: ContextMenuGroupConfig ): ContextMenuGroup[] => {\n\tconst disableMap = new Map( Object.entries( config.disable ?? {} ) );\n\tconst addMap = new Map( Object.entries( config.add ?? {} ) );\n\n\treturn groups.map( ( group ) => {\n\t\tconst disabledActions = disableMap.get( group.name ) ?? [];\n\t\tconst addConfig = addMap.get( group.name );\n\n\t\t// Update disabled actions\n\t\tconst updatedActions = group.actions.map( ( action ) =>\n\t\t\tdisabledActions.includes( action.name ) ? { ...action, isEnabled: () => false } : action\n\t\t);\n\n\t\t// Insert additional action if needed\n\t\tif ( addConfig ) {\n\t\t\tupdatedActions.splice( addConfig.index, 0, addConfig.action );\n\t\t}\n\n\t\treturn { ...group, actions: updatedActions };\n\t} );\n};\n\nexport function createComponentType(\n\toptions: CreateTemplatedElementTypeOptions & { showLockedByModal?: ( lockedBy: string ) => void }\n): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn options.type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createComponentView( { ...options } );\n\t\t}\n\t};\n}\n\nfunction createComponentView(\n\toptions: CreateTemplatedElementTypeOptions & {\n\t\tshowLockedByModal?: ( lockedBy: string ) => void;\n\t}\n): typeof ElementView {\n\treturn class extends createTemplatedElementView( options ) {\n\t\tlegacyWindow = window as unknown as LegacyWindow & ExtendedWindow;\n\t\teventsManagerConfig = this.legacyWindow.elementorCommon.eventsManager.config;\n\n\t\tisComponentCurrentlyEdited() {\n\t\t\tconst currentDocument = getCurrentDocument();\n\n\t\t\treturn currentDocument?.id === this.getComponentId();\n\t\t}\n\n\t\tafterSettingsResolve( settings: { [ key: string ]: unknown } ) {\n\t\t\tif ( settings.component_instance ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection(\n\t\t\t\t\tsettings.component_instance\n\t\t\t\t);\n\n\t\t\t\tthis.collection.models.forEach( setInactiveRecursively );\n\n\t\t\t\tsettings.component_instance = '<template data-children-placeholder></template>';\n\t\t\t}\n\n\t\t\treturn settings;\n\t\t}\n\n\t\tgetDomElement() {\n\t\t\t// Component does not have a DOM element, so we return the first child's DOM element.\n\t\t\treturn this.children.findByIndex( 0 )?.getDomElement() ?? this.$el;\n\t\t}\n\n\t\tattachBuffer( collectionView: this, buffer: DocumentFragment ): void {\n\t\t\tconst childrenPlaceholder = collectionView.$el.find( '[data-children-placeholder]' ).get( 0 );\n\n\t\t\tif ( ! childrenPlaceholder ) {\n\t\t\t\tsuper.attachBuffer( collectionView, buffer );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tchildrenPlaceholder.replaceWith( buffer );\n\t\t}\n\n\t\tgetComponentId() {\n\t\t\tconst componentInstance = (\n\t\t\t\tthis.options?.model?.get( 'settings' )?.get( 'component_instance' ) as ComponentInstancePropValue\n\t\t\t )?.value;\n\n\t\t\treturn componentInstance.component_id.value;\n\t\t}\n\n\t\tgetContextMenuGroups() {\n\t\t\tconst filteredGroups = super.getContextMenuGroups().filter( ( group ) => group.name !== 'save' );\n\t\t\tconst componentId = this.getComponentId();\n\t\t\tif ( ! componentId ) {\n\t\t\t\treturn filteredGroups;\n\t\t\t}\n\n\t\t\tconst newGroups = updateGroups(\n\t\t\t\tfilteredGroups as ContextMenuGroup[],\n\t\t\t\tthis._getContextMenuConfig() as unknown as ContextMenuGroupConfig\n\t\t\t);\n\t\t\treturn newGroups;\n\t\t}\n\n\t\t_getContextMenuConfig() {\n\t\t\tconst legacyWindow = this.legacyWindow || ( window as unknown as LegacyWindow & ExtendedWindow );\n\t\t\tconst elementorWithConfig = legacyWindow.elementor as typeof legacyWindow.elementor & {\n\t\t\t\tconfig?: { user?: { is_administrator?: boolean } };\n\t\t\t};\n\t\t\tconst isAdministrator = elementorWithConfig.config?.user?.is_administrator ?? false;\n\n\t\t\tconst addedGroup = {\n\t\t\t\tgeneral: {\n\t\t\t\t\tindex: 1,\n\t\t\t\t\taction: {\n\t\t\t\t\t\tname: 'edit component',\n\t\t\t\t\t\ticon: 'eicon-edit',\n\t\t\t\t\t\ttitle: () => __( 'Edit Component', 'elementor' ),\n\t\t\t\t\t\tisEnabled: () => true,\n\t\t\t\t\t\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => this.editComponent( eventData ),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst disabledGroup = {\n\t\t\t\tclipboard: [ 'pasteStyle', 'resetStyle' ],\n\t\t\t};\n\n\t\t\treturn { add: isAdministrator ? addedGroup : {}, disable: disabledGroup };\n\t\t}\n\n\t\tasync switchDocument() {\n\t\t\t//todo: handle unpublished\n\t\t\tconst { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(\n\t\t\t\tthis.getComponentId() as number\n\t\t\t);\n\n\t\t\tif ( ! isAllowedToSwitchDocument ) {\n\t\t\t\toptions.showLockedByModal?.( lockedBy || '' );\n\t\t\t} else {\n\t\t\t\tswitchToComponent( this.getComponentId(), this.model.get( 'id' ) );\n\t\t\t}\n\t\t}\n\n\t\teditComponent( { trigger, location, secondaryLocation }: ContextMenuEventData ) {\n\t\t\tif ( this.isComponentCurrentlyEdited() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.switchDocument();\n\n\t\t\tconst editorSettings = this.model.get( 'editor_settings' );\n\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'edited',\n\t\t\t\tcomponent_uid: editorSettings?.component_uid,\n\t\t\t\tcomponent_name: editorSettings?.title,\n\t\t\t\tlocation,\n\t\t\t\tsecondary_location: secondaryLocation,\n\t\t\t\ttrigger,\n\t\t\t} );\n\t\t}\n\n\t\thandleDblClick( e: MouseEvent ) {\n\t\t\te.stopPropagation();\n\n\t\t\tconst { triggers, locations, secondaryLocations } = this.eventsManagerConfig;\n\n\t\t\tthis.editComponent( {\n\t\t\t\ttrigger: triggers.doubleClick,\n\t\t\t\tlocation: locations.canvas,\n\t\t\t\tsecondaryLocation: secondaryLocations.canvasElement,\n\t\t\t} );\n\t\t}\n\n\t\tevents() {\n\t\t\treturn {\n\t\t\t\t...super.events(),\n\t\t\t\tdblclick: this.handleDblClick,\n\t\t\t};\n\t\t}\n\n\t\tattributes() {\n\t\t\treturn {\n\t\t\t\t...super.attributes(),\n\t\t\t\t'data-elementor-id': this.getComponentId(),\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction setInactiveRecursively( model: BackboneModel< ElementModel > ) {\n\tconst editSettings = model.get( 'editSettings' );\n\n\tif ( editSettings ) {\n\t\teditSettings.set( 'inactive', true );\n\t}\n\n\tconst elements = model.get( 'elements' );\n\n\tif ( elements ) {\n\t\telements.forEach( ( childModel ) => {\n\t\t\tsetInactiveRecursively( childModel );\n\t\t} );\n\t}\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport { getMixpanel } from '@elementor/mixpanel';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectCreatedThisSession } from '../store/store';\nimport { type ExtendedWindow } from '../types';\n\ntype ComponentEventData = Record< string, unknown > & {\n\taction: 'createClicked' | 'created' | 'createCancelled' | 'instanceAdded' | 'edited';\n};\n\nexport const trackComponentEvent = ( { action, ...data }: ComponentEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.components?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.components[ action ];\n\tdispatchEvent?.( name, data );\n};\n\nexport const onElementDrop = ( _args: unknown, element: V1Element ) => {\n\tif ( ! ( element.model.get( 'widgetType' ) === 'e-component' ) ) {\n\t\treturn;\n\t}\n\n\tconst editorSettings = element.model.get( 'editor_settings' );\n\tconst componentName = editorSettings?.title;\n\tconst componentUID = editorSettings?.component_uid;\n\tconst instanceId = element.id;\n\n\tconst createdThisSession = selectCreatedThisSession( getState() );\n\tconst isSameSessionReuse = componentUID && createdThisSession.includes( componentUID );\n\n\tconst eventsManagerConfig = ( window as unknown as ExtendedWindow ).elementorCommon.eventsManager.config;\n\tconst { locations, secondaryLocations } = eventsManagerConfig;\n\n\ttrackComponentEvent( {\n\t\taction: 'instanceAdded',\n\t\tinstance_id: instanceId,\n\t\tcomponent_uid: componentUID,\n\t\tcomponent_name: componentName,\n\t\tis_same_session_reuse: isSameSessionReuse,\n\t\tlocation: locations.widgetPanel,\n\t\tsecondary_location: secondaryLocations.componentsTab,\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nimport { TYPE } from '../create-component-type';\nimport { type ComponentInstancePropValue } from '../types';\nimport { getComponentDocumentData } from './component-document-data';\n\nexport const getComponentIds = async ( elements: V1ElementData[] ) => {\n\tconst components = elements.map( async ( { widgetType, elType, elements: childElements, settings } ) => {\n\t\tconst ids: number[] = [];\n\n\t\tconst isComponent = [ widgetType, elType ].includes( TYPE );\n\n\t\tif ( isComponent ) {\n\t\t\tconst componentId = ( settings?.component_instance as ComponentInstancePropValue< number > )?.value\n\t\t\t\t?.component_id.value;\n\n\t\t\tconst document = await getComponentDocumentData( componentId );\n\n\t\t\tchildElements = document?.elements;\n\n\t\t\tif ( Boolean( componentId ) ) {\n\t\t\t\tids.push( componentId );\n\t\t\t}\n\t\t}\n\n\t\tif ( !! childElements?.length ) {\n\t\t\tids.push( ...( await getComponentIds( childElements ) ) );\n\t\t}\n\n\t\treturn ids;\n\t} );\n\n\tconst result = ( await Promise.all( components ) ).flat();\n\n\treturn Array.from( new Set( result ) );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { selectIsOverridablePropsLoaded, slice } from '../store';\n\nexport function loadComponentsOverridableProps( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tcomponentIds.forEach( loadComponentOverrides );\n}\n\nasync function loadComponentOverrides( componentId: number ) {\n\tconst isOverridablePropsLoaded = selectIsOverridablePropsLoaded( getState(), componentId );\n\n\tif ( isOverridablePropsLoaded ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = await apiClient.getOverridableProps( componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps,\n\t\t} )\n\t);\n}\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { type ComponentId } from '../../types';\nimport { selectStyles, slice } from '../store';\n\nexport async function loadComponentsStyles( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tconst knownComponents = selectStyles( getState() );\n\tconst unknownComponentIds = componentIds.filter( ( id ) => ! knownComponents[ id ] );\n\n\tif ( ! unknownComponentIds.length ) {\n\t\treturn;\n\t}\n\n\taddComponentStyles( unknownComponentIds );\n}\n\nasync function addComponentStyles( ids: ComponentId[] ) {\n\tconst newComponents = await loadStyles( ids );\n\n\taddStyles( newComponents );\n}\n\nasync function loadStyles( ids: number[] ): Promise< [ number, V1ElementData ][] > {\n\treturn Promise.all( ids.map( async ( id ) => [ id, await apiClient.getComponentConfig( id ) ] ) );\n}\n\nfunction addStyles( data: ( readonly [ ComponentId, V1ElementData ] )[] ) {\n\tconst styles = Object.fromEntries(\n\t\tdata.map( ( [ componentId, componentData ] ) => [ componentId, extractStyles( componentData ) ] )\n\t);\n\n\tdispatch( slice.actions.addStyles( styles ) );\n}\n\nfunction extractStyles( element: V1ElementData ): Array< StyleDefinition > {\n\treturn [ ...Object.values( element.styles ?? {} ), ...( element.elements ?? [] ).flatMap( extractStyles ) ];\n}\n","import {\n\tgetContainer,\n\tgetCurrentDocumentContainer,\n\tgetSelectedElements,\n\ttype V1Element,\n} from '@elementor/editor-elements';\n\nexport const getContainerForNewElement = (): { container: V1Element | null; options?: { at: number } } => {\n\tconst currentDocumentContainer = getCurrentDocumentContainer();\n\tconst selectedElement = getSelectedElementContainer();\n\n\tlet container, options;\n\n\tif ( selectedElement ) {\n\t\tswitch ( selectedElement.model.get( 'elType' ) ) {\n\t\t\tcase 'widget': {\n\t\t\t\tcontainer = selectedElement?.parent;\n\n\t\t\t\tconst selectedElIndex = selectedElement.view?._index ?? -1;\n\n\t\t\t\tif ( selectedElIndex > -1 ) {\n\t\t\t\t\toptions = { at: selectedElIndex + 1 };\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'section': {\n\t\t\t\tcontainer = selectedElement?.children?.[ 0 ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tcontainer = selectedElement;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { container: container ?? currentDocumentContainer, options };\n};\n\nfunction getSelectedElementContainer() {\n\tconst selectedElements = getSelectedElements();\n\n\tif ( selectedElements.length !== 1 ) {\n\t\treturn undefined;\n\t}\n\n\treturn getContainer( selectedElements[ 0 ].id );\n}\n","import { replaceElement, type V1ElementData, type V1ElementModelProps } from '@elementor/editor-elements';\n\ntype ComponentInstanceParams = {\n\tid?: number;\n\tname: string;\n\tuid: string;\n};\n\nexport const replaceElementWithComponent = ( element: V1ElementData, component: ComponentInstanceParams ) => {\n\treplaceElement( {\n\t\tcurrentElement: element,\n\t\tnewElement: createComponentModel( component ),\n\t\twithHistory: false,\n\t} );\n};\n\nexport const createComponentModel = ( component: ComponentInstanceParams ): Omit< V1ElementModelProps, 'id' > => {\n\treturn {\n\t\telType: 'widget',\n\t\twidgetType: 'e-component',\n\t\tsettings: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: {\n\t\t\t\t\t\t$$type: 'number',\n\t\t\t\t\t\tvalue: component.id ?? component.uid,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\teditor_settings: {\n\t\t\ttitle: component.name,\n\t\t\tcomponent_uid: component.uid,\n\t\t},\n\t};\n};\n","import * as React from 'react';\nimport { Box, ListItemButton, Skeleton, Stack } from '@elementor/ui';\nconst ROWS_COUNT = 6;\n\nconst rows = Array.from( { length: ROWS_COUNT }, ( _, index ) => index );\n\nexport const LoadingComponents = () => {\n\treturn (\n\t\t<Stack\n\t\t\taria-label=\"Loading components\"\n\t\t\tgap={ 1 }\n\t\t\tsx={ {\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tposition: 'relative',\n\t\t\t\tmaxHeight: '300px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t'&:after': {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tcontent: '\"\"',\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '300px',\n\t\t\t\t\tbackground: 'linear-gradient(to top, white, transparent)',\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ rows.map( ( row ) => (\n\t\t\t\t<ListItemButton\n\t\t\t\t\tkey={ row }\n\t\t\t\t\tsx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t>\n\t\t\t\t\t<Box display=\"flex\" gap={ 1 } width=\"100%\">\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '24px' } height={ '36px' } />\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '100%' } height={ '36px' } />\n\t\t\t\t\t</Box>\n\t\t\t\t</ListItemButton>\n\t\t\t) ) }\n\t\t</Stack>\n\t);\n};\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n","import * as React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getElementLabel, type V1ElementData } from '@elementor/editor-elements';\nimport { Form as FormElement, ThemeProvider } from '@elementor/editor-ui';\nimport { StarIcon } from '@elementor/icons';\nimport { Alert, Button, FormLabel, Grid, Popover, Snackbar, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { createUnpublishedComponent } from '../../store/actions/create-unpublished-component';\nimport { type ComponentFormValues } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { useForm } from './hooks/use-form';\nimport { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';\nimport {\n\ttype ComponentEventData,\n\ttype ContextMenuEventOptions,\n\tgetComponentEventData,\n} from './utils/get-component-event-data';\n\ntype SaveAsComponentEventData = {\n\telement: V1ElementData;\n\tanchorPosition: { top: number; left: number };\n\toptions?: ContextMenuEventOptions;\n};\n\ntype ResultNotification = {\n\tshow: boolean;\n\tmessage: string;\n\ttype: 'success' | 'error';\n};\n\nexport function CreateComponentForm() {\n\tconst [ element, setElement ] = useState< {\n\t\telement: V1ElementData;\n\t\telementLabel: string;\n\t} | null >( null );\n\n\tconst [ anchorPosition, setAnchorPosition ] = useState< { top: number; left: number } >();\n\n\tconst [ resultNotification, setResultNotification ] = useState< ResultNotification | null >( null );\n\n\tconst eventData = useRef< ComponentEventData | null >( null );\n\n\tuseEffect( () => {\n\t\tconst OPEN_SAVE_AS_COMPONENT_FORM_EVENT = 'elementor/editor/open-save-as-component-form';\n\n\t\tconst openPopup = ( event: CustomEvent< SaveAsComponentEventData > ) => {\n\t\t\tsetElement( { element: event.detail.element, elementLabel: getElementLabel( event.detail.element.id ) } );\n\t\t\tsetAnchorPosition( event.detail.anchorPosition );\n\n\t\t\teventData.current = getComponentEventData( event.detail.element, event.detail.options );\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'createClicked',\n\t\t\t\t...eventData.current,\n\t\t\t} );\n\t\t};\n\n\t\twindow.addEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\t\t};\n\t}, [] );\n\n\tconst handleSave = ( values: ComponentFormValues ) => {\n\t\ttry {\n\t\t\tif ( ! element ) {\n\t\t\t\tthrow new Error( `Can't save element as component: element not found` );\n\t\t\t}\n\n\t\t\tconst uid = createUnpublishedComponent( values.componentName, element.element, eventData.current );\n\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\t// Translators: %1$s: Component name, %2$s: Component UID\n\t\t\t\tmessage: __( 'Component saved successfully as: %1$s (UID: %2$s)', 'elementor' )\n\t\t\t\t\t.replace( '%1$s', values.componentName )\n\t\t\t\t\t.replace( '%2$s', uid ),\n\t\t\t\ttype: 'success',\n\t\t\t} );\n\n\t\t\tresetAndClosePopup();\n\t\t} catch {\n\t\t\tconst errorMessage = __( 'Failed to save component. Please try again.', 'elementor' );\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t\ttype: 'error',\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst resetAndClosePopup = () => {\n\t\tsetElement( null );\n\t\tsetAnchorPosition( undefined );\n\t};\n\n\tconst cancelSave = () => {\n\t\tresetAndClosePopup();\n\n\t\ttrackComponentEvent( {\n\t\t\taction: 'createCancelled',\n\t\t\t...eventData.current,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Popover\n\t\t\t\topen={ element !== null }\n\t\t\t\tonClose={ cancelSave }\n\t\t\t\tanchorReference=\"anchorPosition\"\n\t\t\t\tanchorPosition={ anchorPosition }\n\t\t\t>\n\t\t\t\t{ element !== null && (\n\t\t\t\t\t<Form\n\t\t\t\t\t\tinitialValues={ { componentName: element.elementLabel } }\n\t\t\t\t\t\thandleSave={ handleSave }\n\t\t\t\t\t\tclosePopup={ cancelSave }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</Popover>\n\t\t\t<Snackbar open={ resultNotification?.show } onClose={ () => setResultNotification( null ) }>\n\t\t\t\t<Alert\n\t\t\t\t\tonClose={ () => setResultNotification( null ) }\n\t\t\t\t\tseverity={ resultNotification?.type }\n\t\t\t\t\tsx={ { width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t{ resultNotification?.message }\n\t\t\t\t</Alert>\n\t\t\t</Snackbar>\n\t\t</ThemeProvider>\n\t);\n}\n\nconst FONT_SIZE = 'tiny';\n\nconst Form = ( {\n\tinitialValues,\n\thandleSave,\n\tclosePopup,\n}: {\n\tinitialValues: ComponentFormValues;\n\thandleSave: ( values: ComponentFormValues ) => void;\n\tclosePopup: () => void;\n} ) => {\n\tconst { values, errors, isValid, handleChange, validateForm } = useForm< ComponentFormValues >( initialValues );\n\n\tconst { components } = useComponents();\n\n\tconst existingComponentNames = useMemo( () => {\n\t\treturn components?.map( ( component ) => component.name ) ?? [];\n\t}, [ components ] );\n\n\tconst changeValidationSchema = useMemo(\n\t\t() => createBaseComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\tconst submitValidationSchema = useMemo(\n\t\t() => createSubmitComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\n\tconst handleSubmit = () => {\n\t\tconst { success, parsedValues } = validateForm( submitValidationSchema );\n\n\t\tif ( success ) {\n\t\t\thandleSave( parsedValues );\n\t\t}\n\t};\n\n\tconst texts = {\n\t\theading: __( 'Save as a component', 'elementor' ),\n\t\tname: __( 'Name', 'elementor' ),\n\t\tcancel: __( 'Cancel', 'elementor' ),\n\t\tcreate: __( 'Create', 'elementor' ),\n\t};\n\n\tconst nameInputId = 'component-name';\n\n\treturn (\n\t\t<FormElement onSubmit={ handleSubmit }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t<StarIcon fontSize={ FONT_SIZE } />\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ texts.heading }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" p={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel htmlFor={ nameInputId } size=\"tiny\">\n\t\t\t\t\t\t\t{ texts.name }\n\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tid={ nameInputId }\n\t\t\t\t\t\t\tsize={ FONT_SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ values.componentName }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\t\thandleChange( e, 'componentName', changeValidationSchema )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinputProps={ { style: { color: 'text.primary', fontWeight: '600' } } }\n\t\t\t\t\t\t\terror={ Boolean( errors.componentName ) }\n\t\t\t\t\t\t\thelperText={ errors.componentName }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button onClick={ closePopup } color=\"secondary\" variant=\"text\" size=\"small\">\n\t\t\t\t\t\t{ texts.cancel }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! isValid } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ texts.create }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</FormElement>\n\t);\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { type ComponentEventData } from '../../components/create-component-form/utils/get-component-event-data';\nimport { replaceElementWithComponent } from '../../components/create-component-form/utils/replace-element-with-component';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { slice } from '../store';\n\nexport function createUnpublishedComponent(\n\tname: string,\n\telement: V1ElementData,\n\teventData: ComponentEventData | null\n) {\n\tconst uid = generateUniqueId( 'component' );\n\tconst componentBase = { uid, name };\n\n\tdispatch(\n\t\tslice.actions.addUnpublished( {\n\t\t\t...componentBase,\n\t\t\telements: [ element ],\n\t\t} )\n\t);\n\n\tdispatch( slice.actions.addCreatedThisSession( uid ) );\n\n\treplaceElementWithComponent( element, componentBase );\n\n\ttrackComponentEvent( {\n\t\taction: 'created',\n\t\tcomponent_uid: uid,\n\t\tcomponent_name: name,\n\t\t...eventData,\n\t} );\n\n\trunCommand( 'document/save/auto' );\n\n\treturn uid;\n}\n","import { useMemo, useState } from 'react';\nimport { type z } from '@elementor/schema';\n\nexport const useForm = < TValues extends Record< string, unknown > >( initialValues: TValues ) => {\n\tconst [ values, setValues ] = useState< TValues >( initialValues );\n\tconst [ errors, setErrors ] = useState< Partial< Record< keyof TValues, string > > >( {} );\n\n\tconst isValid = useMemo( () => {\n\t\treturn ! Object.values( errors ).some( ( error ) => error );\n\t}, [ errors ] );\n\n\tconst handleChange = (\n\t\te: React.ChangeEvent< HTMLInputElement >,\n\t\tfield: keyof TValues,\n\t\tvalidationSchema: z.ZodType< TValues >\n\t) => {\n\t\tconst updated = { ...values, [ field ]: e.target.value };\n\t\tsetValues( updated );\n\n\t\tconst { success, errors: validationErrors } = validateForm( updated, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t} else {\n\t\t\tsetErrors( {} );\n\t\t}\n\t};\n\n\tconst validate = (\n\t\tvalidationSchema: z.ZodType< TValues >\n\t): { success: true; parsedValues: TValues } | { success: false; parsedValues?: never } => {\n\t\tconst { success, errors: validationErrors, parsedValues } = validateForm( values, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t\treturn { success };\n\t\t}\n\t\tsetErrors( {} );\n\t\treturn { success, parsedValues };\n\t};\n\n\treturn {\n\t\tvalues,\n\t\terrors,\n\t\tisValid,\n\t\thandleChange,\n\t\tvalidateForm: validate,\n\t};\n};\n\nconst validateForm = < TValues extends Record< string, unknown > >(\n\tvalues: TValues,\n\tschema: z.ZodType< TValues >\n):\n\t| { success: false; parsedValues?: never; errors: Partial< Record< keyof TValues, string > > }\n\t| { success: true; parsedValues: TValues; errors?: never } => {\n\tconst result = schema.safeParse( values );\n\n\tif ( result.success ) {\n\t\treturn { success: true, parsedValues: result.data };\n\t}\n\n\tconst errors = {} as Partial< Record< keyof TValues, string > >;\n\n\t( Object.entries( result.error.formErrors.fieldErrors ) as Array< [ keyof TValues, string[] ] > ).forEach(\n\t\t( [ field, error ] ) => {\n\t\t\terrors[ field ] = error[ 0 ];\n\t\t}\n\t);\n\n\treturn { success: false, errors };\n};\n","import { z } from '@elementor/schema';\nimport { __ } from '@wordpress/i18n';\n\nconst MIN_NAME_LENGTH = 2;\nconst MAX_NAME_LENGTH = 50;\n\nexport const createBaseComponentSchema = ( existingNames: string[] ) => {\n\treturn z.object( {\n\t\tcomponentName: z\n\t\t\t.string()\n\t\t\t.trim()\n\t\t\t.max(\n\t\t\t\tMAX_NAME_LENGTH,\n\t\t\t\t__( 'Component name is too long. Please keep it under 50 characters.', 'elementor' )\n\t\t\t)\n\t\t\t.refine( ( value ) => ! existingNames.includes( value ), {\n\t\t\t\tmessage: __( 'Component name already exists', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n\nexport const createSubmitComponentSchema = ( existingNames: string[] ) => {\n\tconst baseSchema = createBaseComponentSchema( existingNames );\n\n\treturn baseSchema.extend( {\n\t\tcomponentName: baseSchema.shape.componentName\n\t\t\t.refine( ( value ) => value.length > 0, {\n\t\t\t\tmessage: __( 'Component name is required.', 'elementor' ),\n\t\t\t} )\n\t\t\t.refine( ( value ) => value.length >= MIN_NAME_LENGTH, {\n\t\t\t\tmessage: __( 'Component name is too short. Please enter at least 2 characters.', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nexport type ComponentEventData = {\n\tnested_elements_count: number;\n\tnested_components_count: number;\n\ttop_element_type: string;\n\tlocation?: string;\n\tsecondary_location?: string;\n\ttrigger?: string;\n};\n\nexport type ContextMenuEventOptions = Record< string, unknown > & {\n\tlocation: string;\n\tsecondaryLocation: string;\n\ttrigger: string;\n};\n\nexport const getComponentEventData = (\n\tcontainerElement: V1ElementData,\n\toptions?: ContextMenuEventOptions\n): ComponentEventData => {\n\tconst { elementsCount, componentsCount } = countNestedElements( containerElement );\n\n\treturn {\n\t\tnested_elements_count: elementsCount,\n\t\tnested_components_count: componentsCount,\n\t\ttop_element_type: containerElement.elType,\n\t\tlocation: options?.location,\n\t\tsecondary_location: options?.secondaryLocation,\n\t\ttrigger: options?.trigger,\n\t};\n};\n\nfunction countNestedElements( container: V1ElementData ): { elementsCount: number; componentsCount: number } {\n\tif ( ! container.elements || container.elements.length === 0 ) {\n\t\treturn { elementsCount: 0, componentsCount: 0 };\n\t}\n\n\tlet elementsCount = container.elements.length;\n\tlet componentsCount = 0;\n\n\tfor ( const element of container.elements ) {\n\t\tif ( element.widgetType === 'e-component' ) {\n\t\t\tcomponentsCount++;\n\t\t}\n\n\t\tconst { elementsCount: nestedElementsCount, componentsCount: nestedComponentsCount } =\n\t\t\tcountNestedElements( element );\n\t\telementsCount += nestedElementsCount;\n\t\tcomponentsCount += nestedComponentsCount;\n\t}\n\n\treturn { elementsCount, componentsCount };\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { getV1DocumentsManager, type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { __useSelector as useSelector } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { updateCurrentComponent } from '../../store/actions/update-current-component';\nimport { type ComponentsPathItem, selectCurrentComponentId, selectPath } from '../../store/store';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { ComponentModal } from './component-modal';\n\nexport function EditComponent() {\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\n\tuseHandleDocumentSwitches();\n\n\tconst onBack = useNavigateBack();\n\n\tconst elementDom = getComponentDOMElement( currentComponentId ?? undefined );\n\n\tif ( ! elementDom ) {\n\t\treturn null;\n\t}\n\n\treturn <ComponentModal element={ elementDom } onClose={ onBack } />;\n}\n\nfunction useHandleDocumentSwitches() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentComponentId = useSelector( selectCurrentComponentId );\n\tconst path = useSelector( selectPath );\n\n\tuseEffect( () => {\n\t\treturn listenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => {\n\t\t\tconst nextDocument = documentsManager.getCurrent();\n\n\t\t\tif ( nextDocument.id === currentComponentId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( currentComponentId ) {\n\t\t\t\tapiClient.unlockComponent( currentComponentId );\n\t\t\t}\n\n\t\t\tconst isComponent = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;\n\n\t\t\tif ( ! isComponent ) {\n\t\t\t\tupdateCurrentComponent( { path: [], currentComponentId: null } );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateCurrentComponent( {\n\t\t\t\tpath: getUpdatedComponentPath( path, nextDocument ),\n\t\t\t\tcurrentComponentId: nextDocument.id,\n\t\t\t} );\n\t\t} );\n\t}, [ path, documentsManager, currentComponentId ] );\n}\n\nfunction getUpdatedComponentPath( path: ComponentsPathItem[], nextDocument: V1Document ): ComponentsPathItem[] {\n\tconst componentIndex = path.findIndex( ( { componentId } ) => componentId === nextDocument.id );\n\n\tif ( componentIndex >= 0 ) {\n\t\t// When exiting the editing of a nested component - we in fact go back a step\n\t\t// so we need to make sure the path is cleaned up of any newer items\n\t\t// By doing it with the slice and not a simple pop() - we could jump to any component in the path and make sure it becomes the current one\n\t\treturn path.slice( 0, componentIndex + 1 );\n\t}\n\n\treturn [\n\t\t...path,\n\t\t{\n\t\t\tinstanceId: nextDocument?.container.view?.el?.dataset.id,\n\t\t\tcomponentId: nextDocument.id,\n\t\t},\n\t];\n}\n\nfunction getComponentDOMElement( id: V1Document[ 'id' ] | undefined ) {\n\tif ( ! id ) {\n\t\treturn null;\n\t}\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\tconst currentComponent = documentsManager.get( id );\n\n\tconst widget = currentComponent?.container as V1Element;\n\tconst container = ( widget?.view?.el?.children?.[ 0 ] ?? null ) as HTMLElement | null;\n\tconst elementDom = container?.children[ 0 ] as HTMLElement | null;\n\n\treturn elementDom ?? null;\n}\n","import { setDocumentModifiedStatus, type V1Document } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { type ComponentsPathItem, slice } from '../store';\n\nexport function updateCurrentComponent( {\n\tpath,\n\tcurrentComponentId,\n}: {\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n} ) {\n\tconst dispatch = getStore()?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.setPath( path ) );\n\tdispatch( slice.actions.setCurrentComponentId( currentComponentId ) );\n}\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import * as React from 'react';\nimport { type CSSProperties, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCanvasDocument } from '../../hooks/use-canvas-document';\nimport { useElementRect } from '../../hooks/use-element-rect';\n\ntype ModalProps = {\n\telement: HTMLElement;\n\tonClose: () => void;\n};\nexport function ComponentModal( { element, onClose }: ModalProps ) {\n\tconst canvasDocument = useCanvasDocument();\n\n\tuseEffect( () => {\n\t\tconst handleEsc = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tcanvasDocument?.body.addEventListener( 'keydown', handleEsc );\n\n\t\treturn () => {\n\t\t\tcanvasDocument?.body.removeEventListener( 'keydown', handleEsc );\n\t\t};\n\t}, [ canvasDocument, onClose ] );\n\n\tif ( ! canvasDocument?.body ) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<>\n\t\t\t<BlockEditPage />\n\t\t\t<Backdrop canvas={ canvasDocument } element={ element } onClose={ onClose } />\n\t\t</>,\n\t\tcanvasDocument.body\n\t);\n}\n\nfunction Backdrop( { canvas, element, onClose }: { canvas: HTMLDocument; element: HTMLElement; onClose: () => void } ) {\n\tconst rect = useElementRect( element );\n\tconst backdropStyle: CSSProperties = {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\twidth: '100vw',\n\t\theight: '100vh',\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\t\tzIndex: 999,\n\t\tpointerEvents: 'painted',\n\t\tcursor: 'pointer',\n\t\tclipPath: getRoundedRectPath( rect, canvas.defaultView as Window, 5 ),\n\t};\n\n\tconst handleKeyDown = ( event: React.KeyboardEvent ) => {\n\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\tevent.preventDefault();\n\t\t\tonClose();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tstyle={ backdropStyle }\n\t\t\tonClick={ onClose }\n\t\t\tonKeyDown={ handleKeyDown }\n\t\t\trole=\"button\"\n\t\t\ttabIndex={ 0 }\n\t\t\taria-label={ __( 'Exit component editing mode', 'elementor' ) }\n\t\t/>\n\t);\n}\n\nfunction getRoundedRectPath( rect: DOMRect, viewport: Window, borderRadius: number ) {\n\tconst padding = borderRadius / 2;\n\tconst { x: originalX, y: originalY, width: originalWidth, height: originalHeight } = rect;\n\tconst x = originalX - padding;\n\tconst y = originalY - padding;\n\tconst width = originalWidth + 2 * padding;\n\tconst height = originalHeight + 2 * padding;\n\tconst radius = Math.min( borderRadius, width / 2, height / 2 );\n\n\tconst { innerWidth: vw, innerHeight: vh } = viewport;\n\n\tconst path = `path(evenodd, 'M 0 0 \n\t\tL ${ vw } 0\n\t\tL ${ vw } ${ vh }\n\t\tL 0 ${ vh }\n\t\tZ\n\t\tM ${ x + radius } ${ y }\n\t\tL ${ x + width - radius } ${ y }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width } ${ y + radius }\n\t\tL ${ x + width } ${ y + height - radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width - radius } ${ y + height }\n\t\tL ${ x + radius } ${ y + height }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x } ${ y + height - radius }\n\t\tL ${ x } ${ y + radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + radius } ${ y }\n \tZ'\n\t)`;\n\n\treturn path.replace( /\\s{2,}/g, ' ' );\n}\n\n/**\n * when switching to another document id, we get a document handler when hovering\n * this functionality originates in Pro, and is intended for editing templates, e.g. header/footer\n * in components we don't want that, so the easy way out is to prevent it of being displayed via a CSS rule\n */\nfunction BlockEditPage() {\n\tconst blockV3DocumentHandlesStyles = `\n\t.elementor-editor-active {\n\t\t& .elementor-section-wrap.ui-sortable {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\t& *[data-editable-elementor-document]:not(.elementor-edit-mode):hover {\n\t\t\t& .elementor-document-handle:not(.elementor-document-save-back-handle) {\n\t\t\t\tdisplay: none;\n\n\t\t\t\t&::before,\n\t\t\t\t& .elementor-document-handle__inner {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t`;\n\n\treturn <style data-e-style-id=\"e-block-v3-document-handles-styles\">{ blockV3DocumentHandlesStyles }</style>;\n}\n","import { getCanvasIframeDocument } from '@elementor/editor-canvas';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\n\nexport function useCanvasDocument() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument() );\n}\n","import { useEffect, useState } from 'react';\nimport { throttle } from '@elementor/utils';\n\nexport function useElementRect( element: HTMLElement | null ) {\n\tconst [ rect, setRect ] = useState< DOMRect >( new DOMRect( 0, 0, 0, 0 ) );\n\n\tconst onChange = throttle(\n\t\t() => {\n\t\t\tsetRect( element?.getBoundingClientRect() ?? new DOMRect( 0, 0, 0, 0 ) );\n\t\t},\n\t\t20,\n\t\ttrue\n\t);\n\n\tuseScrollListener( { element, onChange } );\n\tuseResizeListener( { element, onChange } );\n\tuseMutationsListener( { element, onChange } );\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tonChange.cancel();\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\treturn rect;\n}\n\ntype ListenerProps = {\n\telement: HTMLElement | null;\n\tonChange: () => void;\n};\n\nfunction useScrollListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'scroll', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\twin?.removeEventListener( 'scroll', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useResizeListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeObserver = new ResizeObserver( onChange );\n\t\tresizeObserver.observe( element );\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'resize', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\twin?.removeEventListener( 'resize', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useMutationsListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mutationObserver = new MutationObserver( onChange );\n\t\tmutationObserver.observe( element, { childList: true, subtree: true } );\n\n\t\treturn () => {\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, [ element, onChange ] );\n}\n","import * as React from 'react';\nimport { closeDialog, openDialog } from '@elementor/editor-ui';\nimport { InfoCircleFilledIcon } from '@elementor/icons';\nimport { Box, Button, DialogActions, DialogContent, DialogHeader, Icon, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const openEditModeDialog = ( lockedBy: string ) => {\n\topenDialog( {\n\t\tcomponent: <EditModeDialog lockedBy={ lockedBy } />,\n\t} );\n};\n\nconst EditModeDialog = ( { lockedBy }: { lockedBy: string } ) => {\n\t/* translators: %s is the name of the user who is currently editing the document */\n\tconst content = __( '%s is currently editing this document', 'elementor' ).replace( '%s', lockedBy );\n\treturn (\n\t\t<>\n\t\t\t<DialogHeader logo={ false }>\n\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t\t<Icon color=\"secondary\">\n\t\t\t\t\t\t<InfoCircleFilledIcon fontSize=\"medium\" />\n\t\t\t\t\t</Icon>\n\t\t\t\t\t<Typography variant=\"subtitle1\">{ content }</Typography>\n\t\t\t\t</Box>\n\t\t\t</DialogHeader>\n\t\t\t<DialogContent>\n\t\t\t\t<Stack spacing={ 2 } direction=\"column\">\n\t\t\t\t\t<Typography variant=\"body2\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'You can wait for them to finish or reach out to coordinate your changes together.',\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<DialogActions>\n\t\t\t\t\t\t<Button color=\"secondary\" variant=\"contained\" onClick={ closeDialog }>\n\t\t\t\t\t\t\t{ __( 'Close', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</DialogActions>\n\t\t\t\t</Stack>\n\t\t\t</DialogContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { useElementSetting, useSelectedElement } from '@elementor/editor-elements';\nimport { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { type NumberPropValue } from '@elementor/editor-props';\nimport { ComponentsIcon, PencilIcon } from '@elementor/icons';\nimport { __getState as getState } from '@elementor/store';\nimport { IconButton, Stack, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstancePropTypeUtil } from '../../prop-types/component-instance-prop-type';\nimport { selectComponent, selectOverridableProps } from '../../store/store';\nimport { type OverridablePropsGroup } from '../../types';\nimport { switchToComponent } from '../../utils/switch-to-component';\nimport { EmptyState } from './empty-state';\nimport { OverridePropsGroup } from './override-props-group';\n\nexport function InstanceEditingPanel() {\n\tconst { element } = useElement();\n\tconst settings = useElementSetting( element.id, 'component_instance' );\n\tconst componentId = ( componentInstancePropTypeUtil.extract( settings )?.component_id as NumberPropValue ).value;\n\n\tconst component = componentId ? selectComponent( getState(), componentId ) : null;\n\tconst overridableProps = componentId ? selectOverridableProps( getState(), componentId ) : null;\n\n\tconst componentInstanceId = useSelectedElement()?.element?.id ?? null;\n\n\tif ( ! componentId || ! overridableProps || ! component ) {\n\t\treturn null;\n\t}\n\n\t/* translators: %s: component name. */\n\tconst panelTitle = __( 'Edit %s', 'elementor' ).replace( '%s', component.name );\n\n\tconst handleEditComponent = () => switchToComponent( componentId, componentInstanceId );\n\n\tconst groups = overridableProps.groups.order\n\t\t.map( ( groupId ) =>\n\t\t\toverridableProps.groups.items[ groupId ] ? overridableProps.groups.items[ groupId ] : null\n\t\t)\n\t\t.filter( Boolean ) as OverridablePropsGroup[];\n\n\tconst isEmpty = groups.length === 0 || Object.keys( overridableProps.props ).length === 0;\n\n\treturn (\n\t\t<>\n\t\t\t<PanelHeader sx={ { justifyContent: 'start' } }>\n\t\t\t\t<Stack direction=\"row\" alignContent=\"space-between\" flexGrow={ 1 }>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"start\" gap={ 1 } flexGrow={ 1 }>\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"small\" sx={ { color: 'text.tertiary' } } />\n\t\t\t\t\t\t<PanelHeaderTitle>{ component.name }</PanelHeaderTitle>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Tooltip title={ panelTitle }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ handleEditComponent } aria-label={ panelTitle }>\n\t\t\t\t\t\t\t<PencilIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</Stack>\n\t\t\t</PanelHeader>\n\t\t\t<PanelBody>\n\t\t\t\t{ isEmpty ? (\n\t\t\t\t\t<EmptyState onEditComponent={ handleEditComponent } />\n\t\t\t\t) : (\n\t\t\t\t\t<Stack direction=\"column\" alignItems=\"stretch\">\n\t\t\t\t\t\t{ groups.map( ( group ) => (\n\t\t\t\t\t\t\t<OverridePropsGroup key={ group.id } group={ group } props={ overridableProps.props } />\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</Stack>\n\t\t\t\t) }\n\t\t\t</PanelBody>\n\t\t</>\n\t);\n}\n","import { createPropUtils, numberPropTypeUtil } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridesPropTypeUtil } from './component-instance-overrides-prop-type';\n\nexport const componentInstancePropTypeUtil = createPropUtils(\n\t'component-instance',\n\tz.object( {\n\t\tcomponent_id: numberPropTypeUtil.schema,\n\t\toverrides: z.optional( componentInstanceOverridesPropTypeUtil.schema ),\n\t} )\n);\n\nexport type ComponentInstancePropValue = z.infer< typeof componentInstancePropTypeUtil.schema >[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridePropTypeUtil } from './component-instance-override-prop-type';\n\nexport const componentInstanceOverridesPropTypeUtil = createPropUtils(\n\t'overrides',\n\tz.array( componentInstanceOverridePropTypeUtil.schema ).optional().default( [] )\n);\n\nexport type ComponentInstanceOverridesPropValue = z.infer<\n\ttypeof componentInstanceOverridesPropTypeUtil.schema\n>[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentInstanceOverridePropTypeUtil = createPropUtils(\n\t'override',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\toverride_value: z.unknown(),\n\t\tschema_source: z.object( {\n\t\t\ttype: z.literal( 'component' ),\n\t\t\tid: z.number(),\n\t\t} ),\n\t} )\n);\n\nexport type ComponentInstanceOverridePropValue = z.infer<\n\ttypeof componentInstanceOverridePropTypeUtil.schema\n>[ 'value' ];\n","import * as React from 'react';\nimport { ComponentPropListIcon, PencilIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onEditComponent }: { onEditComponent: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"start\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5, mt: 1 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<ComponentPropListIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'No properties yet', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Edit the component to add properties, manage them or update the design across all instances.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onEditComponent }>\n\t\t\t\t<PencilIcon fontSize=\"small\" />\n\t\t\t\t{ __( 'Edit component', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useId } from 'react';\nimport { useStateByElement } from '@elementor/editor-editing-panel';\nimport { CollapseIcon } from '@elementor/editor-ui';\nimport { Collapse, ListItemButton, ListItemText, Stack } from '@elementor/ui';\n\nimport { type OverridableProp, type OverridablePropsGroup } from '../../types';\n\ntype Props = {\n\tgroup: OverridablePropsGroup;\n\tprops: Record< string, OverridableProp >;\n};\n\nexport function OverridePropsGroup( { group, props }: Props ) {\n\tconst [ isOpen, setIsOpen ] = useStateByElement( group.id, true );\n\n\tconst handleClick = () => {\n\t\tsetIsOpen( ! isOpen );\n\t};\n\n\tconst id = useId();\n\tconst labelId = `label-${ id }`;\n\tconst contentId = `content-${ id }`;\n\n\tconst title = group.label;\n\n\treturn (\n\t\t<>\n\t\t\t<ListItemButton\n\t\t\t\tid={ labelId }\n\t\t\t\taria-controls={ contentId }\n\t\t\t\taria-label={ `${ title } section` }\n\t\t\t\tonClick={ handleClick }\n\t\t\t\tp={ 0 }\n\t\t\t\tsx={ { '&:hover': { backgroundColor: 'transparent' } } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyItems=\"start\" flexGrow={ 1 } gap={ 0.5 }>\n\t\t\t\t\t<ListItemText\n\t\t\t\t\t\tsecondary={ title }\n\t\t\t\t\t\tsecondaryTypographyProps={ { color: 'text.primary', variant: 'caption', fontWeight: 'bold' } }\n\t\t\t\t\t\tsx={ { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 } }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t<CollapseIcon open={ isOpen } color=\"secondary\" fontSize=\"tiny\" />\n\t\t\t</ListItemButton>\n\t\t\t<Collapse id={ contentId } aria-labelledby={ labelId } in={ isOpen } timeout=\"auto\">\n\t\t\t\t<Stack direction=\"column\" gap={ 1 } p={ 2 }>\n\t\t\t\t\t{ group.props.map( ( propId ) => (\n\t\t\t\t\t\t// TODO: Render actual controls\n\t\t\t\t\t\t<pre key={ propId }>{ JSON.stringify( props[ propId ], null, 2 ) }</pre>\n\t\t\t\t\t) ) }\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { type ComponentType } from 'react';\nimport { ControlReplacementsProvider, PropKeyProvider, PropProvider, useBoundProp } from '@elementor/editor-controls';\nimport { createTopLevelObjectType, useElement } from '@elementor/editor-editing-panel';\nimport { type PropValue } from '@elementor/editor-props';\nimport { __getState as getState } from '@elementor/store';\n\nimport {\n\tcomponentOverridablePropTypeUtil,\n\ttype ComponentOverridablePropValue,\n} from '../../prop-types/component-overridable-prop-type';\nimport { OverridablePropProvider } from '../../provider/overridable-prop-context';\nimport { updateOverridablePropOriginValue } from '../../store/actions/update-overridable-prop-origin-value';\nimport { selectCurrentComponentId } from '../../store/store';\n\nexport function OverridablePropControl< T extends object >( {\n\tOriginalControl,\n\t...props\n}: T & { OriginalControl: ComponentType< T > } ) {\n\tconst { elementType } = useElement();\n\n\tconst { value, bind, setValue, placeholder, ...propContext } = useBoundProp( componentOverridablePropTypeUtil );\n\tconst componentId = selectCurrentComponentId( getState() );\n\n\tif ( ! componentId ) {\n\t\tthrow new Error( 'Component ID is required' );\n\t}\n\n\tif ( ! value?.override_key ) {\n\t\tthrow new Error( 'Override key is required' );\n\t}\n\n\tconst setOverridableValue = ( newValue: Record< typeof bind, PropValue | null > ) => {\n\t\tconst propValue = {\n\t\t\t...value,\n\t\t\torigin_value: newValue[ bind ],\n\t\t} as ComponentOverridablePropValue;\n\n\t\tsetValue( propValue );\n\t\tupdateOverridablePropOriginValue( componentId, propValue );\n\t};\n\n\tconst propType = createTopLevelObjectType( {\n\t\tschema: {\n\t\t\t[ bind ]: elementType.propsSchema[ bind ],\n\t\t},\n\t} );\n\n\tconst objectPlaceholder: Record< string, PropValue > | undefined = placeholder\n\t\t? { [ bind ]: placeholder }\n\t\t: undefined;\n\n\treturn (\n\t\t<OverridablePropProvider value={ value }>\n\t\t\t<PropProvider\n\t\t\t\t{ ...propContext }\n\t\t\t\tpropType={ propType }\n\t\t\t\tsetValue={ setOverridableValue }\n\t\t\t\tvalue={ { [ bind ]: value.origin_value } }\n\t\t\t\tplaceholder={ objectPlaceholder }\n\t\t\t>\n\t\t\t\t<PropKeyProvider bind={ bind }>\n\t\t\t\t\t<ControlReplacementsProvider replacements={ [] }>\n\t\t\t\t\t\t<OriginalControl { ...( props as T ) } />\n\t\t\t\t\t</ControlReplacementsProvider>\n\t\t\t\t</PropKeyProvider>\n\t\t\t</PropProvider>\n\t\t</OverridablePropProvider>\n\t);\n}\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentOverridablePropTypeUtil = createPropUtils(\n\t'overridable',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\torigin_value: z\n\t\t\t.object( {\n\t\t\t\t$$type: z.string(),\n\t\t\t\tvalue: z.unknown(),\n\t\t\t} )\n\t\t\t.nullable(),\n\t} )\n);\n\nexport type ComponentOverridablePropValue = z.infer< typeof componentOverridablePropTypeUtil.schema >[ 'value' ];\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { type ComponentOverridablePropValue } from '../prop-types/component-overridable-prop-type';\n\ntype OverridablePropData = {\n\tvalue: ComponentOverridablePropValue;\n};\n\nconst OverridablePropContext = createContext< OverridablePropData | null >( null );\n\nexport function OverridablePropProvider( { children, ...props }: PropsWithChildren< OverridablePropData > ) {\n\treturn <OverridablePropContext.Provider value={ props }>{ children }</OverridablePropContext.Provider>;\n}\n\nexport const useOverridablePropValue = () => useContext( OverridablePropContext )?.value;\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentOverridablePropValue } from '../../prop-types/component-overridable-prop-type';\nimport { type OverridableProps } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\nexport function updateOverridablePropOriginValue( componentId: number, propValue: ComponentOverridablePropValue ) {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overridableProps.props[ propValue.override_key ];\n\n\tif ( ! existingOverridableProp ) {\n\t\treturn;\n\t}\n\n\tconst newOverridableProps = {\n\t\t...overridableProps,\n\t\tprops: {\n\t\t\t...overridableProps.props,\n\t\t\t[ existingOverridableProp.overrideKey ]: {\n\t\t\t\t...existingOverridableProp,\n\t\t\t\toriginValue: propValue.origin_value,\n\t\t\t},\n\t\t},\n\t} satisfies OverridableProps;\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: newOverridableProps,\n\t\t} )\n\t);\n}\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { getWidgetsCache } from '@elementor/editor-elements';\nimport { type TransformablePropValue } from '@elementor/editor-props';\nimport { __getState as getState } from '@elementor/store';\nimport { bindPopover, bindTrigger, Popover, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentOverridablePropTypeUtil } from '../../prop-types/component-overridable-prop-type';\nimport { useOverridablePropValue } from '../../provider/overridable-prop-context';\nimport { setOverridableProp } from '../../store/actions/set-overridable-prop';\nimport { selectCurrentComponentId, selectOverridableProps } from '../../store/store';\nimport { type OverridableProps } from '../../types';\nimport { Indicator } from './indicator';\nimport { OverridablePropForm } from './overridable-prop-form';\nimport { getOverridableProp } from './utils/get-overridable-prop';\n\nconst FORBIDDEN_KEYS = [ '_cssid', 'attributes' ];\n\nexport function OverridablePropIndicator() {\n\tconst { bind } = useBoundProp();\n\tconst componentId = selectCurrentComponentId( getState() );\n\n\tif ( ! isPropAllowed( bind ) || ! componentId ) {\n\t\treturn null;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\treturn <Content componentId={ componentId } overridableProps={ overridableProps } />;\n}\n\ntype Props = {\n\tcomponentId: number;\n\toverridableProps?: OverridableProps;\n};\nexport function Content( { componentId, overridableProps }: Props ) {\n\tconst {\n\t\telement: { id: elementId },\n\t\telementType,\n\t} = useElement();\n\tconst { value, bind, propType } = useBoundProp();\n\n\tconst contextOverridableValue = useOverridablePropValue();\n\tconst { value: boundPropOverridableValue, setValue: setOverridableValue } = useBoundProp(\n\t\tcomponentOverridablePropTypeUtil\n\t);\n\n\t/**\n\t * This is intended to handle custom layout controls, such as <LinkControl />, which has <ControlLabel /> nested within it\n\t * i.e. its bound prop value would be the one manipulated by the new <PropProvider /> thus won't be considered overridable\n\t */\n\tconst overridableValue = boundPropOverridableValue ?? contextOverridableValue;\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\tconst triggerProps = bindTrigger( popupState );\n\tconst popoverProps = bindPopover( popupState );\n\n\tconst { elType } = getWidgetsCache()?.[ elementType.key ] ?? { elType: 'widget' };\n\n\tconst handleSubmit = ( { label, group }: { label: string; group: string | null } ) => {\n\t\tconst originValue = ! overridableValue ? value ?? propType.default : overridableValue?.origin_value ?? {};\n\n\t\tconst overridablePropConfig = setOverridableProp( {\n\t\t\tcomponentId,\n\t\t\toverrideKey: overridableValue?.override_key ?? null,\n\t\t\telementId,\n\t\t\tlabel,\n\t\t\tgroupId: group,\n\t\t\tpropKey: bind,\n\t\t\telType: elType ?? 'widget',\n\t\t\twidgetType: elementType.key,\n\t\t\toriginValue,\n\t\t} );\n\n\t\tif ( ! overridableValue && overridablePropConfig ) {\n\t\t\tsetOverridableValue( {\n\t\t\t\toverride_key: overridablePropConfig.overrideKey,\n\t\t\t\torigin_value: originValue as TransformablePropValue< string, unknown >,\n\t\t\t} );\n\t\t}\n\n\t\tpopupState.close();\n\t};\n\n\tconst overridableConfig = overridableValue\n\t\t? getOverridableProp( { componentId, overrideKey: overridableValue.override_key } )\n\t\t: undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip placement=\"top\" title={ __( 'Override Property', 'elementor' ) }>\n\t\t\t\t<Indicator { ...triggerProps } isOpen={ !! popoverProps.open } isOverridable={ !! overridableValue } />\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\tsx: { my: 2.5 },\n\t\t\t\t} }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<OverridablePropForm\n\t\t\t\t\tonSubmit={ handleSubmit }\n\t\t\t\t\tgroups={ overridableProps?.groups.order.map( ( groupId ) => ( {\n\t\t\t\t\t\tvalue: groupId,\n\t\t\t\t\t\tlabel: overridableProps.groups.items[ groupId ].label,\n\t\t\t\t\t} ) ) }\n\t\t\t\t\tcurrentValue={ overridableConfig }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nfunction isPropAllowed( bind: string ) {\n\treturn ! FORBIDDEN_KEYS.includes( bind );\n}\n","import { type PropValue } from '@elementor/editor-props';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp, type OverridableProps, type OverridablePropsGroup } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype Props = {\n\tcomponentId: number;\n\toverrideKey: string | null;\n\telementId: string;\n\tlabel: string;\n\tgroupId: string | null;\n\tpropKey: string;\n\telType: string;\n\twidgetType: string;\n\toriginValue: PropValue;\n};\nexport function setOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n\telementId,\n\tlabel,\n\tgroupId,\n\tpropKey,\n\telType,\n\twidgetType,\n\toriginValue,\n}: Props ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overrideKey ? overridableProps.props[ overrideKey ] : null;\n\tconst duplicatedTargetProps = Object.values( overridableProps.props ).filter(\n\t\t( prop ) => prop.elementId === elementId && prop.propKey === propKey && prop !== existingOverridableProp\n\t);\n\n\tconst { props: prevProps, groups: prevGroups } = { ...overridableProps };\n\n\tconst { groups: updatedGroups, currentGroupId } = getUpdatedGroups(\n\t\tprevGroups,\n\t\tgroupId || existingOverridableProp?.groupId\n\t);\n\n\tconst overridableProp = {\n\t\toverrideKey: existingOverridableProp?.overrideKey || generateUniqueId( 'prop' ),\n\t\tlabel,\n\t\telementId,\n\t\tpropKey,\n\t\twidgetType,\n\t\telType,\n\t\toriginValue,\n\t\tgroupId: currentGroupId,\n\t};\n\n\tconst { props: propsWithoutDuplicates, groups: groupsWithoutDuplicates } = removeProps( {\n\t\tprops: prevProps,\n\t\tgroups: updatedGroups,\n\t\tpropsToRemove: duplicatedTargetProps,\n\t} );\n\n\tconst props = {\n\t\t...propsWithoutDuplicates,\n\t\t[ overridableProp.overrideKey ]: overridableProp,\n\t};\n\n\tconst groups = {\n\t\titems: {\n\t\t\t...groupsWithoutDuplicates.items,\n\t\t\t[ currentGroupId ]: getGroupWithProp( groupsWithoutDuplicates, currentGroupId, overridableProp ),\n\t\t},\n\t\torder: groupsWithoutDuplicates.order.includes( currentGroupId )\n\t\t\t? groupsWithoutDuplicates.order\n\t\t\t: [ ...groupsWithoutDuplicates.order, currentGroupId ],\n\t};\n\n\tconst isChangingGroups = existingOverridableProp && existingOverridableProp.groupId !== currentGroupId;\n\n\tif ( isChangingGroups ) {\n\t\tgroups.items[ existingOverridableProp.groupId ] = getGroupWithoutProp(\n\t\t\tgroupsWithoutDuplicates,\n\t\t\texistingOverridableProp.groupId,\n\t\t\toverridableProp\n\t\t);\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\tprops,\n\t\t\t\tgroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn overridableProp;\n}\n\ntype UpdatedGroups = { groups: OverridableProps[ 'groups' ]; currentGroupId: string };\n\nfunction getUpdatedGroups( groups: OverridableProps[ 'groups' ], groupId: string | undefined ): UpdatedGroups {\n\tif ( ! groupId ) {\n\t\t// use first existing group\n\t\tif ( groups.order.length > 0 ) {\n\t\t\treturn { groups, currentGroupId: groups.order[ 0 ] };\n\t\t}\n\n\t\t// create the first group (default)\n\t\treturn addNewGroup( groups );\n\t}\n\n\tif ( ! groups.items[ groupId ] ) {\n\t\t// fallback - if for any reason there's no such group - create it\n\t\treturn addNewGroup( groups, groupId );\n\t}\n\n\t// use the existing group\n\treturn { groups, currentGroupId: groupId };\n}\n\nfunction addNewGroup( groups: OverridableProps[ 'groups' ], groupId?: string | undefined ): UpdatedGroups {\n\tconst currentGroupId = groupId || generateUniqueId( 'group' );\n\tconst updatedGroups = {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ currentGroupId ]: {\n\t\t\t\tid: currentGroupId,\n\t\t\t\tlabel: __( 'Default', 'elementor' ),\n\t\t\t\tprops: [],\n\t\t\t},\n\t\t},\n\t\torder: [ ...groups.order, currentGroupId ],\n\t};\n\n\treturn { groups: updatedGroups, currentGroupId };\n}\n\nfunction getGroupWithProp(\n\tgroups: OverridableProps[ 'groups' ],\n\tgroupId: string,\n\toverridableProp: OverridableProp\n): OverridablePropsGroup {\n\tconst group: OverridablePropsGroup = { ...groups.items[ groupId ] };\n\n\tif ( ! group.props.includes( overridableProp.overrideKey ) ) {\n\t\tgroup.props = [ ...group.props, overridableProp.overrideKey ];\n\t}\n\n\treturn group;\n}\n\nfunction getGroupWithoutProp(\n\tgroups: OverridableProps[ 'groups' ],\n\tgroupId: string,\n\toverridableProp: OverridableProp\n): OverridablePropsGroup {\n\tconst group = { ...groups.items[ groupId ] };\n\n\tif ( group ) {\n\t\tgroup.props = group.props.filter( ( key ) => key !== overridableProp.overrideKey );\n\t}\n\n\treturn group;\n}\n\nfunction removeProps( {\n\tprops,\n\tgroups,\n\tpropsToRemove,\n}: OverridableProps & { propsToRemove: OverridableProp[] } ): OverridableProps {\n\tconst allProps = Object.fromEntries(\n\t\tObject.entries( props ).filter( ( [ , prop ] ) => ! propsToRemove.includes( prop ) )\n\t);\n\n\tconst overrideKeysToRemove = propsToRemove.map( ( prop ) => prop.overrideKey );\n\n\tconst allGroupItems = Object.fromEntries(\n\t\tObject.entries( groups.items ).map( ( [ groupId, group ]: [ string, OverridablePropsGroup ] ) => [\n\t\t\tgroupId,\n\t\t\t{\n\t\t\t\t...group,\n\t\t\t\tprops: group.props.filter( ( prop ) => ! overrideKeysToRemove.includes( prop ) ),\n\t\t\t},\n\t\t] )\n\t);\n\n\treturn {\n\t\tprops: allProps,\n\t\tgroups: {\n\t\t\titems: allGroupItems,\n\t\t\torder: groups.order.filter( ( groupId ) => ! overrideKeysToRemove.includes( groupId ) ),\n\t\t},\n\t};\n}\n","import * as React from 'react';\nimport { forwardRef } from 'react';\nimport { CheckIcon, PlusIcon } from '@elementor/icons';\nimport { Box, styled } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\nconst IconContainer = styled( Box )`\n\tpointer-events: none;\n\topacity: 0;\n\ttransition: opacity 0.2s ease-in-out;\n\n\t& > svg {\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate( -50%, -50% );\n\t\twidth: 10px;\n\t\theight: 10px;\n\t\tfill: ${ ( { theme } ) => theme.palette.primary.contrastText };\n\t\tstroke: ${ ( { theme } ) => theme.palette.primary.contrastText };\n\t\tstroke-width: 2px;\n\t}\n`;\n\nconst Content = styled( Box )`\n\tposition: relative;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tcursor: pointer;\n\twidth: 16px;\n\theight: 16px;\n\tmargin-inline: ${ ( { theme } ) => theme.spacing( 0.5 ) };\n\n\t&:before {\n\t\tcontent: '';\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: 50%;\n\t\tleft: 50%;\n\t\ttransform: translate( -50%, -50% ) rotate( 45deg );\n\t\twidth: 5px;\n\t\theight: 5px;\n\t\tborder-radius: 1px;\n\t\tbackground-color: ${ ( { theme } ) => theme.palette.primary.main };\n\t\ttransition: all 0.1s ease-in-out;\n\t}\n\n\t&:hover,\n\t&.enlarged {\n\t\t&:before {\n\t\t\twidth: 12px;\n\t\t\theight: 12px;\n\t\t\tborder-radius: 2px;\n\t\t}\n\n\t\t.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n`;\n\ntype Props = {\n\tisOverridable: boolean;\n\tisOpen: boolean;\n};\nexport const Indicator = forwardRef< HTMLDivElement, Props >( ( { isOpen, isOverridable, ...props }, ref ) => (\n\t<Content ref={ ref } { ...props } className={ isOpen || isOverridable ? 'enlarged' : '' }>\n\t\t<IconContainer\n\t\t\tclassName=\"icon\"\n\t\t\taria-label={\n\t\t\t\tisOverridable ? __( 'Overridable property', 'elementor' ) : __( 'Make prop overridable', 'elementor' )\n\t\t\t}\n\t\t>\n\t\t\t{ isOverridable ? <CheckIcon fontSize={ SIZE } /> : <PlusIcon fontSize={ SIZE } /> }\n\t\t</IconContainer>\n\t</Content>\n) );\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { Form, MenuListItem } from '@elementor/editor-ui';\nimport { Button, FormLabel, Grid, Select, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp } from '../../types';\n\nconst SIZE = 'tiny';\n\nconst DEFAULT_GROUP = { value: null, label: __( 'Default', 'elementor' ) };\n\ntype Props = {\n\tonSubmit: ( data: { label: string; group: string | null } ) => void;\n\tcurrentValue?: OverridableProp;\n\tgroups?: { value: string; label: string }[];\n};\n\nexport function OverridablePropForm( { onSubmit, groups, currentValue }: Props ) {\n\tconst [ propLabel, setPropLabel ] = useState< string | null >( currentValue?.label ?? null );\n\tconst [ group, setGroup ] = useState< string | null >( currentValue?.groupId ?? groups?.[ 0 ]?.value ?? null );\n\n\tconst name = __( 'Name', 'elementor' );\n\tconst groupName = __( 'Group Name', 'elementor' );\n\n\tconst isCreate = currentValue === undefined;\n\n\tconst title = isCreate ? __( 'Create new property', 'elementor' ) : __( 'Update property', 'elementor' );\n\tconst ctaLabel = isCreate ? __( 'Create', 'elementor' ) : __( 'Update', 'elementor' );\n\n\treturn (\n\t\t<Form onSubmit={ () => onSubmit( { label: propLabel ?? '', group } ) }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%', mb: 1.5 } }\n\t\t\t\t>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ title }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" px={ 1.5 } mb={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ name }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tname={ name }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tplaceholder={ __( 'Enter value', 'elementor' ) }\n\t\t\t\t\t\t\tvalue={ propLabel ?? '' }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => setPropLabel( e.target.value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" px={ 1.5 } mb={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ groupName }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Select\n\t\t\t\t\t\t\tname={ groupName }\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ group ?? null }\n\t\t\t\t\t\t\tonChange={ setGroup }\n\t\t\t\t\t\t\tdisplayEmpty\n\t\t\t\t\t\t\trenderValue={ ( selectedValue: string | null ) => {\n\t\t\t\t\t\t\t\tif ( ! selectedValue || selectedValue === '' ) {\n\t\t\t\t\t\t\t\t\tconst [ firstGroup = DEFAULT_GROUP ] = groups ?? [];\n\n\t\t\t\t\t\t\t\t\treturn firstGroup.label;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn groups?.find( ( { value } ) => value === selectedValue )?.label ?? selectedValue;\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ ( groups ?? [ DEFAULT_GROUP ] ).map( ( { label: groupLabel, ...props } ) => (\n\t\t\t\t\t\t\t\t<MenuListItem key={ props.value } { ...props } value={ props.value ?? '' }>\n\t\t\t\t\t\t\t\t\t{ groupLabel }\n\t\t\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</Select>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" mt={ 1.5 } py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! propLabel } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ ctaLabel }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</Form>\n\t);\n}\n","import { __getState as getState } from '@elementor/store';\n\nimport { selectOverridableProps } from '../../../store/store';\nimport { type OverridableProp } from '../../../types';\n\nexport function getOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n}: {\n\tcomponentId: number;\n\toverrideKey: string;\n} ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn undefined;\n\t}\n\n\treturn overridableProps.props[ overrideKey ];\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { initSaveAsComponentTool } from './save-as-component-tool';\n\nexport function initMcp() {\n\tconst { setMCPDescription } = getMCPByDomain( 'components' );\n\n\tsetMCPDescription(\n\t\t`Elementor Editor Components MCP - Tools for creating and managing reusable components. \n Components are reusable blocks of content that can be used multiple times across the pages, its a widget which contains a set of elements and styles.`\n\t);\n\n\tinitSaveAsComponentTool();\n}\n","import { getContainer, type V1ElementData } from '@elementor/editor-elements';\nimport { getMCPByDomain } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nimport { createUnpublishedComponent } from '../store/actions/create-unpublished-component';\n\nconst InputSchema = {\n\telement_id: z\n\t\t.string()\n\t\t.describe(\n\t\t\t'The unique identifier of the element to save as a component. ' +\n\t\t\t\t'Use the \"list-elements\" tool to find available element IDs in the current document.'\n\t\t),\n\tcomponent_name: z\n\t\t.string()\n\t\t.describe( 'The name for the new component. Should be descriptive and unique among existing components.' ),\n};\n\nconst OutputSchema = {\n\tmessage: z.string().optional().describe( 'Additional information about the operation result' ),\n\tcomponent_uid: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe( 'The unique identifier of the newly created component (only present on success)' ),\n};\n\nexport const VALID_ELEMENT_TYPES = [ 'e-div-block', 'e-flexbox', 'e-tabs' ];\nexport const ERROR_MESSAGES = {\n\tELEMENT_NOT_FOUND: \"Element not found. Use 'list-elements' to get valid element IDs.\",\n\tELEMENT_NOT_ONE_OF_TYPES: `Element is not one of the following types: ${ VALID_ELEMENT_TYPES.join( ', ' ) }`,\n\tELEMENT_IS_LOCKED: 'Cannot save a locked element as a component.',\n};\n\nexport const handleSaveAsComponent = async ( params: z.infer< z.ZodObject< typeof InputSchema > > ) => {\n\tconst { element_id: elementId, component_name: componentName } = params;\n\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_FOUND );\n\t}\n\n\tconst elType = container.model.get( 'elType' );\n\n\tif ( ! VALID_ELEMENT_TYPES.includes( elType ) ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_ONE_OF_TYPES );\n\t}\n\n\tconst element = container.model.toJSON( { remove: [ 'default' ] } ) as V1ElementData;\n\n\tif ( element?.isLocked ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_IS_LOCKED );\n\t}\n\n\tconst uid = createUnpublishedComponent( componentName, element, null );\n\n\treturn {\n\t\tstatus: 'ok' as const,\n\t\tmessage: `Component \"${ componentName }\" created successfully.`,\n\t\tcomponent_uid: uid,\n\t};\n};\n\nexport const initSaveAsComponentTool = () => {\n\treturn getMCPByDomain( 'components' ).addTool( {\n\t\tname: 'save-as-component',\n\t\tschema: InputSchema,\n\t\toutputSchema: OutputSchema,\n\t\tdescription: `Save an existing element as a reusable component in the Elementor editor.\n\n## When NOT to use this tool:\n- Do not use for elements that are already components (widgetType: 'e-component').\n- Do not use for locked elements.\n- Do not guess element IDs. Always use \"list-elements\" first to get valid IDs.\n\n## Prerequisites:\n- **Verify element type**: Ensure the element is not already a component (widgetType should not be 'e-component').\n- **Check if element is unlocked**: Locked elements cannot be saved as components.\n- **Check that the element is one of the following types**: ${ VALID_ELEMENT_TYPES.join( ', ' ) }\n\n## Required parameters:\n- **element_id**: The unique ID of the element to save.\n- **component_name**: A descriptive name for the component (2-50 characters).\n\n## Example tool call:\n\\`\\`\\`json\n{ \"element_id\": \"abc123\", \"component_name\": \"Hero Section\" }\n\\`\\`\\`\n`,\n\t\thandler: handleSaveAsComponent,\n\t} );\n};\n","import { useEffect } from 'react';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { loadComponents } from './store/thunks';\n\nexport function PopulateStore() {\n\tuseEffect( () => {\n\t\tdispatch( loadComponents() );\n\t}, [] );\n\n\treturn null;\n}\n","import { __dispatch as dispatch } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { slice } from '../store';\n\nexport function removeComponentStyles( id: number ) {\n\tapiClient.invalidateComponentConfigCache( id );\n\tdispatch( slice.actions.removeStyles( { id } ) );\n}\n","import { createStylesProvider } from '@elementor/editor-styles-repository';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { selectFlatStyles, SLICE_NAME } from './store';\n\nexport const componentsStylesProvider = createStylesProvider( {\n\tkey: 'components-styles',\n\tpriority: 100,\n\tsubscribe: ( cb ) =>\n\t\tsubscribeWithSelector(\n\t\t\t( state ) => state[ SLICE_NAME ],\n\t\t\t() => {\n\t\t\t\tcb();\n\t\t\t}\n\t\t),\n\tactions: {\n\t\tall: () => {\n\t\t\treturn selectFlatStyles( getState() );\n\t\t},\n\t\tget: ( id ) => {\n\t\t\treturn selectFlatStyles( getState() ).find( ( style ) => style.id === id ) ?? null;\n\t\t},\n\t},\n} );\n","import { updateElementSettings, type V1ElementData } from '@elementor/editor-elements';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectUnpublishedComponents, slice } from '../store/store';\nimport { type ComponentInstancePropValue, type DocumentSaveStatus, type UnpublishedComponent } from '../types';\n\nexport async function createComponentsBeforeSave( {\n\telements,\n\tstatus,\n}: {\n\telements: V1ElementData[];\n\tstatus: DocumentSaveStatus;\n} ) {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tif ( ! unpublishedComponents.length ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst uidToComponentId = await createComponents( unpublishedComponents, status );\n\n\t\tupdateComponentInstances( elements, uidToComponentId );\n\n\t\tdispatch(\n\t\t\tslice.actions.add(\n\t\t\t\tunpublishedComponents.map( ( component ) => ( {\n\t\t\t\t\tid: uidToComponentId.get( component.uid ) as number,\n\t\t\t\t\tname: component.name,\n\t\t\t\t\tuid: component.uid,\n\t\t\t\t} ) )\n\t\t\t)\n\t\t);\n\t\tdispatch( slice.actions.resetUnpublished() );\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to publish components and update component instances: ${ error }` );\n\t}\n}\n\nasync function createComponents(\n\tcomponents: UnpublishedComponent[],\n\tstatus: DocumentSaveStatus\n): Promise< Map< string, number > > {\n\tconst response = await apiClient.create( {\n\t\tstatus,\n\t\titems: components.map( ( component ) => ( {\n\t\t\tuid: component.uid,\n\t\t\ttitle: component.name,\n\t\t\telements: component.elements,\n\t\t} ) ),\n\t} );\n\n\tconst map = new Map< string, number >();\n\n\tObject.entries( response ).forEach( ( [ key, value ] ) => {\n\t\tmap.set( key, value );\n\t} );\n\n\treturn map;\n}\n\nfunction updateComponentInstances( elements: V1ElementData[], uidToComponentId: Map< string, number > ): void {\n\telements.forEach( ( element ) => {\n\t\tconst { shouldUpdate, newComponentId } = shouldUpdateElement( element, uidToComponentId );\n\t\tif ( shouldUpdate ) {\n\t\t\tupdateElementComponentId( element.id, newComponentId );\n\t\t}\n\n\t\tif ( element.elements ) {\n\t\t\tupdateComponentInstances( element.elements, uidToComponentId );\n\t\t}\n\t} );\n}\n\nfunction shouldUpdateElement(\n\telement: V1ElementData,\n\tuidToComponentId: Map< string, number >\n): { shouldUpdate: true; newComponentId: number } | { shouldUpdate: false; newComponentId: null } {\n\tif ( element.widgetType === 'e-component' ) {\n\t\tconst currentComponentId = ( element.settings?.component_instance as ComponentInstancePropValue< string > )\n\t\t\t?.value?.component_id.value;\n\n\t\tif ( currentComponentId && uidToComponentId.has( currentComponentId ) ) {\n\t\t\treturn { shouldUpdate: true, newComponentId: uidToComponentId.get( currentComponentId ) as number };\n\t\t}\n\t}\n\treturn { shouldUpdate: false, newComponentId: null };\n}\n\nfunction updateElementComponentId( elementId: string, componentId: number ): void {\n\tupdateElementSettings( {\n\t\tid: elementId,\n\t\tprops: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: { $$type: 'number', value: componentId },\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\twithHistory: false,\n\t} );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __getState as getState } from '@elementor/store';\n\nimport { COMPONENT_DOCUMENT_TYPE } from '../components/consts';\nimport { selectOverridableProps } from '../store/store';\n\nexport const setComponentOverridablePropsSettingsBeforeSave = ( {\n\tcontainer,\n}: {\n\tcontainer: V1Element & { document: V1Document };\n} ) => {\n\tconst currentDocument = container.document;\n\n\tif ( ! currentDocument || currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), currentDocument.id );\n\tif ( overridableProps ) {\n\t\tcontainer.settings.set( 'overridable_props', overridableProps );\n\t}\n};\n","import { type NotificationData, notify } from '@elementor/editor-notifications';\nimport { __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectArchivedComponents } from '../store/store';\n\nconst failedNotification = ( message: string ): NotificationData => ( {\n\ttype: 'error',\n\tmessage: `Failed to archive components: ${ message }`,\n\tid: 'failed-archived-components-notification',\n} );\n\nconst successNotification = ( message: string ): NotificationData => ( {\n\ttype: 'success',\n\tmessage: `Successfully archived components: ${ message }`,\n\tid: 'success-archived-components-notification',\n} );\n\nexport const updateArchivedComponentBeforeSave = async () => {\n\ttry {\n\t\tconst archivedComponents = selectArchivedComponents( getState() );\n\n\t\tif ( ! archivedComponents.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = await apiClient.updateArchivedComponents(\n\t\t\tarchivedComponents.map( ( component ) => component.id )\n\t\t);\n\n\t\tconst failedIds = result.failedIds.join( ', ' );\n\t\tconst successIds = result.successIds.join( ', ' );\n\n\t\tif ( failedIds ) {\n\t\t\tnotify( failedNotification( failedIds ) );\n\t\t}\n\n\t\tif ( successIds ) {\n\t\t\tnotify( successNotification( successIds ) );\n\t\t}\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to update archived components: ${ error }` );\n\t}\n};\n","import { isDocumentDirty } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { apiClient } from '../api';\nimport { type DocumentSaveStatus } from '../types';\nimport { getComponentDocumentData, invalidateComponentDocumentData } from '../utils/component-document-data';\nimport { getComponentIds } from '../utils/get-component-ids';\n\ntype Options = {\n\tstatus: DocumentSaveStatus;\n\telements: V1ElementData[];\n};\n\nexport async function updateComponentsBeforeSave( { status, elements }: Options ) {\n\tif ( status !== 'publish' ) {\n\t\treturn;\n\t}\n\n\tconst componentIds = await getComponentIds( elements );\n\n\tconst componentDocumentData = await Promise.all( componentIds.map( getComponentDocumentData ) );\n\n\tconst draftIds = componentDocumentData\n\t\t.filter( ( document ) => !! document )\n\t\t.filter( isDocumentDirty )\n\t\t.map( ( document ) => document.id );\n\n\tif ( draftIds.length === 0 ) {\n\t\treturn;\n\t}\n\n\tawait apiClient.updateStatuses( draftIds, 'publish' );\n\n\tdraftIds.forEach( ( id ) => invalidateComponentDocumentData( id ) );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element, type V1ElementData } from '@elementor/editor-elements';\n\nimport { type DocumentSaveStatus } from '../types';\nimport { createComponentsBeforeSave } from './create-components-before-save';\nimport { setComponentOverridablePropsSettingsBeforeSave } from './set-component-overridable-props-settings-before-save';\nimport { updateArchivedComponentBeforeSave } from './update-archived-component-before-save';\nimport { updateComponentsBeforeSave } from './update-components-before-save';\n\ntype Options = {\n\tcontainer: V1Element & {\n\t\tdocument: V1Document;\n\t\tmodel: {\n\t\t\tget: ( key: 'elements' ) => {\n\t\t\t\ttoJSON: () => V1ElementData[];\n\t\t\t};\n\t\t};\n\t};\n\tstatus: DocumentSaveStatus;\n};\n\nexport const beforeSave = ( { container, status }: Options ) => {\n\tconst elements = container.model.get( 'elements' )?.toJSON() ?? [];\n\n\treturn Promise.all( [\n\t\tupdateArchivedComponentBeforeSave(),\n\t\tcreateComponentsBeforeSave( { elements, status } ),\n\t\tupdateComponentsBeforeSave( { elements, status } ),\n\t\tsetComponentOverridablePropsSettingsBeforeSave( { container } ),\n\t] );\n};\n"],"mappings":";AAAA,SAAS,iBAAiB,qBAAqB;AAC/C;AAAA,EAEC;AAAA,EACA;AAAA,OACM;AACP,SAAS,4BAA4B;AACrC;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAEP,SAAS,iBAAiB;AAC1B,SAAS,wBAAwB;AACjC,SAAS,wBAAwB;AACjC,SAAS,mBAAmB,qBAAqB;AACjD,SAAS,MAAAA,YAAU;;;ACnBnB,SAAS,yBAAyB;AAClC,SAAS,cAAc,gBAAgB;;;ACAvC;AAAA,EACC,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,OAGX;;;ACNP,SAAS,sBAAsB,wBAAwB;;;ACCvD,SAAS,YAAY;AACrB,SAA4B,mBAAmB;AAI/C,IAAM,WAAW;AAoBV,IAAM,YAAY,CAAE,QAAkB;AAAA,EAC5C,QAAQ;AAAA,EACR,WAAW,mBAAoB,EAAG;AAAA,EAClC,MAAM,EAAE,GAAG;AACZ;AAEO,IAAM,YAAY;AAAA,EACxB,KAAK,MACJ,YAAY,EACV,IAA6C,GAAI,QAAS,EAAG,EAC7D,KAAM,CAAE,QAAS,IAAI,KAAK,IAAK;AAAA,EAClC,QAAQ,CAAE,YACT,YAAY,EACV,KAAiD,GAAI,QAAS,IAAI,OAAQ,EAC1E,KAAM,CAAE,QAAS,IAAI,KAAK,IAAK;AAAA,EAClC,gBAAgB,CAAE,KAAe,WAChC,YAAY,EAAE,IAAK,GAAI,QAAS,WAAW;AAAA,IAC1C;AAAA,IACA;AAAA,EACD,CAAE;AAAA,EACH,oBAAoB,CAAE,OAAgB,KAAK,KAAuC,UAAW,EAAG,CAAE;AAAA,EAClG,gCAAgC,CAAE,OAAgB,KAAK,gBAAmC,UAAW,EAAG,CAAE;AAAA,EAC1G,wBAAwB,OAAQ,gBAC/B,MAAM,YAAY,EAChB,IAA8C,GAAI,QAAS,gBAAgB;AAAA,IAC3E,QAAQ;AAAA,MACP;AAAA,IACD;AAAA,EACD,CAAE,EACD,KAAM,CAAE,QAAS;AACjB,UAAM,EAAE,+BAA+B,2BAA2B,WAAW,SAAS,IAAI,IAAI,KAAK;AACnG,WAAO,EAAE,2BAA2B,UAAU,YAAY,GAAG;AAAA,EAC9D,CAAE;AAAA,EACJ,eAAe,OAAQ,gBACtB,MAAM,YAAY,EAChB,KAA8B,GAAI,QAAS,SAAS;AAAA,IACpD;AAAA,EACD,CAAE,EACD,KAAM,CAAE,QAAS,IAAI,IAAK;AAAA,EAC7B,iBAAiB,OAAQ,gBACxB,MAAM,YAAY,EAChB,KAA8B,GAAI,QAAS,WAAW;AAAA,IACtD;AAAA,EACD,CAAE,EACD,KAAM,CAAE,QAAS,IAAI,IAAK;AAAA,EAC7B,qBAAqB,OAAQ,gBAC5B,MAAM,YAAY,EAChB,IAAyC,GAAI,QAAS,sBAAsB;AAAA,IAC5E,QAAQ;AAAA,MACP,aAAa,YAAY,SAAS;AAAA,IACnC;AAAA,EACD,CAAE,EACD,KAAM,CAAE,QAAS,IAAI,KAAK,IAAK;AAAA,EAClC,0BAA0B,OAAQ,iBACjC,MAAM,YAAY,EAChB;AAAA,IACA,GAAI,QAAS;AAAA,IACb;AAAA,MACC;AAAA,IACD;AAAA,EACD,EACC,KAAM,CAAE,QAAS,IAAI,KAAK,IAAK;AACnC;;;ADpFA,IAAM,iBAAiB,iBAAkB,mBAAmB,YAAY;AACvE,QAAM,WAAW,MAAM,UAAU,IAAI;AACrC,SAAO;AACR,CAAE;;;ADiCK,IAAM,eAAgC;AAAA,EAC5C,MAAM,CAAC;AAAA,EACP,iBAAiB,CAAC;AAAA,EAClB,YAAY;AAAA,EACZ,QAAQ,CAAC;AAAA,EACT,oBAAoB,CAAC;AAAA,EACrB,cAAc,CAAC;AAAA,EACf,MAAM,CAAC;AAAA,EACP,oBAAoB;AACrB;AAEO,IAAM,aAAa;AAEnB,IAAM,QAAQ,YAAa;AAAA,EACjC,MAAM;AAAA,EACN;AAAA,EACA,UAAU;AAAA,IACT,KAAK,CAAE,OAAO,EAAE,QAAQ,MAAmE;AAC1F,UAAK,MAAM,QAAS,OAAQ,GAAI;AAC/B,cAAM,OAAO,CAAE,GAAG,MAAM,MAAM,GAAG,OAAQ;AAAA,MAC1C,OAAO;AACN,cAAM,KAAK,QAAS,OAAQ;AAAA,MAC7B;AAAA,IACD;AAAA,IACA,MAAM,CAAE,OAAO,EAAE,QAAQ,MAA8C;AACtE,YAAM,OAAO;AAAA,IACd;AAAA,IACA,gBAAgB,CAAE,OAAO,EAAE,QAAQ,MAA8C;AAChF,YAAM,gBAAgB,QAAS,OAAQ;AAAA,IACxC;AAAA,IACA,kBAAkB,CAAE,UAAW;AAC9B,YAAM,kBAAkB,CAAC;AAAA,IAC1B;AAAA,IACA,aAAc,OAAO,EAAE,QAAQ,GAA0C;AACxE,YAAM,EAAE,CAAE,QAAQ,EAAG,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM;AAE7C,YAAM,SAAS;AAAA,IAChB;AAAA,IACA,WAAW,CAAE,OAAO,EAAE,QAAQ,MAAO;AACpC,YAAM,SAAS,EAAE,GAAG,MAAM,QAAQ,GAAG,QAAQ;AAAA,IAC9C;AAAA,IACA,uBAAuB,CAAE,OAAO,EAAE,QAAQ,MAAgC;AACzE,YAAM,mBAAmB,KAAM,OAAQ;AAAA,IACxC;AAAA,IACA,SAAS,CAAE,OAAO,EAAE,QAAQ,MAAgC;AAC3D,YAAM,OAAO,MAAM,KAAK,OAAQ,CAAE,cAAe;AAChD,cAAM,aAAa,UAAU,OAAO;AACpC,YAAK,YAAa;AACjB,gBAAM,aAAa,KAAM,SAAU;AAAA,QACpC;AAEA,eAAO,CAAE;AAAA,MACV,CAAE;AAAA,IACH;AAAA,IACA,uBAAuB,CAAE,OAAO,EAAE,QAAQ,MAAmD;AAC5F,YAAM,qBAAqB;AAAA,IAC5B;AAAA,IACA,SAAS,CAAE,OAAO,EAAE,QAAQ,MAA8C;AACzE,YAAM,OAAO;AAAA,IACd;AAAA,IACA,qBAAqB,CACpB,OACA,EAAE,QAAQ,MACN;AACJ,YAAM,YAAY,MAAM,KAAK,KAAM,CAAE,SAAU,KAAK,OAAO,QAAQ,WAAY;AAE/E,UAAK,CAAE,WAAY;AAClB;AAAA,MACD;AAEA,gBAAU,mBAAmB,QAAQ;AAAA,IACtC;AAAA,EACD;AAAA,EACA,eAAe,CAAE,YAAa;AAC7B,YAAQ,QAAS,eAAe,WAAW,CAAE,OAAO,EAAE,QAAQ,MAA8C;AAC3G,YAAM,OAAO;AACb,YAAM,aAAa;AAAA,IACpB,CAAE;AACF,YAAQ,QAAS,eAAe,SAAS,CAAE,UAAW;AACrD,YAAM,aAAa;AAAA,IACpB,CAAE;AACF,YAAQ,QAAS,eAAe,UAAU,CAAE,UAAW;AACtD,YAAM,aAAa;AAAA,IACpB,CAAE;AAAA,EACH;AACD,CAAE;AAEF,IAAM,aAAa,CAAE,UAA4B,MAAO,UAAW,EAAE;AACrE,IAAM,qBAAqB,CAAE,UAA4B,MAAO,UAAW,EAAE;AAC7E,IAAM,mBAAmB,CAAE,UAA4B,MAAO,UAAW,EAAE;AAC3E,IAAM,0BAA0B,CAAE,UAA4B,MAAO,UAAW,EAAE,UAAU,CAAC;AAC7F,IAAM,wBAAwB,CAAE,UAA4B,MAAO,UAAW,EAAE;AAChF,IAAM,wBAAwB,CAAE,UAA4B,MAAO,UAAW,EAAE;AAChF,IAAM,UAAU,CAAE,UAA4B,MAAO,UAAW,EAAE;AAClE,IAAM,wBAAwB,CAAE,UAA4B,MAAO,UAAW,EAAE;AACzE,IAAM,kBAAkB,CAAE,OAAwB,gBACxD,MAAO,UAAW,EAAE,KAAK,KAAM,CAAE,cAAe,UAAU,OAAO,WAAY;AAEvE,IAAM,mBAAmB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,CAAE,MAA4B,oBAA6C;AAAA,IAC1E,GAAG,gBAAgB,IAAK,CAAE,UAAY,EAAE,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,EAAI;AAAA,IAC3E,GAAG;AAAA,EACJ;AACD;AACO,IAAM,8BAA8B;AAAA,EAC1C;AAAA,EACA,CAAE,oBAA6C;AAChD;AACO,IAAM,sBAAsB,eAAgB,kBAAkB,CAAE,WAAY,WAAW,SAAU;AACjG,IAAM,oBAAoB,eAAgB,kBAAkB,CAAE,WAAY,WAAW,OAAQ;AAC7F,IAAM,eAAe,CAAE,UAA4B,MAAO,UAAW,EAAE,UAAU,CAAC;AAClF,IAAM,mBAAmB,eAAgB,yBAAyB,CAAE,SAAU,OAAO,OAAQ,IAAK,EAAE,KAAK,CAAE;AAC3G,IAAM,2BAA2B;AAAA,EACvC;AAAA,EACA,CAAE,uBAAwB;AAC3B;AAEA,IAAM,4BAA8C;AAAA,EACnD,OAAO,CAAC;AAAA,EACR,QAAQ;AAAA,IACP,OAAO,CAAC;AAAA,IACR,OAAO,CAAC;AAAA,EACT;AACD;AAEO,IAAM,yBAAyB;AAAA,EACrC;AAAA,EACA,CAAE,cAA+C;AAChD,QAAK,CAAE,WAAY;AAClB,aAAO;AAAA,IACR;AAEA,WAAO,UAAU,oBAAoB;AAAA,EACtC;AACD;AACO,IAAM,iCAAiC;AAAA,EAC7C;AAAA,EACA,CAAE,cAA+C;AAChD,WAAO,CAAC,CAAE,WAAW;AAAA,EACtB;AACD;AACO,IAAM,aAAa,eAAgB,SAAS,CAAE,SAAU,IAAK;AAC7D,IAAM,2BAA2B;AAAA,EACvC;AAAA,EACA,CAAE,uBAAwB;AAC3B;AAEO,IAAM,2BAA2B;AAAA,EACvC;AAAA,EACA,CAAE,iBAAwC;AAC3C;;;AGhMA,SAAwB,6BAA6B;AAI9C,IAAM,2BAA2B,OAAQ,OAAgB;AAC/D,QAAM,kBAAkB,sBAAsB;AAE9C,MAAI;AACH,WAAO,MAAM,gBAAgB,QAAkC,EAAG;AAAA,EACnE,QAAQ;AACP,WAAO;AAAA,EACR;AACD;AAEO,IAAM,kCAAkC,CAAE,OAAgB;AAChE,QAAM,kBAAkB,sBAAsB;AAE9C,kBAAgB,gBAAiB,EAAG;AACrC;;;AJZO,IAAM,+BAA+B;AAAA,EAC3C,OAAQ,EAAE,cAAc,GAAG,MAA0C;AACpE,UAAM,wBAAwB,4BAA6B,SAAS,CAAE;AAEtE,UAAM,uBAAuB,sBAAsB,KAAM,CAAE,EAAE,IAAI,MAAO,QAAQ,EAAG;AACnF,QAAK,sBAAuB;AAC3B,aAAO,gBAAiB,qBAAqB,QAAS;AAAA,IACvD;AAEA,QAAK,OAAO,OAAO,UAAW;AAC7B,YAAM,IAAI,MAAO,iBAAkB,EAAG,cAAe;AAAA,IACtD;AAEA,UAAM,OAAO,MAAM,yBAA0B,EAAG;AAEhD,WAAO,MAAM,YAAY,CAAC;AAAA,EAC3B;AACD;;;AKvBA,SAAS,qBAAAC,0BAAyB;AAI3B,IAAM,kCAAkCA,mBAAmB,CAAE,UAAiC;AAEpG,SAAO,MAAM;AACd,CAAE;;;ACPF,YAAYC,YAAW;AACvB,SAAS,yBAAAC,8BAA6B;AACtC,SAAS,eAAe,4BAA4B;AACpD,SAAS,iBAAiBC,oBAAmB;AAC7C,SAAS,OAAAC,MAAK,SAAS,YAAY,OAAO,SAAS,kBAAkB;AACrE,SAAS,MAAAC,WAAU;;;ACLnB,SAAS,mBAAmB;AAC5B,SAAS,yBAAAC,8BAA6B;AACtC,SAAS,iBAAiB,mBAAmB;;;ACF7C,SAAS,uBAAuB,kBAAkB;AAE3C,SAAS,kBAAmB,aAA8B,qBAAsC;AACtG,aAAY,2BAA2B;AAAA,IACtC,IAAI;AAAA,IACJ,UAAU,sBAAsB,aAAc,mBAAoB,OAAO;AAAA,IACzE,MAAM;AAAA,IACN,cAAc;AAAA,IACd,cAAc;AAAA,EACf,CAAE;AACH;;;ADHO,SAAS,kBAAkB;AACjC,QAAM,OAAO,YAAa,UAAW;AAErC,QAAM,mBAAmBC,uBAAsB;AAE/C,SAAO,YAAa,MAAM;AACzB,UAAM,EAAE,aAAa,iBAAiB,YAAY,wBAAwB,IAAI,KAAK,GAAI,EAAG,KAAK,CAAC;AAEhG,QAAK,mBAAmB,yBAA0B;AACjD,wBAAmB,iBAAiB,uBAAwB;AAE5D;AAAA,IACD;AAEA,sBAAmB,iBAAiB,aAAa,CAAE;AAAA,EACpD,GAAG,CAAE,MAAM,gBAAiB,CAAE;AAC/B;;;AEvBA,YAAY,WAAW;AACvB,SAAS,WAAW,cAAc;AAClC,SAAS,6BAA6B;AACtC,SAAS,OAAO,KAAK,WAAW,QAAQ,oBAAoB;AAC5D,SAAS,UAAU;AAEZ,IAAM,kBAAkB,CAAE,EAAE,eAAe,MAAmC;AACpF,QAAM,YAAY,YAAa,cAAe;AAE9C,QAAM,kBAAkB,cAAc,KAAK,mBAAmB;AAE9D,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAM;AAAA,MACN,KAAM;AAAA,MACN,WAAY,mBAAmB;AAAA,MAC/B,SAAU;AAAA,MACV,cAAe,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA,MACtD,cACC,oCAAC,OAAI,IAAK,EAAE,WAAW,CAAE,kBAAkB,GAAI,OAAQ,oBAAoB,OAAO,KAC/E,cACH;AAAA;AAAA,IAGD,oCAAC,gBAAa,OAAM,aAAY,MAAK,QAAO,cAAa,GAAI,kBAAkB,WAAY,KAC1F,oCAAC,yBAAsB,UAAS,QAAO,CACxC;AAAA,EACD;AAEF;AAEA,IAAM,cAAc,OAAQ,OAAO,EAAE,mBAAmB,CAAE,SAAU,SAAS,UAAU,CAAE;AAAA,EACxF,CAAE,EAAE,OAAO,QAAQ,OAAS;AAAA,IAC3B,qBAAqB;AAAA,MACpB,UAAU,MAAM,QAAS,CAAE;AAAA,MAC3B,QAAQ,MAAM,QAAS,CAAE;AAAA,MACzB,WAAW,MAAM,QAAS,CAAE;AAAA,MAC5B,UAAU,MAAM,QAAS,CAAE;AAAA,MAC3B,UAAU,MAAM,WAAW,QAAQ;AAAA,MACnC,WAAW,UAAU,GAAI,QAAS,oBAAoB;AAAA,IACvD;AAAA,EACD;AACD;AAEA,SAAS,YAAkB,OAAW;AACrC,QAAM,MAAM,OAAa,KAAM;AAC/B,YAAW,MAAM;AAChB,QAAI,UAAU;AAAA,EACf,GAAG,CAAE,KAAM,CAAE;AACb,SAAO,IAAI;AACZ;AAEA,IAAM,WAAW;AAAA;AAAA;AAAA;AAAA;AAMjB,IAAM,UAAU;AAAA;AAAA;AAAA;;;AC1DhB,SAAS,iBAAiBC,oBAAmB;AAKtC,SAAS,oBAAqB,aAAgE;AACpG,SAAOC,aAAa,CAAE,UAA4B;AACjD,QAAK,CAAE,aAAc;AACpB,aAAO;AAAA,IACR;AAEA,WAAO,uBAAwB,OAAO,WAAY;AAAA,EACnD,CAAE;AACH;;;AJDO,IAAM,uBAAuB,MAAM;AACzC,QAAM,qBAAqBC,aAAa,wBAAyB;AACjE,QAAM,mBAAmB,oBAAqB,kBAAmB;AACjE,QAAM,SAAS,gBAAgB;AAC/B,QAAM,gBAAgB,iBAAiB;AAEvC,QAAM,iBAAiB,mBAAmB,OAAO,KAAM,iBAAiB,KAAM,EAAE,SAAS;AAEzF,MAAK,CAAE,oBAAqB;AAC3B,WAAO;AAAA,EACR;AAEA,SACC,qCAACC,MAAA,MACA;AAAA,IAAC;AAAA;AAAA,MACA,WAAU;AAAA,MACV,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,IAAK,EAAE,QAAQ,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE;AAAA;AAAA,IAEzC,qCAAC,SAAM,WAAU,OAAM,YAAW,YACjC,qCAAC,WAAQ,OAAQC,IAAI,QAAQ,WAAY,KACxC,qCAAC,cAAW,MAAK,QAAO,SAAU,QAAS,cAAaA,IAAI,QAAQ,WAAY,KAC/E,qCAAC,iBAAc,UAAS,QAAO,CAChC,CACD,GACA,qCAAC,SAAM,WAAU,OAAM,YAAW,UAAS,KAAM,OAChD,qCAAC,wBAAqB,UAAS,QAAO,QAAO,gBAAe,GAC5D,qCAAC,cAAW,SAAQ,WAAU,IAAK,EAAE,YAAY,IAAI,KAClD,aACH,CACD,CACD;AAAA,IACA,qCAAC,mBAAgB,gBAAkC;AAAA,EACpD,GACA,qCAAC,aAAQ,CACV;AAEF;AAEA,SAAS,mBAAmB;AAC3B,QAAM,mBAAmBC,uBAAsB;AAC/C,QAAM,kBAAkB,iBAAiB,WAAW;AAEpD,SAAO,iBAAiB,WAAW,UAAU,IAAK,YAAa,KAAK;AACrE;;;AKzDA,YAAYC,YAAW;AACvB,SAAS,qBAAqB;;;ACD9B,YAAYC,YAAW;AACvB,SAAS,kBAAkB;AAC3B,SAAS,OAAAC,MAAK,gBAAgB,SAAAC,QAAO,iBAAiB;AACtD,SAAS,MAAAC,WAAU;;;ACHnB,YAAYC,YAAW;AACvB,SAAS,eAAe,kBAAkB;AAC1C,SAAS,sBAAiD;AAO1D,IAAM,gBAAgB,cAAgD,MAAU;AAEzE,IAAM,iBAAiB,CAAE;AAAA,EAC/B;AAAA,EACA;AACD,MAGO;AACN,QAAM,EAAE,gBAAgB,cAAc,WAAW,IAAI,eAAgB,EAAE,gBAAgB,CAAE;AAEzF,QAAM,cAAc,MAAM;AACzB,iBAAc,EAAG;AAAA,EAClB;AAEA,SACC,qCAAC,cAAc,UAAd,EAAuB,OAAQ,EAAE,cAAc,aAAa,aAAa,gBAAgB,WAAW,KAClG,QACH;AAEF;AAEO,IAAM,YAAY,MAAM;AAC9B,QAAM,UAAU,WAAY,aAAc;AAC1C,MAAK,CAAE,SAAU;AAChB,UAAM,IAAI,MAAO,gDAAiD;AAAA,EACnE;AACA,SAAO;AACR;;;AD9BO,IAAM,kBAAkB,MAAM;AACpC,QAAM,EAAE,YAAY,aAAa,IAAI,UAAU;AAE/C,SACC,qCAACC,QAAA,EAAM,WAAU,OAAM,KAAM,KAAM,IAAK,EAAE,OAAO,QAAQ,IAAI,GAAG,IAAI,IAAI,KACvE,qCAACC,MAAA,EAAI,IAAK,EAAE,UAAU,EAAE,KACvB;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,WAAS;AAAA,MACT,MAAO;AAAA,MACP,OAAQ;AAAA,MACR,aAAcC,IAAI,UAAU,WAAY;AAAA,MACxC,UAAW,CAAE,MAA8C,aAAc,EAAE,OAAO,KAAM;AAAA,MACxF,YAAa;AAAA,QACZ,gBACC,qCAAC,kBAAe,UAAS,WACxB,qCAAC,cAAW,UAAW,QAAS,CACjC;AAAA,MAEF;AAAA;AAAA,EACD,CACD,CACD;AAEF;;;AE/BA,YAAYC,YAAW;AACvB,SAAS,kBAAAC,iBAAgB,eAAe;AACxC,SAAS,OAAAC,MAAK,WAAAC,UAAS,MAAM,MAAM,MAAM,SAAAC,QAAO,cAAAC,mBAAkB;AAClE,SAAS,MAAAC,WAAU;;;ACHnB,SAAS,iBAAiBC,oBAAmB;AAItC,IAAM,gBAAgB,MAAM;AAClC,QAAM,aAAaC,aAAa,gBAAiB;AACjD,QAAM,YAAYA,aAAa,mBAAoB;AAEnD,SAAO,EAAE,YAAY,UAAU;AAChC;;;ACTA,YAAYC,YAAW;AACvB,SAAS,yBAAyB,iCAAiC;AACnE,SAAS,mBAA+D;AACxE,SAAS,qBAAqB,oBAAoB;AAClD,SAAS,gBAAgB,wBAAwB;AACjD;AAAA,EACC;AAAA,EACA;AAAA,EACA,OAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAAC;AAAA,EACA,cAAAC;AAAA,EACA;AAAA,OACM;AACP,SAAS,MAAAC,WAAU;;;ACjBnB,SAAS,iCAAiC;AAC1C,SAAS,cAAc,gBAAgB;AAIhC,IAAM,mBAAmB,CAAE,gBAAyB;AAC1D,QAAM,QAAQ,SAAS;AACvB,QAAMC,YAAW,OAAO;AAExB,MAAK,CAAEA,WAAW;AACjB;AAAA,EACD;AAEA,EAAAA,UAAU,MAAM,QAAQ,QAAS,WAAY,CAAE;AAC/C,4BAA2B,IAAK;AACjC;;;ACfA,SAAS,iBAAiB,6BAAAC,kCAAiC;;;ACA3D;AAAA,EAGC;AAAA,OAKM;AACP,SAAS,0BAA0B;AACnC,SAAS,MAAAC,WAAU;;;ACTnB,SAAS,mBAAmB;AAC5B,SAAS,cAAcC,iBAAgB;AAShC,IAAM,sBAAsB,CAAE,EAAE,QAAQ,GAAG,KAAK,MAA2B;AACjF,QAAM,EAAE,eAAe,OAAO,IAAI,YAAY;AAC9C,MAAK,CAAE,QAAQ,OAAO,aAAc,MAAO,GAAI;AAC9C;AAAA,EACD;AAEA,QAAM,OAAO,OAAO,MAAM,WAAY,MAAO;AAC7C,kBAAiB,MAAM,IAAK;AAC7B;AAEO,IAAM,gBAAgB,CAAE,OAAgB,YAAwB;AACtE,MAAK,EAAI,QAAQ,MAAM,IAAK,YAAa,MAAM,gBAAkB;AAChE;AAAA,EACD;AAEA,QAAM,iBAAiB,QAAQ,MAAM,IAAK,iBAAkB;AAC5D,QAAM,gBAAgB,gBAAgB;AACtC,QAAM,eAAe,gBAAgB;AACrC,QAAM,aAAa,QAAQ;AAE3B,QAAM,qBAAqB,yBAA0BC,UAAS,CAAE;AAChE,QAAM,qBAAqB,gBAAgB,mBAAmB,SAAU,YAAa;AAErF,QAAM,sBAAwB,OAAsC,gBAAgB,cAAc;AAClG,QAAM,EAAE,WAAW,mBAAmB,IAAI;AAE1C,sBAAqB;AAAA,IACpB,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,uBAAuB;AAAA,IACvB,UAAU,UAAU;AAAA,IACpB,oBAAoB,mBAAmB;AAAA,EACxC,CAAE;AACH;;;ADTO,IAAM,OAAO;AAEpB,IAAM,eAAe,CAAE,QAA4B,WAAwD;AAC1G,QAAM,aAAa,IAAI,IAAK,OAAO,QAAS,OAAO,WAAW,CAAC,CAAE,CAAE;AACnE,QAAM,SAAS,IAAI,IAAK,OAAO,QAAS,OAAO,OAAO,CAAC,CAAE,CAAE;AAE3D,SAAO,OAAO,IAAK,CAAE,UAAW;AAC/B,UAAM,kBAAkB,WAAW,IAAK,MAAM,IAAK,KAAK,CAAC;AACzD,UAAM,YAAY,OAAO,IAAK,MAAM,IAAK;AAGzC,UAAM,iBAAiB,MAAM,QAAQ;AAAA,MAAK,CAAE,WAC3C,gBAAgB,SAAU,OAAO,IAAK,IAAI,EAAE,GAAG,QAAQ,WAAW,MAAM,MAAM,IAAI;AAAA,IACnF;AAGA,QAAK,WAAY;AAChB,qBAAe,OAAQ,UAAU,OAAO,GAAG,UAAU,MAAO;AAAA,IAC7D;AAEA,WAAO,EAAE,GAAG,OAAO,SAAS,eAAe;AAAA,EAC5C,CAAE;AACH;AAEO,SAAS,oBACf,SACqB;AACrB,QAAM,eAAe;AAErB,SAAO,cAAc,aAAa,UAAU,QAAQ,SAAS,MAAM,OAAO;AAAA,IACzE,UAAU;AACT,aAAO,QAAQ;AAAA,IAChB;AAAA,IAEA,UAAU;AACT,aAAO,oBAAqB,EAAE,GAAG,QAAQ,CAAE;AAAA,IAC5C;AAAA,EACD;AACD;AAEA,SAAS,oBACR,SAGqB;AACrB,SAAO,cAAc,2BAA4B,OAAQ,EAAE;AAAA,IAC1D,eAAe;AAAA,IACf,sBAAsB,KAAK,aAAa,gBAAgB,cAAc;AAAA,IAEtE,6BAA6B;AAC5B,YAAM,kBAAkB,mBAAmB;AAE3C,aAAO,iBAAiB,OAAO,KAAK,eAAe;AAAA,IACpD;AAAA,IAEA,qBAAsB,UAAyC;AAC9D,UAAK,SAAS,oBAAqB;AAClC,aAAK,aAAa,KAAK,aAAa,UAAU;AAAA,UAC7C,SAAS;AAAA,QACV;AAEA,aAAK,WAAW,OAAO,QAAS,sBAAuB;AAEvD,iBAAS,qBAAqB;AAAA,MAC/B;AAEA,aAAO;AAAA,IACR;AAAA,IAEA,gBAAgB;AAEf,aAAO,KAAK,SAAS,YAAa,CAAE,GAAG,cAAc,KAAK,KAAK;AAAA,IAChE;AAAA,IAEA,aAAc,gBAAsB,QAAiC;AACpE,YAAM,sBAAsB,eAAe,IAAI,KAAM,6BAA8B,EAAE,IAAK,CAAE;AAE5F,UAAK,CAAE,qBAAsB;AAC5B,cAAM,aAAc,gBAAgB,MAAO;AAE3C;AAAA,MACD;AAEA,0BAAoB,YAAa,MAAO;AAAA,IACzC;AAAA,IAEA,iBAAiB;AAChB,YAAM,oBACL,KAAK,SAAS,OAAO,IAAK,UAAW,GAAG,IAAK,oBAAqB,GAC/D;AAEJ,aAAO,kBAAkB,aAAa;AAAA,IACvC;AAAA,IAEA,uBAAuB;AACtB,YAAM,iBAAiB,MAAM,qBAAqB,EAAE,OAAQ,CAAE,UAAW,MAAM,SAAS,MAAO;AAC/F,YAAM,cAAc,KAAK,eAAe;AACxC,UAAK,CAAE,aAAc;AACpB,eAAO;AAAA,MACR;AAEA,YAAM,YAAY;AAAA,QACjB;AAAA,QACA,KAAK,sBAAsB;AAAA,MAC5B;AACA,aAAO;AAAA,IACR;AAAA,IAEA,wBAAwB;AACvB,YAAM,eAAe,KAAK,gBAAkB;AAC5C,YAAM,sBAAsB,aAAa;AAGzC,YAAM,kBAAkB,oBAAoB,QAAQ,MAAM,oBAAoB;AAE9E,YAAM,aAAa;AAAA,QAClB,SAAS;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,YACN,OAAO,MAAMC,IAAI,kBAAkB,WAAY;AAAA,YAC/C,WAAW,MAAM;AAAA,YACjB,UAAU,CAAE,GAAY,cAAqC,KAAK,cAAe,SAAU;AAAA,UAC5F;AAAA,QACD;AAAA,MACD;AAEA,YAAM,gBAAgB;AAAA,QACrB,WAAW,CAAE,cAAc,YAAa;AAAA,MACzC;AAEA,aAAO,EAAE,KAAK,kBAAkB,aAAa,CAAC,GAAG,SAAS,cAAc;AAAA,IACzE;AAAA,IAEA,MAAM,iBAAiB;AAEtB,YAAM,EAAE,2BAA2B,SAAS,IAAI,MAAM,UAAU;AAAA,QAC/D,KAAK,eAAe;AAAA,MACrB;AAEA,UAAK,CAAE,2BAA4B;AAClC,gBAAQ,oBAAqB,YAAY,EAAG;AAAA,MAC7C,OAAO;AACN,0BAAmB,KAAK,eAAe,GAAG,KAAK,MAAM,IAAK,IAAK,CAAE;AAAA,MAClE;AAAA,IACD;AAAA,IAEA,cAAe,EAAE,SAAS,UAAU,kBAAkB,GAA0B;AAC/E,UAAK,KAAK,2BAA2B,GAAI;AACxC;AAAA,MACD;AAEA,WAAK,eAAe;AAEpB,YAAM,iBAAiB,KAAK,MAAM,IAAK,iBAAkB;AAEzD,0BAAqB;AAAA,QACpB,QAAQ;AAAA,QACR,eAAe,gBAAgB;AAAA,QAC/B,gBAAgB,gBAAgB;AAAA,QAChC;AAAA,QACA,oBAAoB;AAAA,QACpB;AAAA,MACD,CAAE;AAAA,IACH;AAAA,IAEA,eAAgB,GAAgB;AAC/B,QAAE,gBAAgB;AAElB,YAAM,EAAE,UAAU,WAAW,mBAAmB,IAAI,KAAK;AAEzD,WAAK,cAAe;AAAA,QACnB,SAAS,SAAS;AAAA,QAClB,UAAU,UAAU;AAAA,QACpB,mBAAmB,mBAAmB;AAAA,MACvC,CAAE;AAAA,IACH;AAAA,IAEA,SAAS;AACR,aAAO;AAAA,QACN,GAAG,MAAM,OAAO;AAAA,QAChB,UAAU,KAAK;AAAA,MAChB;AAAA,IACD;AAAA,IAEA,aAAa;AACZ,aAAO;AAAA,QACN,GAAG,MAAM,WAAW;AAAA,QACpB,qBAAqB,KAAK,eAAe;AAAA,MAC1C;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,uBAAwB,OAAuC;AACvE,QAAM,eAAe,MAAM,IAAK,cAAe;AAE/C,MAAK,cAAe;AACnB,iBAAa,IAAK,YAAY,IAAK;AAAA,EACpC;AAEA,QAAM,WAAW,MAAM,IAAK,UAAW;AAEvC,MAAK,UAAW;AACf,aAAS,QAAS,CAAE,eAAgB;AACnC,6BAAwB,UAAW;AAAA,IACpC,CAAE;AAAA,EACH;AACD;;;AEhPO,IAAM,kBAAkB,OAAQ,aAA+B;AACrE,QAAM,aAAa,SAAS,IAAK,OAAQ,EAAE,YAAY,QAAQ,UAAU,eAAe,SAAS,MAAO;AACvG,UAAM,MAAgB,CAAC;AAEvB,UAAM,cAAc,CAAE,YAAY,MAAO,EAAE,SAAU,IAAK;AAE1D,QAAK,aAAc;AAClB,YAAM,cAAgB,UAAU,oBAA8D,OAC3F,aAAa;AAEhB,YAAM,WAAW,MAAM,yBAA0B,WAAY;AAE7D,sBAAgB,UAAU;AAE1B,UAAK,QAAS,WAAY,GAAI;AAC7B,YAAI,KAAM,WAAY;AAAA,MACvB;AAAA,IACD;AAEA,QAAK,CAAC,CAAE,eAAe,QAAS;AAC/B,UAAI,KAAM,GAAK,MAAM,gBAAiB,aAAc,CAAI;AAAA,IACzD;AAEA,WAAO;AAAA,EACR,CAAE;AAEF,QAAM,UAAW,MAAM,QAAQ,IAAK,UAAW,GAAI,KAAK;AAExD,SAAO,MAAM,KAAM,IAAI,IAAK,MAAO,CAAE;AACtC;;;ACnCA,SAAS,cAAc,UAAU,cAAcC,iBAAgB;AAKxD,SAAS,+BAAgC,cAAyB;AACxE,MAAK,CAAE,aAAa,QAAS;AAC5B;AAAA,EACD;AAEA,eAAa,QAAS,sBAAuB;AAC9C;AAEA,eAAe,uBAAwB,aAAsB;AAC5D,QAAM,2BAA2B,+BAAgCC,UAAS,GAAG,WAAY;AAEzF,MAAK,0BAA2B;AAC/B;AAAA,EACD;AAEA,QAAM,mBAAmB,MAAM,UAAU,oBAAqB,WAAY;AAE1E,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AACD;;;AC9BA,SAAS,cAAcC,WAAU,cAAcC,iBAAgB;AAM/D,eAAsB,qBAAsB,cAAyB;AACpE,MAAK,CAAE,aAAa,QAAS;AAC5B;AAAA,EACD;AAEA,QAAM,kBAAkB,aAAcC,UAAS,CAAE;AACjD,QAAM,sBAAsB,aAAa,OAAQ,CAAE,OAAQ,CAAE,gBAAiB,EAAG,CAAE;AAEnF,MAAK,CAAE,oBAAoB,QAAS;AACnC;AAAA,EACD;AAEA,qBAAoB,mBAAoB;AACzC;AAEA,eAAe,mBAAoB,KAAqB;AACvD,QAAM,gBAAgB,MAAM,WAAY,GAAI;AAE5C,YAAW,aAAc;AAC1B;AAEA,eAAe,WAAY,KAAwD;AAClF,SAAO,QAAQ,IAAK,IAAI,IAAK,OAAQ,OAAQ,CAAE,IAAI,MAAM,UAAU,mBAAoB,EAAG,CAAE,CAAE,CAAE;AACjG;AAEA,SAAS,UAAW,MAAsD;AACzE,QAAM,SAAS,OAAO;AAAA,IACrB,KAAK,IAAK,CAAE,CAAE,aAAa,aAAc,MAAO,CAAE,aAAa,cAAe,aAAc,CAAE,CAAE;AAAA,EACjG;AAEA,EAAAC,UAAU,MAAM,QAAQ,UAAW,MAAO,CAAE;AAC7C;AAEA,SAAS,cAAe,SAAmD;AAC1E,SAAO,CAAE,GAAG,OAAO,OAAQ,QAAQ,UAAU,CAAC,CAAE,GAAG,IAAK,QAAQ,YAAY,CAAC,GAAI,QAAS,aAAc,CAAE;AAC3G;;;ALnCA,eAAsB,qBAAsB,UAA4B;AACvE,QAAM,eAAe,MAAM,gBAAiB,QAAS;AAErD,SAAO,QAAQ,IAAK;AAAA,IACnB,oBAAqB,YAAa;AAAA,IAClC,+BAAgC,YAAa;AAAA,IAC7C,qBAAsB,YAAa;AAAA,EACpC,CAAE;AACH;AAEA,eAAe,oBAAqB,cAAyB;AAC5D,QAAM,cAAe,MAAM,QAAQ,IAAK,aAAa,IAAK,wBAAyB,CAAE,GAAI;AAAA,IACxF,CAAE,aAAc,CAAC,CAAE;AAAA,EACpB;AAEA,QAAM,YAAY,WAAW,KAAM,eAAgB;AAEnD,MAAK,WAAY;AAChB,IAAAC,2BAA2B,IAAK;AAAA,EACjC;AACD;;;AM5BA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OAEM;AAEA,IAAM,4BAA4B,MAAiE;AACzG,QAAM,2BAA2B,4BAA4B;AAC7D,QAAM,kBAAkB,4BAA4B;AAEpD,MAAI,WAAW;AAEf,MAAK,iBAAkB;AACtB,YAAS,gBAAgB,MAAM,IAAK,QAAS,GAAI;AAAA,MAChD,KAAK,UAAU;AACd,oBAAY,iBAAiB;AAE7B,cAAM,kBAAkB,gBAAgB,MAAM,UAAU;AAExD,YAAK,kBAAkB,IAAK;AAC3B,oBAAU,EAAE,IAAI,kBAAkB,EAAE;AAAA,QACrC;AAEA;AAAA,MACD;AAAA,MACA,KAAK,WAAW;AACf,oBAAY,iBAAiB,WAAY,CAAE;AAC3C;AAAA,MACD;AAAA,MACA,SAAS;AACR,oBAAY;AACZ;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO,EAAE,WAAW,aAAa,0BAA0B,QAAQ;AACpE;AAEA,SAAS,8BAA8B;AACtC,QAAM,mBAAmB,oBAAoB;AAE7C,MAAK,iBAAiB,WAAW,GAAI;AACpC,WAAO;AAAA,EACR;AAEA,SAAO,aAAc,iBAAkB,CAAE,EAAE,EAAG;AAC/C;;;AChDA,SAAS,sBAAoE;AAQtE,IAAM,8BAA8B,CAAE,SAAwB,cAAwC;AAC5G,iBAAgB;AAAA,IACf,gBAAgB;AAAA,IAChB,YAAY,qBAAsB,SAAU;AAAA,IAC5C,aAAa;AAAA,EACd,CAAE;AACH;AAEO,IAAM,uBAAuB,CAAE,cAA2E;AAChH,SAAO;AAAA,IACN,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,UAAU;AAAA,MACT,oBAAoB;AAAA,QACnB,QAAQ;AAAA,QACR,OAAO;AAAA,UACN,cAAc;AAAA,YACb,QAAQ;AAAA,YACR,OAAO,UAAU,MAAM,UAAU;AAAA,UAClC;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,IACA,iBAAiB;AAAA,MAChB,OAAO,UAAU;AAAA,MACjB,eAAe,UAAU;AAAA,IAC1B;AAAA,EACD;AACD;;;ATPO,IAAM,gBAAgB,CAAE,EAAE,UAAU,MAA2B;AACrE,QAAM,iBAAiB,qBAAsB,SAAU;AACvD,QAAM,aAAa,cAAe;AAAA,IACjC,SAAS;AAAA,IACT,kBAAkB;AAAA,EACnB,CAAE;AAEF,QAAM,cAAc,MAAM;AACzB,uBAAoB,cAAe;AAAA,EACpC;AAEA,QAAM,gBAAgB,MAAM;AAC3B,yBAAsB,CAAE,cAAgC,CAAE;AAE1D,4BAAwB;AAAA,EACzB;AAEA,QAAM,qBAAqB,MAAM;AAChC,eAAW,MAAM;AAEjB,QAAK,CAAE,UAAU,IAAK;AACrB,YAAM,IAAI,MAAO,0BAA2B;AAAA,IAC7C;AAEA,qBAAkB,UAAU,EAAG;AAAA,EAChC;AAEA,SACC,qCAACC,QAAA,MACA;AAAA,IAAC;AAAA;AAAA,MACA,WAAS;AAAA,MACT,aAAc,MAAM,0BAA2B,cAAe;AAAA,MAC9D,WAAY;AAAA,MACZ,OAAM;AAAA,MACN,IAAK;AAAA,QACJ,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,SAAS;AAAA,QACT,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,KAAK;AAAA,MACN;AAAA;AAAA,IAEA;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,SAAU;AAAA,QACV,IAAK;AAAA,UACJ,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,UAAU;AAAA,UACV,UAAU;AAAA,QACX;AAAA;AAAA,MAEA,qCAAC,gBAAa,MAAK,UAClB,qCAAC,kBAAe,UAAS,QAAO,CACjC;AAAA,MACA,qCAACA,MAAA,EAAI,SAAQ,QAAO,MAAO,GAAI,UAAW,GAAI,UAAW,KACxD;AAAA,QAAC;AAAA;AAAA,UACA,OAAQ,UAAU;AAAA,UAClB,IAAKC;AAAA,UACL,SAAQ;AAAA,UACR,OAAM;AAAA;AAAA,MACP,CACD;AAAA,IACD;AAAA,IACA,qCAACC,aAAA,EAAW,MAAK,QAAS,GAAG,YAAa,UAAW,GAAI,cAAW,kBACnE,qCAAC,oBAAiB,UAAS,QAAO,CACnC;AAAA,EACD,GACA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG,SAAU,UAAW;AAAA,MAC1B,cAAe;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA,iBAAkB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA;AAAA,IAEA,qCAAC,gBAAa,IAAK,EAAE,UAAU,QAAQ,GAAI,SAAU,sBAClDC,IAAI,WAAW,WAAY,CAC9B;AAAA,EACD,CACD;AAEF;AAEA,IAAM,qBAAqB,CAAE,UAAyC;AACrE,QAAM,EAAE,WAAW,QAAQ,IAAI,0BAA0B;AAEzD,MAAK,CAAE,WAAY;AAClB,UAAM,IAAI,MAAO,wDAAyD;AAAA,EAC3E;AAEA,uBAAsB,CAAE,KAAuB,CAAE;AAEjD,cAAa;AAAA,IACZ,aAAa,UAAU;AAAA,IACvB;AAAA,IACA,SAAS,EAAE,GAAG,SAAS,YAAY,OAAO,gBAAgB,KAAK;AAAA,EAChE,CAAE;AACH;;;AUrIA,YAAYC,YAAW;AACvB,SAAS,OAAAC,MAAK,kBAAAC,iBAAgB,UAAU,SAAAC,cAAa;AACrD,IAAM,aAAa;AAEnB,IAAM,OAAO,MAAM,KAAM,EAAE,QAAQ,WAAW,GAAG,CAAE,GAAG,UAAW,KAAM;AAEhE,IAAM,oBAAoB,MAAM;AACtC,SACC;AAAA,IAACA;AAAA,IAAA;AAAA,MACA,cAAW;AAAA,MACX,KAAM;AAAA,MACN,IAAK;AAAA,QACJ,eAAe;AAAA,QACf,UAAU;AAAA,QACV,WAAW;AAAA,QACX,UAAU;AAAA,QACV,WAAW;AAAA,UACV,UAAU;AAAA,UACV,KAAK;AAAA,UACL,SAAS;AAAA,UACT,MAAM;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,YAAY;AAAA,UACZ,eAAe;AAAA,QAChB;AAAA,MACD;AAAA;AAAA,IAEE,KAAK,IAAK,CAAE,QACb;AAAA,MAACD;AAAA,MAAA;AAAA,QACA,KAAM;AAAA,QACN,IAAK,EAAE,QAAQ,aAAa,aAAa,WAAW,IAAI,KAAK,IAAI,EAAE;AAAA,QACnE,OAAM;AAAA;AAAA,MAEN,qCAACD,MAAA,EAAI,SAAQ,QAAO,KAAM,GAAI,OAAM,UACnC,qCAAC,YAAS,SAAQ,QAAO,OAAQ,QAAS,QAAS,QAAS,GAC5D,qCAAC,YAAS,SAAQ,QAAO,OAAQ,QAAS,QAAS,QAAS,CAC7D;AAAA,IACD,CACC;AAAA,EACH;AAEF;;;AZhCO,SAAS,iBAAiB;AAChC,QAAM,EAAE,YAAY,WAAW,YAAY,IAAI,sBAAsB;AAErE,MAAK,WAAY;AAChB,WAAO,qCAAC,uBAAkB;AAAA,EAC3B;AACA,QAAM,UAAU,CAAE,cAAc,WAAW,WAAW;AACtD,MAAK,SAAU;AACd,QAAK,YAAY,SAAS,GAAI;AAC7B,aAAO,qCAAC,uBAAkB;AAAA,IAC3B;AACA,WAAO,qCAAC,gBAAW;AAAA,EACpB;AAEA,SACC,qCAAC,QAAK,IAAK,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,IAAI,EAAE,KAClE,WAAW,IAAK,CAAE,cACnB,qCAAC,iBAAc,KAAM,UAAU,KAAM,WAAwB,CAC5D,CACH;AAEF;AAEA,IAAM,aAAa,MAAM;AACxB,SACC;AAAA,IAACG;AAAA,IAAA;AAAA,MACA,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,QAAO;AAAA,MACP,IAAK,EAAE,IAAI,KAAK,IAAI,GAAG;AAAA,MACvB,KAAM;AAAA,MACN,UAAS;AAAA;AAAA,IAET,qCAAC,QAAK,UAAS,WACd,qCAAC,WAAQ,UAAS,SAAQ,CAC3B;AAAA,IACA,qCAACC,aAAA,EAAW,OAAM,UAAS,SAAQ,aAAY,OAAM,kBAAiB,YAAW,UAC9EC,IAAI,wDAAwD,WAAY,CAC3E;AAAA,IACA,qCAACD,aAAA,EAAW,SAAQ,WAAU,OAAM,UAAS,OAAM,oBAChDC;AAAA,MACD;AAAA,MACA;AAAA,IACD,CACD;AAAA,IACA,qCAACC,UAAA,EAAQ,IAAK,EAAE,OAAO,OAAO,GAAI,OAAM,kBAAiB;AAAA,IACzD,qCAACF,aAAA,EAAW,OAAM,QAAO,SAAQ,WAAU,OAAM,oBAC9CC,IAAI,6EAA6E,WAAY,CAChG;AAAA,IACA;AAAA,MAACD;AAAA,MAAA;AAAA,QACA,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,IAAK,EAAE,SAAS,QAAQ,eAAe,SAAS;AAAA;AAAA,MAEhD,qCAAC,cAAOC,IAAI,8CAA8C,WAAY,CAAG;AAAA,MACzE,qCAAC,cAAOA,IAAI,oDAAoD,WAAY,CAAG;AAAA,MAC/E,qCAAC,cAAOA,IAAI,sDAAsD,WAAY,CAAG;AAAA,IAClF;AAAA,EACD;AAEF;AAEA,IAAM,oBAAoB,MAAM;AAC/B,QAAM,EAAE,aAAa,YAAY,IAAI,UAAU;AAC/C,SACC;AAAA,IAACF;AAAA,IAAA;AAAA,MACA,OAAQ;AAAA,MACR,IAAK;AAAA,MACL,YAAW;AAAA,MACX,KAAM;AAAA,MACN,UAAW;AAAA,MACX,aAAc;AAAA;AAAA,IAEd,qCAACI,iBAAA,IAAe;AAAA,IAChB;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,IAAK;AAAA,UACJ,OAAO;AAAA,QACR;AAAA;AAAA,MAEA,qCAACJ,aAAA,EAAW,OAAM,UAAS,SAAQ,aAAY,OAAM,aAClDC,IAAI,0BAA0B,WAAY,CAC7C;AAAA,MACE,eACD;AAAA,QAACD;AAAA,QAAA;AAAA,UACA,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,IAAK;AAAA,YACJ,SAAS;AAAA,YACT,OAAO;AAAA,YACP,gBAAgB;AAAA,UACjB;AAAA;AAAA,QAEA,qCAAC,cAAK,QAAO;AAAA,QACb;AAAA,UAAC;AAAA;AAAA,YACA,OAAQ;AAAA,cACP,UAAU;AAAA,cACV,UAAU;AAAA,cACV,cAAc;AAAA,YACf;AAAA;AAAA,UAEE;AAAA,QACH;AAAA,QACA,qCAAC,cAAK,SAAQ;AAAA,MACf;AAAA,IAEF;AAAA,IACA,qCAACA,aAAA,EAAW,OAAM,UAAS,SAAQ,WAAU,OAAM,aAChDC,IAAI,uBAAuB,WAAY,CAC1C;AAAA,IACA,qCAACD,aAAA,EAAW,OAAM,UAAS,SAAQ,WAAU,OAAM,aAClD,qCAAC,QAAK,OAAM,aAAY,SAAQ,WAAU,WAAU,UAAS,SAAU,eACpEC,IAAI,qBAAqB,WAAY,CACxC,CACD;AAAA,EACD;AAEF;AAEA,IAAM,wBAAwB,MAAM;AACnC,QAAM,EAAE,YAAY,UAAU,IAAI,cAAc;AAChD,QAAM,EAAE,YAAY,IAAI,UAAU;AAElC,SAAO;AAAA,IACN,YAAY,WAAW;AAAA,MAAQ,CAAE,cAChC,UAAU,KAAK,YAAY,EAAE,SAAU,YAAY,YAAY,CAAE;AAAA,IAClE;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;;;AHrIO,IAAM,aAAa,MAAM;AAC/B,SACC,qCAAC,qBACA,qCAAC,kBAAe,iBAAgB,iCAC/B,qCAAC,qBAAgB,GACjB,qCAAC,oBAAe,CACjB,CACD;AAEF;;;AgBhBO,IAAM,0BAA0B;;;ACAvC,YAAYI,YAAW;AACvB,SAAS,aAAAC,YAAW,WAAAC,UAAS,UAAAC,SAAQ,YAAAC,iBAAgB;AACrD,SAAS,uBAA2C;AACpD,SAAS,QAAQ,aAAa,iBAAAC,sBAAqB;AACnD,SAAS,gBAAgB;AACzB,SAAS,OAAO,QAAQ,WAAW,MAAM,SAAS,UAAU,SAAAC,QAAO,aAAAC,YAAW,cAAAC,mBAAkB;AAChG,SAAS,MAAAC,WAAU;;;ACLnB,SAAS,uBAAuBC,mBAAkB;AAClD,SAAS,cAAcC,iBAAgB;AACvC,SAAS,wBAAwB;AAO1B,SAAS,2BACf,MACA,SACA,WACC;AACD,QAAM,MAAM,iBAAkB,WAAY;AAC1C,QAAM,gBAAgB,EAAE,KAAK,KAAK;AAElC,EAAAC;AAAA,IACC,MAAM,QAAQ,eAAgB;AAAA,MAC7B,GAAG;AAAA,MACH,UAAU,CAAE,OAAQ;AAAA,IACrB,CAAE;AAAA,EACH;AAEA,EAAAA,UAAU,MAAM,QAAQ,sBAAuB,GAAI,CAAE;AAErD,8BAA6B,SAAS,aAAc;AAEpD,sBAAqB;AAAA,IACpB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,GAAG;AAAA,EACJ,CAAE;AAEF,EAAAC,YAAY,oBAAqB;AAEjC,SAAO;AACR;;;ACvCA,SAAS,SAAS,gBAAgB;AAG3B,IAAM,UAAU,CAA+C,kBAA4B;AACjG,QAAM,CAAE,QAAQ,SAAU,IAAI,SAAqB,aAAc;AACjE,QAAM,CAAE,QAAQ,SAAU,IAAI,SAAwD,CAAC,CAAE;AAEzF,QAAM,UAAU,QAAS,MAAM;AAC9B,WAAO,CAAE,OAAO,OAAQ,MAAO,EAAE,KAAM,CAAE,UAAW,KAAM;AAAA,EAC3D,GAAG,CAAE,MAAO,CAAE;AAEd,QAAM,eAAe,CACpB,GACA,OACA,qBACI;AACJ,UAAM,UAAU,EAAE,GAAG,QAAQ,CAAE,KAAM,GAAG,EAAE,OAAO,MAAM;AACvD,cAAW,OAAQ;AAEnB,UAAM,EAAE,SAAS,QAAQ,iBAAiB,IAAI,aAAc,SAAS,gBAAiB;AAEtF,QAAK,CAAE,SAAU;AAChB,gBAAW,gBAAiB;AAAA,IAC7B,OAAO;AACN,gBAAW,CAAC,CAAE;AAAA,IACf;AAAA,EACD;AAEA,QAAM,WAAW,CAChB,qBACyF;AACzF,UAAM,EAAE,SAAS,QAAQ,kBAAkB,aAAa,IAAI,aAAc,QAAQ,gBAAiB;AAEnG,QAAK,CAAE,SAAU;AAChB,gBAAW,gBAAiB;AAC5B,aAAO,EAAE,QAAQ;AAAA,IAClB;AACA,cAAW,CAAC,CAAE;AACd,WAAO,EAAE,SAAS,aAAa;AAAA,EAChC;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,EACf;AACD;AAEA,IAAM,eAAe,CACpB,QACA,WAG8D;AAC9D,QAAM,SAAS,OAAO,UAAW,MAAO;AAExC,MAAK,OAAO,SAAU;AACrB,WAAO,EAAE,SAAS,MAAM,cAAc,OAAO,KAAK;AAAA,EACnD;AAEA,QAAM,SAAS,CAAC;AAEhB,EAAE,OAAO,QAAS,OAAO,MAAM,WAAW,WAAY,EAA4C;AAAA,IACjG,CAAE,CAAE,OAAO,KAAM,MAAO;AACvB,aAAQ,KAAM,IAAI,MAAO,CAAE;AAAA,IAC5B;AAAA,EACD;AAEA,SAAO,EAAE,SAAS,OAAO,OAAO;AACjC;;;ACvEA,SAAS,SAAS;AAClB,SAAS,MAAAC,WAAU;AAEnB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AAEjB,IAAM,4BAA4B,CAAE,kBAA6B;AACvE,SAAO,EAAE,OAAQ;AAAA,IAChB,eAAe,EACb,OAAO,EACP,KAAK,EACL;AAAA,MACA;AAAA,MACAA,IAAI,mEAAmE,WAAY;AAAA,IACpF,EACC,OAAQ,CAAE,UAAW,CAAE,cAAc,SAAU,KAAM,GAAG;AAAA,MACxD,SAASA,IAAI,iCAAiC,WAAY;AAAA,IAC3D,CAAE;AAAA,EACJ,CAAE;AACH;AAEO,IAAM,8BAA8B,CAAE,kBAA6B;AACzE,QAAM,aAAa,0BAA2B,aAAc;AAE5D,SAAO,WAAW,OAAQ;AAAA,IACzB,eAAe,WAAW,MAAM,cAC9B,OAAQ,CAAE,UAAW,MAAM,SAAS,GAAG;AAAA,MACvC,SAASA,IAAI,+BAA+B,WAAY;AAAA,IACzD,CAAE,EACD,OAAQ,CAAE,UAAW,MAAM,UAAU,iBAAiB;AAAA,MACtD,SAASA,IAAI,oEAAoE,WAAY;AAAA,IAC9F,CAAE;AAAA,EACJ,CAAE;AACH;;;AChBO,IAAM,wBAAwB,CACpC,kBACA,YACwB;AACxB,QAAM,EAAE,eAAe,gBAAgB,IAAI,oBAAqB,gBAAiB;AAEjF,SAAO;AAAA,IACN,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,kBAAkB,iBAAiB;AAAA,IACnC,UAAU,SAAS;AAAA,IACnB,oBAAoB,SAAS;AAAA,IAC7B,SAAS,SAAS;AAAA,EACnB;AACD;AAEA,SAAS,oBAAqB,WAA+E;AAC5G,MAAK,CAAE,UAAU,YAAY,UAAU,SAAS,WAAW,GAAI;AAC9D,WAAO,EAAE,eAAe,GAAG,iBAAiB,EAAE;AAAA,EAC/C;AAEA,MAAI,gBAAgB,UAAU,SAAS;AACvC,MAAI,kBAAkB;AAEtB,aAAY,WAAW,UAAU,UAAW;AAC3C,QAAK,QAAQ,eAAe,eAAgB;AAC3C;AAAA,IACD;AAEA,UAAM,EAAE,eAAe,qBAAqB,iBAAiB,sBAAsB,IAClF,oBAAqB,OAAQ;AAC9B,qBAAiB;AACjB,uBAAmB;AAAA,EACpB;AAEA,SAAO,EAAE,eAAe,gBAAgB;AACzC;;;AJrBO,SAAS,sBAAsB;AACrC,QAAM,CAAE,SAAS,UAAW,IAAIC,UAGpB,IAAK;AAEjB,QAAM,CAAE,gBAAgB,iBAAkB,IAAIA,UAA0C;AAExF,QAAM,CAAE,oBAAoB,qBAAsB,IAAIA,UAAuC,IAAK;AAElG,QAAM,YAAYC,QAAqC,IAAK;AAE5D,EAAAC,WAAW,MAAM;AAChB,UAAM,oCAAoC;AAE1C,UAAM,YAAY,CAAE,UAAoD;AACvE,iBAAY,EAAE,SAAS,MAAM,OAAO,SAAS,cAAc,gBAAiB,MAAM,OAAO,QAAQ,EAAG,EAAE,CAAE;AACxG,wBAAmB,MAAM,OAAO,cAAe;AAE/C,gBAAU,UAAU,sBAAuB,MAAM,OAAO,SAAS,MAAM,OAAO,OAAQ;AACtF,0BAAqB;AAAA,QACpB,QAAQ;AAAA,QACR,GAAG,UAAU;AAAA,MACd,CAAE;AAAA,IACH;AAEA,WAAO,iBAAkB,mCAAmC,SAA2B;AAEvF,WAAO,MAAM;AACZ,aAAO,oBAAqB,mCAAmC,SAA2B;AAAA,IAC3F;AAAA,EACD,GAAG,CAAC,CAAE;AAEN,QAAM,aAAa,CAAE,WAAiC;AACrD,QAAI;AACH,UAAK,CAAE,SAAU;AAChB,cAAM,IAAI,MAAO,oDAAqD;AAAA,MACvE;AAEA,YAAM,MAAM,2BAA4B,OAAO,eAAe,QAAQ,SAAS,UAAU,OAAQ;AAEjG,4BAAuB;AAAA,QACtB,MAAM;AAAA;AAAA,QAEN,SAASC,IAAI,qDAAqD,WAAY,EAC5E,QAAS,QAAQ,OAAO,aAAc,EACtC,QAAS,QAAQ,GAAI;AAAA,QACvB,MAAM;AAAA,MACP,CAAE;AAEF,yBAAmB;AAAA,IACpB,QAAQ;AACP,YAAM,eAAeA,IAAI,+CAA+C,WAAY;AACpF,4BAAuB;AAAA,QACtB,MAAM;AAAA,QACN,SAAS;AAAA,QACT,MAAM;AAAA,MACP,CAAE;AAAA,IACH;AAAA,EACD;AAEA,QAAM,qBAAqB,MAAM;AAChC,eAAY,IAAK;AACjB,sBAAmB,MAAU;AAAA,EAC9B;AAEA,QAAM,aAAa,MAAM;AACxB,uBAAmB;AAEnB,wBAAqB;AAAA,MACpB,QAAQ;AAAA,MACR,GAAG,UAAU;AAAA,IACd,CAAE;AAAA,EACH;AAEA,SACC,qCAACC,gBAAA,MACA;AAAA,IAAC;AAAA;AAAA,MACA,MAAO,YAAY;AAAA,MACnB,SAAU;AAAA,MACV,iBAAgB;AAAA,MAChB;AAAA;AAAA,IAEE,YAAY,QACb;AAAA,MAAC;AAAA;AAAA,QACA,eAAgB,EAAE,eAAe,QAAQ,aAAa;AAAA,QACtD;AAAA,QACA,YAAa;AAAA;AAAA,IACd;AAAA,EAEF,GACA,qCAAC,YAAS,MAAO,oBAAoB,MAAO,SAAU,MAAM,sBAAuB,IAAK,KACvF;AAAA,IAAC;AAAA;AAAA,MACA,SAAU,MAAM,sBAAuB,IAAK;AAAA,MAC5C,UAAW,oBAAoB;AAAA,MAC/B,IAAK,EAAE,OAAO,OAAO;AAAA;AAAA,IAEnB,oBAAoB;AAAA,EACvB,CACD,CACD;AAEF;AAEA,IAAM,YAAY;AAElB,IAAM,OAAO,CAAE;AAAA,EACd;AAAA,EACA;AAAA,EACA;AACD,MAIO;AACN,QAAM,EAAE,QAAQ,QAAQ,SAAS,cAAc,cAAAC,cAAa,IAAI,QAAgC,aAAc;AAE9G,QAAM,EAAE,WAAW,IAAI,cAAc;AAErC,QAAM,yBAAyBC,SAAS,MAAM;AAC7C,WAAO,YAAY,IAAK,CAAE,cAAe,UAAU,IAAK,KAAK,CAAC;AAAA,EAC/D,GAAG,CAAE,UAAW,CAAE;AAElB,QAAM,yBAAyBA;AAAA,IAC9B,MAAM,0BAA2B,sBAAuB;AAAA,IACxD,CAAE,sBAAuB;AAAA,EAC1B;AACA,QAAM,yBAAyBA;AAAA,IAC9B,MAAM,4BAA6B,sBAAuB;AAAA,IAC1D,CAAE,sBAAuB;AAAA,EAC1B;AAEA,QAAM,eAAe,MAAM;AAC1B,UAAM,EAAE,SAAS,aAAa,IAAID,cAAc,sBAAuB;AAEvE,QAAK,SAAU;AACd,iBAAY,YAAa;AAAA,IAC1B;AAAA,EACD;AAEA,QAAM,QAAQ;AAAA,IACb,SAASF,IAAI,uBAAuB,WAAY;AAAA,IAChD,MAAMA,IAAI,QAAQ,WAAY;AAAA,IAC9B,QAAQA,IAAI,UAAU,WAAY;AAAA,IAClC,QAAQA,IAAI,UAAU,WAAY;AAAA,EACnC;AAEA,QAAM,cAAc;AAEpB,SACC,qCAAC,eAAY,UAAW,gBACvB,qCAACI,QAAA,EAAM,YAAW,SAAQ,OAAM,WAC/B;AAAA,IAACA;AAAA,IAAA;AAAA,MACA,WAAU;AAAA,MACV,YAAW;AAAA,MACX,IAAK;AAAA,MACL,IAAK;AAAA,MACL,IAAK,EAAE,WAAW,KAAK,cAAc,aAAa,aAAa,WAAW,OAAO,OAAO;AAAA;AAAA,IAExF,qCAAC,YAAS,UAAW,WAAY;AAAA,IACjC,qCAACC,aAAA,EAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,gBAAgB,YAAY,OAAO,YAAY,EAAE,KAC1F,MAAM,OACT;AAAA,EACD,GACA,qCAAC,QAAK,WAAS,MAAC,KAAM,MAAO,YAAW,SAAQ,GAAI,OACnD,qCAAC,QAAK,MAAI,MAAC,IAAK,MACf,qCAAC,aAAU,SAAU,aAAc,MAAK,UACrC,MAAM,IACT,CACD,GACA,qCAAC,QAAK,MAAI,MAAC,IAAK,MACf;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,IAAK;AAAA,MACL,MAAO;AAAA,MACP,WAAS;AAAA,MACT,OAAQ,OAAO;AAAA,MACf,UAAW,CAAE,MACZ,aAAc,GAAG,iBAAiB,sBAAuB;AAAA,MAE1D,YAAa,EAAE,OAAO,EAAE,OAAO,gBAAgB,YAAY,MAAM,EAAE;AAAA,MACnE,OAAQ,QAAS,OAAO,aAAc;AAAA,MACtC,YAAa,OAAO;AAAA;AAAA,EACrB,CACD,CACD,GACA,qCAACF,QAAA,EAAM,WAAU,OAAM,gBAAe,YAAW,WAAU,OAAM,IAAK,GAAI,IAAK,OAC9E,qCAAC,UAAO,SAAU,YAAa,OAAM,aAAY,SAAQ,QAAO,MAAK,WAClE,MAAM,MACT,GACA,qCAAC,UAAO,MAAK,UAAS,UAAW,CAAE,SAAU,SAAQ,aAAY,OAAM,WAAU,MAAK,WACnF,MAAM,MACT,CACD,CACD,CACD;AAEF;;;AKpOA,YAAYG,aAAW;AACvB,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,yBAAAC,8BAA8C;AAEvD,SAAS,qBAAqB,UAAU,mBAAAC,wBAAuB;AAC/D,SAAS,iBAAiBC,oBAAmB;;;ACL7C,SAAS,6BAAAC,kCAAkD;AAC3D,SAAS,cAAcC,iBAAgB;AAIhC,SAAS,uBAAwB;AAAA,EACvC;AAAA,EACA;AACD,GAGI;AACH,QAAMC,YAAWC,UAAS,GAAG;AAE7B,MAAK,CAAED,WAAW;AACjB;AAAA,EACD;AAEA,EAAAA,UAAU,MAAM,QAAQ,QAAS,IAAK,CAAE;AACxC,EAAAA,UAAU,MAAM,QAAQ,sBAAuB,kBAAmB,CAAE;AACrE;;;ACpBA,YAAYE,aAAW;AACvB,SAA6B,aAAAC,kBAAiB;AAC9C,SAAS,oBAAoB;AAC7B,SAAS,MAAAC,WAAU;;;ACHnB,SAAS,+BAA+B;AACxC,SAAS,wBAAwB,aAAa,uBAAuB;AAE9D,SAAS,oBAAoB;AACnC,SAAO,YAAa,gBAAiB,iCAAkC,GAAG,MAAM,wBAAwB,CAAE;AAC3G;;;ACLA,SAAS,aAAAC,YAAW,YAAAC,iBAAgB;AACpC,SAAS,gBAAgB;AAElB,SAAS,eAAgB,SAA8B;AAC7D,QAAM,CAAE,MAAM,OAAQ,IAAIA,UAAqB,IAAI,QAAS,GAAG,GAAG,GAAG,CAAE,CAAE;AAEzE,QAAM,WAAW;AAAA,IAChB,MAAM;AACL,cAAS,SAAS,sBAAsB,KAAK,IAAI,QAAS,GAAG,GAAG,GAAG,CAAE,CAAE;AAAA,IACxE;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAEA,oBAAmB,EAAE,SAAS,SAAS,CAAE;AACzC,oBAAmB,EAAE,SAAS,SAAS,CAAE;AACzC,uBAAsB,EAAE,SAAS,SAAS,CAAE;AAE5C,EAAAD;AAAA,IACC,MAAM,MAAM;AACX,eAAS,OAAO;AAAA,IACjB;AAAA,IACA,CAAE,QAAS;AAAA,EACZ;AAEA,SAAO;AACR;AAOA,SAAS,kBAAmB,EAAE,SAAS,SAAS,GAAmB;AAClE,EAAAA,WAAW,MAAM;AAChB,QAAK,CAAE,SAAU;AAChB;AAAA,IACD;AAEA,UAAM,MAAM,QAAQ,eAAe;AACnC,SAAK,iBAAkB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAE;AAE7D,WAAO,MAAM;AACZ,WAAK,oBAAqB,UAAU,QAAS;AAAA,IAC9C;AAAA,EACD,GAAG,CAAE,SAAS,QAAS,CAAE;AAC1B;AAEA,SAAS,kBAAmB,EAAE,SAAS,SAAS,GAAmB;AAClE,EAAAA,WAAW,MAAM;AAChB,QAAK,CAAE,SAAU;AAChB;AAAA,IACD;AAEA,UAAM,iBAAiB,IAAI,eAAgB,QAAS;AACpD,mBAAe,QAAS,OAAQ;AAEhC,UAAM,MAAM,QAAQ,eAAe;AACnC,SAAK,iBAAkB,UAAU,UAAU,EAAE,SAAS,KAAK,CAAE;AAE7D,WAAO,MAAM;AACZ,qBAAe,WAAW;AAC1B,WAAK,oBAAqB,UAAU,QAAS;AAAA,IAC9C;AAAA,EACD,GAAG,CAAE,SAAS,QAAS,CAAE;AAC1B;AAEA,SAAS,qBAAsB,EAAE,SAAS,SAAS,GAAmB;AACrE,EAAAA,WAAW,MAAM;AAChB,QAAK,CAAE,SAAU;AAChB;AAAA,IACD;AAEA,UAAM,mBAAmB,IAAI,iBAAkB,QAAS;AACxD,qBAAiB,QAAS,SAAS,EAAE,WAAW,MAAM,SAAS,KAAK,CAAE;AAEtE,WAAO,MAAM;AACZ,uBAAiB,WAAW;AAAA,IAC7B;AAAA,EACD,GAAG,CAAE,SAAS,QAAS,CAAE;AAC1B;;;AFpEO,SAAS,eAAgB,EAAE,SAAS,QAAQ,GAAgB;AAClE,QAAM,iBAAiB,kBAAkB;AAEzC,EAAAE,WAAW,MAAM;AAChB,UAAM,YAAY,CAAE,UAA0B;AAC7C,UAAK,MAAM,QAAQ,UAAW;AAC7B,gBAAQ;AAAA,MACT;AAAA,IACD;AAEA,oBAAgB,KAAK,iBAAkB,WAAW,SAAU;AAE5D,WAAO,MAAM;AACZ,sBAAgB,KAAK,oBAAqB,WAAW,SAAU;AAAA,IAChE;AAAA,EACD,GAAG,CAAE,gBAAgB,OAAQ,CAAE;AAE/B,MAAK,CAAE,gBAAgB,MAAO;AAC7B,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN,8DACC,sCAAC,mBAAc,GACf,sCAAC,YAAS,QAAS,gBAAiB,SAAoB,SAAoB,CAC7E;AAAA,IACA,eAAe;AAAA,EAChB;AACD;AAEA,SAAS,SAAU,EAAE,QAAQ,SAAS,QAAQ,GAAyE;AACtH,QAAM,OAAO,eAAgB,OAAQ;AACrC,QAAM,gBAA+B;AAAA,IACpC,UAAU;AAAA,IACV,KAAK;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,UAAU,mBAAoB,MAAM,OAAO,aAAuB,CAAE;AAAA,EACrE;AAEA,QAAM,gBAAgB,CAAE,UAAgC;AACvD,QAAK,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAM;AACjD,YAAM,eAAe;AACrB,cAAQ;AAAA,IACT;AAAA,EACD;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ;AAAA,MACR,SAAU;AAAA,MACV,WAAY;AAAA,MACZ,MAAK;AAAA,MACL,UAAW;AAAA,MACX,cAAaC,IAAI,+BAA+B,WAAY;AAAA;AAAA,EAC7D;AAEF;AAEA,SAAS,mBAAoB,MAAe,UAAkB,cAAuB;AACpF,QAAM,UAAU,eAAe;AAC/B,QAAM,EAAE,GAAG,WAAW,GAAG,WAAW,OAAO,eAAe,QAAQ,eAAe,IAAI;AACrF,QAAM,IAAI,YAAY;AACtB,QAAM,IAAI,YAAY;AACtB,QAAM,QAAQ,gBAAgB,IAAI;AAClC,QAAM,SAAS,iBAAiB,IAAI;AACpC,QAAM,SAAS,KAAK,IAAK,cAAc,QAAQ,GAAG,SAAS,CAAE;AAE7D,QAAM,EAAE,YAAY,IAAI,aAAa,GAAG,IAAI;AAE5C,QAAM,OAAO;AAAA,MACP,EAAG;AAAA,MACH,EAAG,IAAK,EAAG;AAAA,QACT,EAAG;AAAA;AAAA,MAEL,IAAI,MAAO,IAAK,CAAE;AAAA,MAClB,IAAI,QAAQ,MAAO,IAAK,CAAE;AAAA,MAC1B,MAAO,IAAK,MAAO,UAAW,IAAI,KAAM,IAAK,IAAI,MAAO;AAAA,MACxD,IAAI,KAAM,IAAK,IAAI,SAAS,MAAO;AAAA,MACnC,MAAO,IAAK,MAAO,UAAW,IAAI,QAAQ,MAAO,IAAK,IAAI,MAAO;AAAA,MACjE,IAAI,MAAO,IAAK,IAAI,MAAO;AAAA,MAC3B,MAAO,IAAK,MAAO,UAAW,CAAE,IAAK,IAAI,SAAS,MAAO;AAAA,MACzD,CAAE,IAAK,IAAI,MAAO;AAAA,MAClB,MAAO,IAAK,MAAO,UAAW,IAAI,MAAO,IAAK,CAAE;AAAA;AAAA;AAItD,SAAO,KAAK,QAAS,WAAW,GAAI;AACrC;AAOA,SAAS,gBAAgB;AACxB,QAAM,+BAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBrC,SAAO,sCAAC,WAAM,mBAAgB,wCAAuC,4BAA8B;AACpG;;;AFvHO,SAAS,gBAAgB;AAC/B,QAAM,qBAAqBC,aAAa,wBAAyB;AAEjE,4BAA0B;AAE1B,QAAM,SAAS,gBAAgB;AAE/B,QAAM,aAAa,uBAAwB,sBAAsB,MAAU;AAE3E,MAAK,CAAE,YAAa;AACnB,WAAO;AAAA,EACR;AAEA,SAAO,sCAAC,kBAAe,SAAU,YAAa,SAAU,QAAS;AAClE;AAEA,SAAS,4BAA4B;AACpC,QAAM,mBAAmBC,uBAAsB;AAC/C,QAAM,qBAAqBD,aAAa,wBAAyB;AACjE,QAAM,OAAOA,aAAa,UAAW;AAErC,EAAAE,WAAW,MAAM;AAChB,WAAO,SAAUC,iBAAiB,iCAAkC,GAAG,MAAM;AAC5E,YAAM,eAAe,iBAAiB,WAAW;AAEjD,UAAK,aAAa,OAAO,oBAAqB;AAC7C;AAAA,MACD;AAEA,UAAK,oBAAqB;AACzB,kBAAU,gBAAiB,kBAAmB;AAAA,MAC/C;AAEA,YAAM,cAAc,aAAa,OAAO,SAAS;AAEjD,UAAK,CAAE,aAAc;AACpB,+BAAwB,EAAE,MAAM,CAAC,GAAG,oBAAoB,KAAK,CAAE;AAC/D;AAAA,MACD;AAEA,6BAAwB;AAAA,QACvB,MAAM,wBAAyB,MAAM,YAAa;AAAA,QAClD,oBAAoB,aAAa;AAAA,MAClC,CAAE;AAAA,IACH,CAAE;AAAA,EACH,GAAG,CAAE,MAAM,kBAAkB,kBAAmB,CAAE;AACnD;AAEA,SAAS,wBAAyB,MAA4B,cAAiD;AAC9G,QAAM,iBAAiB,KAAK,UAAW,CAAE,EAAE,YAAY,MAAO,gBAAgB,aAAa,EAAG;AAE9F,MAAK,kBAAkB,GAAI;AAI1B,WAAO,KAAK,MAAO,GAAG,iBAAiB,CAAE;AAAA,EAC1C;AAEA,SAAO;AAAA,IACN,GAAG;AAAA,IACH;AAAA,MACC,YAAY,cAAc,UAAU,MAAM,IAAI,QAAQ;AAAA,MACtD,aAAa,aAAa;AAAA,IAC3B;AAAA,EACD;AACD;AAEA,SAAS,uBAAwB,IAAqC;AACrE,MAAK,CAAE,IAAK;AACX,WAAO;AAAA,EACR;AAEA,QAAM,mBAAmBF,uBAAsB;AAE/C,QAAM,mBAAmB,iBAAiB,IAAK,EAAG;AAElD,QAAM,SAAS,kBAAkB;AACjC,QAAM,YAAc,QAAQ,MAAM,IAAI,WAAY,CAAE,KAAK;AACzD,QAAM,aAAa,WAAW,SAAU,CAAE;AAE1C,SAAO,cAAc;AACtB;;;AK/FA,YAAYG,aAAW;AACvB,SAAS,aAAa,kBAAkB;AACxC,SAAS,4BAA4B;AACrC,SAAS,OAAAC,MAAK,UAAAC,SAAQ,eAAe,eAAe,cAAc,QAAAC,OAAM,SAAAC,QAAO,cAAAC,mBAAkB;AACjG,SAAS,MAAAC,YAAU;AAEZ,IAAM,qBAAqB,CAAE,aAAsB;AACzD,aAAY;AAAA,IACX,WAAW,sCAAC,kBAAe,UAAsB;AAAA,EAClD,CAAE;AACH;AAEA,IAAM,iBAAiB,CAAE,EAAE,SAAS,MAA6B;AAEhE,QAAM,UAAUA,KAAI,yCAAyC,WAAY,EAAE,QAAS,MAAM,QAAS;AACnG,SACC,8DACC,sCAAC,gBAAa,MAAO,SACpB,sCAACL,MAAA,EAAI,SAAQ,QAAO,YAAW,UAAS,KAAM,KAC7C,sCAACE,OAAA,EAAK,OAAM,eACX,sCAAC,wBAAqB,UAAS,UAAS,CACzC,GACA,sCAACE,aAAA,EAAW,SAAQ,eAAc,OAAS,CAC5C,CACD,GACA,sCAAC,qBACA,sCAACD,QAAA,EAAM,SAAU,GAAI,WAAU,YAC9B,sCAACC,aAAA,EAAW,SAAQ,WACjBC;AAAA,IACD;AAAA,IACA;AAAA,EACD,CACD,GACA,sCAAC,qBACA,sCAACJ,SAAA,EAAO,OAAM,aAAY,SAAQ,aAAY,SAAU,eACrDI,KAAI,SAAS,WAAY,CAC5B,CACD,CACD,CACD,CACD;AAEF;;;AC1CA,YAAYC,aAAW;AACvB,SAAS,kBAAkB;AAC3B,SAAS,mBAAmB,0BAA0B;AACtD,SAAS,WAAW,aAAa,wBAAwB;AAEzD,SAAS,kBAAAC,iBAAgB,cAAAC,mBAAkB;AAC3C,SAAS,cAAcC,iBAAgB;AACvC,SAAS,cAAAC,aAAY,SAAAC,SAAO,WAAAC,gBAAe;AAC3C,SAAS,MAAAC,YAAU;;;ACRnB,SAAS,mBAAAC,kBAAiB,0BAA0B;AACpD,SAAS,KAAAC,UAAS;;;ACDlB,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,KAAAC,UAAS;;;ACDlB,SAAS,uBAAuB;AAChC,SAAS,KAAAC,UAAS;AAEX,IAAM,wCAAwC;AAAA,EACpD;AAAA,EACAA,GAAE,OAAQ;AAAA,IACT,cAAcA,GAAE,OAAO;AAAA,IACvB,gBAAgBA,GAAE,QAAQ;AAAA,IAC1B,eAAeA,GAAE,OAAQ;AAAA,MACxB,MAAMA,GAAE,QAAS,WAAY;AAAA,MAC7B,IAAIA,GAAE,OAAO;AAAA,IACd,CAAE;AAAA,EACH,CAAE;AACH;;;ADRO,IAAM,yCAAyCC;AAAA,EACrD;AAAA,EACAC,GAAE,MAAO,sCAAsC,MAAO,EAAE,SAAS,EAAE,QAAS,CAAC,CAAE;AAChF;;;ADHO,IAAM,gCAAgCC;AAAA,EAC5C;AAAA,EACAC,GAAE,OAAQ;AAAA,IACT,cAAc,mBAAmB;AAAA,IACjC,WAAWA,GAAE,SAAU,uCAAuC,MAAO;AAAA,EACtE,CAAE;AACH;;;AGXA,YAAYC,aAAW;AACvB,SAAS,yBAAAC,wBAAuB,kBAAkB;AAClD,SAAS,UAAAC,SAAQ,SAAAC,QAAO,cAAAC,mBAAkB;AAC1C,SAAS,MAAAC,YAAU;AAEZ,IAAMC,cAAa,CAAE,EAAE,gBAAgB,MAAwC;AACrF,SACC;AAAA,IAACH;AAAA,IAAA;AAAA,MACA,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,QAAO;AAAA,MACP,OAAM;AAAA,MACN,IAAK,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,EAAE;AAAA,MACrC,KAAM;AAAA;AAAA,IAEN,sCAACF,wBAAA,EAAsB,UAAS,SAAQ;AAAA,IAExC,sCAACG,aAAA,EAAW,OAAM,UAAS,SAAQ,eAChCC,KAAI,qBAAqB,WAAY,CACxC;AAAA,IAEA,sCAACD,aAAA,EAAW,OAAM,UAAS,SAAQ,WAAU,UAAS,WACnDC;AAAA,MACD;AAAA,MACA;AAAA,IACD,CACD;AAAA,IAEA,sCAACH,SAAA,EAAO,SAAQ,YAAW,OAAM,aAAY,MAAK,SAAQ,IAAK,EAAE,IAAI,EAAE,GAAI,SAAU,mBACpF,sCAAC,cAAW,UAAS,SAAQ,GAC3BG,KAAI,kBAAkB,WAAY,CACrC;AAAA,EACD;AAEF;;;AClCA,YAAYE,aAAW;AACvB,SAAS,aAAa;AACtB,SAAS,yBAAyB;AAClC,SAAS,oBAAoB;AAC7B,SAAS,UAAU,kBAAAC,iBAAgB,cAAc,SAAAC,cAAa;AASvD,SAAS,mBAAoB,EAAE,OAAO,MAAM,GAAW;AAC7D,QAAM,CAAE,QAAQ,SAAU,IAAI,kBAAmB,MAAM,IAAI,IAAK;AAEhE,QAAM,cAAc,MAAM;AACzB,cAAW,CAAE,MAAO;AAAA,EACrB;AAEA,QAAM,KAAK,MAAM;AACjB,QAAM,UAAU,SAAU,EAAG;AAC7B,QAAM,YAAY,WAAY,EAAG;AAEjC,QAAM,QAAQ,MAAM;AAEpB,SACC,8DACC;AAAA,IAACD;AAAA,IAAA;AAAA,MACA,IAAK;AAAA,MACL,iBAAgB;AAAA,MAChB,cAAa,GAAI,KAAM;AAAA,MACvB,SAAU;AAAA,MACV,GAAI;AAAA,MACJ,IAAK,EAAE,WAAW,EAAE,iBAAiB,cAAc,EAAE;AAAA;AAAA,IAErD,sCAACC,QAAA,EAAM,WAAU,OAAM,YAAW,UAAS,cAAa,SAAQ,UAAW,GAAI,KAAM,OACpF;AAAA,MAAC;AAAA;AAAA,QACA,WAAY;AAAA,QACZ,0BAA2B,EAAE,OAAO,gBAAgB,SAAS,WAAW,YAAY,OAAO;AAAA,QAC3F,IAAK,EAAE,UAAU,GAAG,YAAY,GAAG,iBAAiB,EAAE;AAAA;AAAA,IACvD,CACD;AAAA,IACA,sCAAC,gBAAa,MAAO,QAAS,OAAM,aAAY,UAAS,QAAO;AAAA,EACjE,GACA,sCAAC,YAAS,IAAK,WAAY,mBAAkB,SAAU,IAAK,QAAS,SAAQ,UAC5E,sCAACA,QAAA,EAAM,WAAU,UAAS,KAAM,GAAI,GAAI,KACrC,MAAM,MAAM,IAAK,CAAE;AAAA;AAAA,IAEpB,sCAAC,SAAI,KAAM,UAAW,KAAK,UAAW,MAAO,MAAO,GAAG,MAAM,CAAE,CAAG;AAAA,GACjE,CACH,CACD,CACD;AAEF;;;ALtCO,SAAS,uBAAuB;AACtC,QAAM,EAAE,QAAQ,IAAI,WAAW;AAC/B,QAAM,WAAW,kBAAmB,QAAQ,IAAI,oBAAqB;AACrE,QAAM,eAAgB,8BAA8B,QAAS,QAAS,GAAG,cAAkC;AAE3G,QAAM,YAAY,cAAc,gBAAiBC,UAAS,GAAG,WAAY,IAAI;AAC7E,QAAM,mBAAmB,cAAc,uBAAwBA,UAAS,GAAG,WAAY,IAAI;AAE3F,QAAM,sBAAsB,mBAAmB,GAAG,SAAS,MAAM;AAEjE,MAAK,CAAE,eAAe,CAAE,oBAAoB,CAAE,WAAY;AACzD,WAAO;AAAA,EACR;AAGA,QAAM,aAAaC,KAAI,WAAW,WAAY,EAAE,QAAS,MAAM,UAAU,IAAK;AAE9E,QAAM,sBAAsB,MAAM,kBAAmB,aAAa,mBAAoB;AAEtF,QAAM,SAAS,iBAAiB,OAAO,MACrC;AAAA,IAAK,CAAE,YACP,iBAAiB,OAAO,MAAO,OAAQ,IAAI,iBAAiB,OAAO,MAAO,OAAQ,IAAI;AAAA,EACvF,EACC,OAAQ,OAAQ;AAElB,QAAM,UAAU,OAAO,WAAW,KAAK,OAAO,KAAM,iBAAiB,KAAM,EAAE,WAAW;AAExF,SACC,8DACC,sCAAC,eAAY,IAAK,EAAE,gBAAgB,QAAQ,KAC3C,sCAACC,SAAA,EAAM,WAAU,OAAM,cAAa,iBAAgB,UAAW,KAC9D,sCAACA,SAAA,EAAM,WAAU,OAAM,YAAW,UAAS,gBAAe,SAAQ,KAAM,GAAI,UAAW,KACtF,sCAACC,iBAAA,EAAe,UAAS,SAAQ,IAAK,EAAE,OAAO,gBAAgB,GAAI,GACnE,sCAAC,wBAAmB,UAAU,IAAM,CACrC,GACA,sCAACC,UAAA,EAAQ,OAAQ,cAChB,sCAACC,aAAA,EAAW,MAAK,QAAO,SAAU,qBAAsB,cAAa,cACpE,sCAACC,aAAA,EAAW,UAAS,QAAO,CAC7B,CACD,CACD,CACD,GACA,sCAAC,iBACE,UACD,sCAACC,aAAA,EAAW,iBAAkB,qBAAsB,IAEpD,sCAACL,SAAA,EAAM,WAAU,UAAS,YAAW,aAClC,OAAO,IAAK,CAAE,UACf,sCAAC,sBAAmB,KAAM,MAAM,IAAK,OAAgB,OAAQ,iBAAiB,OAAQ,CACrF,CACH,CAEF,CACD;AAEF;;;AMxEA,YAAYM,aAAW;AAEvB,SAAS,6BAA6B,iBAAiB,cAAc,oBAAoB;AACzF,SAAS,0BAA0B,cAAAC,mBAAkB;AAErD,SAAS,cAAcC,iBAAgB;;;ACLvC,SAAS,mBAAAC,wBAAuB;AAChC,SAAS,KAAAC,UAAS;AAEX,IAAM,mCAAmCD;AAAA,EAC/C;AAAA,EACAC,GAAE,OAAQ;AAAA,IACT,cAAcA,GAAE,OAAO;AAAA,IACvB,cAAcA,GACZ,OAAQ;AAAA,MACR,QAAQA,GAAE,OAAO;AAAA,MACjB,OAAOA,GAAE,QAAQ;AAAA,IAClB,CAAE,EACD,SAAS;AAAA,EACZ,CAAE;AACH;;;ACdA,YAAYC,aAAW;AACvB,SAAS,iBAAAC,gBAAuC,cAAAC,mBAAkB;AAQlE,IAAM,yBAAyBD,eAA6C,IAAK;AAE1E,SAAS,wBAAyB,EAAE,UAAU,GAAG,MAAM,GAA8C;AAC3G,SAAO,sCAAC,uBAAuB,UAAvB,EAAgC,OAAQ,SAAU,QAAU;AACrE;AAEO,IAAM,0BAA0B,MAAMC,YAAY,sBAAuB,GAAG;;;ACfnF,SAAS,cAAcC,WAAU,cAAcC,iBAAgB;AAMxD,SAAS,iCAAkC,aAAqB,WAA2C;AACjH,QAAM,mBAAmB,uBAAwBC,UAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA,QAAM,0BAA0B,iBAAiB,MAAO,UAAU,YAAa;AAE/E,MAAK,CAAE,yBAA0B;AAChC;AAAA,EACD;AAEA,QAAM,sBAAsB;AAAA,IAC3B,GAAG;AAAA,IACH,OAAO;AAAA,MACN,GAAG,iBAAiB;AAAA,MACpB,CAAE,wBAAwB,WAAY,GAAG;AAAA,QACxC,GAAG;AAAA,QACH,aAAa,UAAU;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AAEA,EAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,IACnB,CAAE;AAAA,EACH;AACD;;;AHrBO,SAAS,uBAA4C;AAAA,EAC3D;AAAA,EACA,GAAG;AACJ,GAAiD;AAChD,QAAM,EAAE,YAAY,IAAIC,YAAW;AAEnC,QAAM,EAAE,OAAO,MAAM,UAAU,aAAa,GAAG,YAAY,IAAI,aAAc,gCAAiC;AAC9G,QAAM,cAAc,yBAA0BC,UAAS,CAAE;AAEzD,MAAK,CAAE,aAAc;AACpB,UAAM,IAAI,MAAO,0BAA2B;AAAA,EAC7C;AAEA,MAAK,CAAE,OAAO,cAAe;AAC5B,UAAM,IAAI,MAAO,0BAA2B;AAAA,EAC7C;AAEA,QAAM,sBAAsB,CAAE,aAAuD;AACpF,UAAM,YAAY;AAAA,MACjB,GAAG;AAAA,MACH,cAAc,SAAU,IAAK;AAAA,IAC9B;AAEA,aAAU,SAAU;AACpB,qCAAkC,aAAa,SAAU;AAAA,EAC1D;AAEA,QAAM,WAAW,yBAA0B;AAAA,IAC1C,QAAQ;AAAA,MACP,CAAE,IAAK,GAAG,YAAY,YAAa,IAAK;AAAA,IACzC;AAAA,EACD,CAAE;AAEF,QAAM,oBAA6D,cAChE,EAAE,CAAE,IAAK,GAAG,YAAY,IACxB;AAEH,SACC,sCAAC,2BAAwB,SACxB;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACL;AAAA,MACA,UAAW;AAAA,MACX,OAAQ,EAAE,CAAE,IAAK,GAAG,MAAM,aAAa;AAAA,MACvC,aAAc;AAAA;AAAA,IAEd,sCAAC,mBAAgB,QAChB,sCAAC,+BAA4B,cAAe,CAAC,KAC5C,sCAAC,mBAAkB,GAAK,OAAe,CACxC,CACD;AAAA,EACD,CACD;AAEF;;;AIrEA,YAAYC,aAAW;AACvB,SAAS,gBAAAC,qBAAoB;AAC7B,SAAS,cAAAC,mBAAkB;AAC3B,SAAS,uBAAuB;AAEhC,SAAS,cAAcC,kBAAgB;AACvC,SAAS,aAAa,eAAAC,cAAa,WAAAC,UAAS,WAAAC,UAAS,iBAAAC,sBAAqB;AAC1E,SAAS,MAAAC,YAAU;;;ACNnB,SAAS,cAAcC,WAAU,cAAcC,iBAAgB;AAC/D,SAAS,oBAAAC,yBAAwB;AACjC,SAAS,MAAAC,YAAU;AAgBZ,SAAS,mBAAoB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAwC;AACvC,QAAM,mBAAmB,uBAAwBC,UAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA,QAAM,0BAA0B,cAAc,iBAAiB,MAAO,WAAY,IAAI;AACtF,QAAM,wBAAwB,OAAO,OAAQ,iBAAiB,KAAM,EAAE;AAAA,IACrE,CAAE,SAAU,KAAK,cAAc,aAAa,KAAK,YAAY,WAAW,SAAS;AAAA,EAClF;AAEA,QAAM,EAAE,OAAO,WAAW,QAAQ,WAAW,IAAI,EAAE,GAAG,iBAAiB;AAEvE,QAAM,EAAE,QAAQ,eAAe,eAAe,IAAI;AAAA,IACjD;AAAA,IACA,WAAW,yBAAyB;AAAA,EACrC;AAEA,QAAM,kBAAkB;AAAA,IACvB,aAAa,yBAAyB,eAAeC,kBAAkB,MAAO;AAAA,IAC9E;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,EACV;AAEA,QAAM,EAAE,OAAO,wBAAwB,QAAQ,wBAAwB,IAAI,YAAa;AAAA,IACvF,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,eAAe;AAAA,EAChB,CAAE;AAEF,QAAM,QAAQ;AAAA,IACb,GAAG;AAAA,IACH,CAAE,gBAAgB,WAAY,GAAG;AAAA,EAClC;AAEA,QAAM,SAAS;AAAA,IACd,OAAO;AAAA,MACN,GAAG,wBAAwB;AAAA,MAC3B,CAAE,cAAe,GAAG,iBAAkB,yBAAyB,gBAAgB,eAAgB;AAAA,IAChG;AAAA,IACA,OAAO,wBAAwB,MAAM,SAAU,cAAe,IAC3D,wBAAwB,QACxB,CAAE,GAAG,wBAAwB,OAAO,cAAe;AAAA,EACvD;AAEA,QAAM,mBAAmB,2BAA2B,wBAAwB,YAAY;AAExF,MAAK,kBAAmB;AACvB,WAAO,MAAO,wBAAwB,OAAQ,IAAI;AAAA,MACjD;AAAA,MACA,wBAAwB;AAAA,MACxB;AAAA,IACD;AAAA,EACD;AAEA,EAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB;AAAA,QACA;AAAA,MACD;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AACR;AAIA,SAAS,iBAAkB,QAAsC,SAA6C;AAC7G,MAAK,CAAE,SAAU;AAEhB,QAAK,OAAO,MAAM,SAAS,GAAI;AAC9B,aAAO,EAAE,QAAQ,gBAAgB,OAAO,MAAO,CAAE,EAAE;AAAA,IACpD;AAGA,WAAO,YAAa,MAAO;AAAA,EAC5B;AAEA,MAAK,CAAE,OAAO,MAAO,OAAQ,GAAI;AAEhC,WAAO,YAAa,QAAQ,OAAQ;AAAA,EACrC;AAGA,SAAO,EAAE,QAAQ,gBAAgB,QAAQ;AAC1C;AAEA,SAAS,YAAa,QAAsC,SAA8C;AACzG,QAAM,iBAAiB,WAAWD,kBAAkB,OAAQ;AAC5D,QAAM,gBAAgB;AAAA,IACrB,GAAG;AAAA,IACH,OAAO;AAAA,MACN,GAAG,OAAO;AAAA,MACV,CAAE,cAAe,GAAG;AAAA,QACnB,IAAI;AAAA,QACJ,OAAOE,KAAI,WAAW,WAAY;AAAA,QAClC,OAAO,CAAC;AAAA,MACT;AAAA,IACD;AAAA,IACA,OAAO,CAAE,GAAG,OAAO,OAAO,cAAe;AAAA,EAC1C;AAEA,SAAO,EAAE,QAAQ,eAAe,eAAe;AAChD;AAEA,SAAS,iBACR,QACA,SACA,iBACwB;AACxB,QAAM,QAA+B,EAAE,GAAG,OAAO,MAAO,OAAQ,EAAE;AAElE,MAAK,CAAE,MAAM,MAAM,SAAU,gBAAgB,WAAY,GAAI;AAC5D,UAAM,QAAQ,CAAE,GAAG,MAAM,OAAO,gBAAgB,WAAY;AAAA,EAC7D;AAEA,SAAO;AACR;AAEA,SAAS,oBACR,QACA,SACA,iBACwB;AACxB,QAAM,QAAQ,EAAE,GAAG,OAAO,MAAO,OAAQ,EAAE;AAE3C,MAAK,OAAQ;AACZ,UAAM,QAAQ,MAAM,MAAM,OAAQ,CAAE,QAAS,QAAQ,gBAAgB,WAAY;AAAA,EAClF;AAEA,SAAO;AACR;AAEA,SAAS,YAAa;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AACD,GAA+E;AAC9E,QAAM,WAAW,OAAO;AAAA,IACvB,OAAO,QAAS,KAAM,EAAE,OAAQ,CAAE,CAAE,EAAE,IAAK,MAAO,CAAE,cAAc,SAAU,IAAK,CAAE;AAAA,EACpF;AAEA,QAAM,uBAAuB,cAAc,IAAK,CAAE,SAAU,KAAK,WAAY;AAE7E,QAAM,gBAAgB,OAAO;AAAA,IAC5B,OAAO,QAAS,OAAO,KAAM,EAAE,IAAK,CAAE,CAAE,SAAS,KAAM,MAA0C;AAAA,MAChG;AAAA,MACA;AAAA,QACC,GAAG;AAAA,QACH,OAAO,MAAM,MAAM,OAAQ,CAAE,SAAU,CAAE,qBAAqB,SAAU,IAAK,CAAE;AAAA,MAChF;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACP,OAAO;AAAA,MACP,OAAO,OAAO,MAAM,OAAQ,CAAE,YAAa,CAAE,qBAAqB,SAAU,OAAQ,CAAE;AAAA,IACvF;AAAA,EACD;AACD;;;ACvMA,YAAYC,aAAW;AACvB,SAAS,kBAAkB;AAC3B,SAAS,WAAW,gBAAgB;AACpC,SAAS,OAAAC,MAAK,UAAAC,eAAc;AAC5B,SAAS,MAAAC,YAAU;AAEnB,IAAM,OAAO;AAEb,IAAM,gBAAgBD,QAAQD,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAYvB,CAAE,EAAE,MAAM,MAAO,MAAM,QAAQ,QAAQ,YAAa;AAAA,YAClD,CAAE,EAAE,MAAM,MAAO,MAAM,QAAQ,QAAQ,YAAa;AAAA;AAAA;AAAA;AAKjE,IAAM,UAAUC,QAAQD,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAQT,CAAE,EAAE,MAAM,MAAO,MAAM,QAAS,GAAI,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAYlC,CAAE,EAAE,MAAM,MAAO,MAAM,QAAQ,QAAQ,IAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsB5D,IAAM,YAAY,WAAqC,CAAE,EAAE,QAAQ,eAAe,GAAG,MAAM,GAAG,QACpG,sCAAC,WAAQ,KAAc,GAAG,OAAQ,WAAY,UAAU,gBAAgB,aAAa,MACpF;AAAA,EAAC;AAAA;AAAA,IACA,WAAU;AAAA,IACV,cACC,gBAAgBE,KAAI,wBAAwB,WAAY,IAAIA,KAAI,yBAAyB,WAAY;AAAA;AAAA,EAGpG,gBAAgB,sCAAC,aAAU,UAAW,MAAO,IAAK,sCAAC,YAAS,UAAW,MAAO;AACjF,CACD,CACC;;;AC/EF,YAAYC,aAAW;AACvB,SAAS,YAAAC,iBAAgB;AACzB,SAAS,QAAAC,OAAM,gBAAAC,qBAAoB;AACnC,SAAS,UAAAC,SAAQ,aAAAC,YAAW,QAAAC,OAAM,QAAQ,SAAAC,SAAO,aAAAC,YAAW,cAAAC,mBAAkB;AAC9E,SAAS,MAAAC,YAAU;AAInB,IAAMC,QAAO;AAEb,IAAM,gBAAgB,EAAE,OAAO,MAAM,OAAOD,KAAI,WAAW,WAAY,EAAE;AAQlE,SAAS,oBAAqB,EAAE,UAAU,QAAQ,aAAa,GAAW;AAChF,QAAM,CAAE,WAAW,YAAa,IAAIT,UAA2B,cAAc,SAAS,IAAK;AAC3F,QAAM,CAAE,OAAO,QAAS,IAAIA,UAA2B,cAAc,WAAW,SAAU,CAAE,GAAG,SAAS,IAAK;AAE7G,QAAM,OAAOS,KAAI,QAAQ,WAAY;AACrC,QAAM,YAAYA,KAAI,cAAc,WAAY;AAEhD,QAAM,WAAW,iBAAiB;AAElC,QAAM,QAAQ,WAAWA,KAAI,uBAAuB,WAAY,IAAIA,KAAI,mBAAmB,WAAY;AACvG,QAAM,WAAW,WAAWA,KAAI,UAAU,WAAY,IAAIA,KAAI,UAAU,WAAY;AAEpF,SACC,sCAACR,OAAA,EAAK,UAAW,MAAM,SAAU,EAAE,OAAO,aAAa,IAAI,MAAM,CAAE,KAClE,sCAACK,SAAA,EAAM,YAAW,SAAQ,OAAM,WAC/B;AAAA,IAACA;AAAA,IAAA;AAAA,MACA,WAAU;AAAA,MACV,YAAW;AAAA,MACX,IAAK;AAAA,MACL,IAAK;AAAA,MACL,IAAK,EAAE,WAAW,KAAK,cAAc,aAAa,aAAa,WAAW,OAAO,QAAQ,IAAI,IAAI;AAAA;AAAA,IAEjG,sCAACE,aAAA,EAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,gBAAgB,YAAY,OAAO,YAAY,EAAE,KAC1F,KACH;AAAA,EACD,GACA,sCAACH,OAAA,EAAK,WAAS,MAAC,KAAM,MAAO,YAAW,SAAQ,IAAK,KAAM,IAAK,OAC/D,sCAACA,OAAA,EAAK,MAAI,MAAC,IAAK,MACf,sCAACD,YAAA,EAAU,MAAK,UAAS,IAAM,CAChC,GACA,sCAACC,OAAA,EAAK,MAAI,MAAC,IAAK,MACf;AAAA,IAACE;AAAA,IAAA;AAAA,MACA;AAAA,MACA,MAAOG;AAAA,MACP,WAAS;AAAA,MACT,aAAcD,KAAI,eAAe,WAAY;AAAA,MAC7C,OAAQ,aAAa;AAAA,MACrB,UAAW,CAAE,MAA8C,aAAc,EAAE,OAAO,KAAM;AAAA;AAAA,EACzF,CACD,CACD,GACA,sCAACJ,OAAA,EAAK,WAAS,MAAC,KAAM,MAAO,YAAW,SAAQ,IAAK,KAAM,IAAK,OAC/D,sCAACA,OAAA,EAAK,MAAI,MAAC,IAAK,MACf,sCAACD,YAAA,EAAU,MAAK,UAAS,SAAW,CACrC,GACA,sCAACC,OAAA,EAAK,MAAI,MAAC,IAAK,MACf;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,MAAOK;AAAA,MACP,WAAS;AAAA,MACT,OAAQ,SAAS;AAAA,MACjB,UAAW;AAAA,MACX,cAAY;AAAA,MACZ,aAAc,CAAE,kBAAkC;AACjD,YAAK,CAAE,iBAAiB,kBAAkB,IAAK;AAC9C,gBAAM,CAAE,aAAa,aAAc,IAAI,UAAU,CAAC;AAElD,iBAAO,WAAW;AAAA,QACnB;AAEA,eAAO,QAAQ,KAAM,CAAE,EAAE,MAAM,MAAO,UAAU,aAAc,GAAG,SAAS;AAAA,MAC3E;AAAA;AAAA,KAEI,UAAU,CAAE,aAAc,GAAI,IAAK,CAAE,EAAE,OAAO,YAAY,GAAG,MAAM,MACtE,sCAACR,eAAA,EAAa,KAAM,MAAM,OAAU,GAAG,OAAQ,OAAQ,MAAM,SAAS,MACnE,UACH,CACC;AAAA,EACH,CACD,CACD,GACA,sCAACI,SAAA,EAAM,WAAU,OAAM,gBAAe,YAAW,WAAU,OAAM,IAAK,KAAM,IAAK,GAAI,IAAK,OACzF,sCAACH,SAAA,EAAO,MAAK,UAAS,UAAW,CAAE,WAAY,SAAQ,aAAY,OAAM,WAAU,MAAK,WACrF,QACH,CACD,CACD,CACD;AAEF;;;ACjGA,SAAS,cAAcQ,iBAAgB;AAKhC,SAAS,mBAAoB;AAAA,EACnC;AAAA,EACA;AACD,GAGiC;AAChC,QAAM,mBAAmB,uBAAwBC,UAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB,WAAO;AAAA,EACR;AAEA,SAAO,iBAAiB,MAAO,WAAY;AAC5C;;;AJDA,IAAM,iBAAiB,CAAE,UAAU,YAAa;AAEzC,SAAS,2BAA2B;AAC1C,QAAM,EAAE,KAAK,IAAIC,cAAa;AAC9B,QAAM,cAAc,yBAA0BC,WAAS,CAAE;AAEzD,MAAK,CAAE,cAAe,IAAK,KAAK,CAAE,aAAc;AAC/C,WAAO;AAAA,EACR;AAEA,QAAM,mBAAmB,uBAAwBA,WAAS,GAAG,WAAY;AAEzE,SAAO,sCAACC,UAAA,EAAQ,aAA4B,kBAAsC;AACnF;AAMO,SAASA,SAAS,EAAE,aAAa,iBAAiB,GAAW;AACnE,QAAM;AAAA,IACL,SAAS,EAAE,IAAI,UAAU;AAAA,IACzB;AAAA,EACD,IAAIC,YAAW;AACf,QAAM,EAAE,OAAO,MAAM,SAAS,IAAIH,cAAa;AAE/C,QAAM,0BAA0B,wBAAwB;AACxD,QAAM,EAAE,OAAO,2BAA2B,UAAU,oBAAoB,IAAIA;AAAA,IAC3E;AAAA,EACD;AAMA,QAAM,mBAAmB,6BAA6B;AAEtD,QAAM,aAAaI,eAAe;AAAA,IACjC,SAAS;AAAA,EACV,CAAE;AAEF,QAAM,eAAeC,aAAa,UAAW;AAC7C,QAAM,eAAe,YAAa,UAAW;AAE7C,QAAM,EAAE,OAAO,IAAI,gBAAgB,IAAK,YAAY,GAAI,KAAK,EAAE,QAAQ,SAAS;AAEhF,QAAM,eAAe,CAAE,EAAE,OAAO,MAAM,MAAgD;AACrF,UAAM,cAAc,CAAE,mBAAmB,SAAS,SAAS,UAAU,kBAAkB,gBAAgB,CAAC;AAExG,UAAM,wBAAwB,mBAAoB;AAAA,MACjD;AAAA,MACA,aAAa,kBAAkB,gBAAgB;AAAA,MAC/C;AAAA,MACA;AAAA,MACA,SAAS;AAAA,MACT,SAAS;AAAA,MACT,QAAQ,UAAU;AAAA,MAClB,YAAY,YAAY;AAAA,MACxB;AAAA,IACD,CAAE;AAEF,QAAK,CAAE,oBAAoB,uBAAwB;AAClD,0BAAqB;AAAA,QACpB,cAAc,sBAAsB;AAAA,QACpC,cAAc;AAAA,MACf,CAAE;AAAA,IACH;AAEA,eAAW,MAAM;AAAA,EAClB;AAEA,QAAM,oBAAoB,mBACvB,mBAAoB,EAAE,aAAa,aAAa,iBAAiB,aAAa,CAAE,IAChF;AAEH,SACC,8DACC,sCAACC,UAAA,EAAQ,WAAU,OAAM,OAAQC,KAAI,qBAAqB,WAAY,KACrE,sCAAC,aAAY,GAAG,cAAe,QAAS,CAAC,CAAE,aAAa,MAAO,eAAgB,CAAC,CAAE,kBAAmB,CACtG,GACA;AAAA,IAACC;AAAA,IAAA;AAAA,MACA,mBAAiB;AAAA,MACjB,cAAe;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA,iBAAkB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA,YAAa;AAAA,QACZ,IAAI,EAAE,IAAI,IAAI;AAAA,MACf;AAAA,MACE,GAAG;AAAA;AAAA,IAEL;AAAA,MAAC;AAAA;AAAA,QACA,UAAW;AAAA,QACX,QAAS,kBAAkB,OAAO,MAAM,IAAK,CAAE,aAAe;AAAA,UAC7D,OAAO;AAAA,UACP,OAAO,iBAAiB,OAAO,MAAO,OAAQ,EAAE;AAAA,QACjD,EAAI;AAAA,QACJ,cAAe;AAAA;AAAA,IAChB;AAAA,EACD,CACD;AAEF;AAEA,SAAS,cAAe,MAAe;AACtC,SAAO,CAAE,eAAe,SAAU,IAAK;AACxC;;;AKhIA,SAAS,kBAAAC,uBAAsB;;;ACA/B,SAAS,gBAAAC,qBAAwC;AACjD,SAAS,sBAAsB;AAC/B,SAAS,KAAAC,UAAS;AAIlB,IAAM,cAAc;AAAA,EACnB,YAAYC,GACV,OAAO,EACP;AAAA,IACA;AAAA,EAED;AAAA,EACD,gBAAgBA,GACd,OAAO,EACP,SAAU,6FAA8F;AAC3G;AAEA,IAAM,eAAe;AAAA,EACpB,SAASA,GAAE,OAAO,EAAE,SAAS,EAAE,SAAU,mDAAoD;AAAA,EAC7F,eAAeA,GACb,OAAO,EACP,SAAS,EACT,SAAU,gFAAiF;AAC9F;AAEO,IAAM,sBAAsB,CAAE,eAAe,aAAa,QAAS;AACnE,IAAM,iBAAiB;AAAA,EAC7B,mBAAmB;AAAA,EACnB,0BAA0B,8CAA+C,oBAAoB,KAAM,IAAK,CAAE;AAAA,EAC1G,mBAAmB;AACpB;AAEO,IAAM,wBAAwB,OAAQ,WAA0D;AACtG,QAAM,EAAE,YAAY,WAAW,gBAAgB,cAAc,IAAI;AAEjE,QAAM,YAAYC,cAAc,SAAU;AAE1C,MAAK,CAAE,WAAY;AAClB,UAAM,IAAI,MAAO,eAAe,iBAAkB;AAAA,EACnD;AAEA,QAAM,SAAS,UAAU,MAAM,IAAK,QAAS;AAE7C,MAAK,CAAE,oBAAoB,SAAU,MAAO,GAAI;AAC/C,UAAM,IAAI,MAAO,eAAe,wBAAyB;AAAA,EAC1D;AAEA,QAAM,UAAU,UAAU,MAAM,OAAQ,EAAE,QAAQ,CAAE,SAAU,EAAE,CAAE;AAElE,MAAK,SAAS,UAAW;AACxB,UAAM,IAAI,MAAO,eAAe,iBAAkB;AAAA,EACnD;AAEA,QAAM,MAAM,2BAA4B,eAAe,SAAS,IAAK;AAErE,SAAO;AAAA,IACN,QAAQ;AAAA,IACR,SAAS,cAAe,aAAc;AAAA,IACtC,eAAe;AAAA,EAChB;AACD;AAEO,IAAM,0BAA0B,MAAM;AAC5C,SAAO,eAAgB,YAAa,EAAE,QAAS;AAAA,IAC9C,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8DAUgD,oBAAoB,KAAM,IAAK,CAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAW9F,SAAS;AAAA,EACV,CAAE;AACH;;;ADvFO,SAAS,UAAU;AACzB,QAAM,EAAE,kBAAkB,IAAIC,gBAAgB,YAAa;AAE3D;AAAA,IACC;AAAA;AAAA,EAED;AAEA,0BAAwB;AACzB;;;AEbA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,cAAcC,iBAAgB;AAIhC,SAAS,gBAAgB;AAC/B,EAAAC,WAAW,MAAM;AAChB,IAAAC,UAAU,eAAe,CAAE;AAAA,EAC5B,GAAG,CAAC,CAAE;AAEN,SAAO;AACR;;;ACXA,SAAS,cAAcC,iBAAgB;AAKhC,SAAS,sBAAuB,IAAa;AACnD,YAAU,+BAAgC,EAAG;AAC7C,EAAAC,UAAU,MAAM,QAAQ,aAAc,EAAE,GAAG,CAAE,CAAE;AAChD;;;ACRA,SAAS,4BAA4B;AACrC,SAAS,cAAcC,YAAU,2BAA2B,6BAA6B;AAIlF,IAAM,2BAA2B,qBAAsB;AAAA,EAC7D,KAAK;AAAA,EACL,UAAU;AAAA,EACV,WAAW,CAAE,OACZ;AAAA,IACC,CAAE,UAAW,MAAO,UAAW;AAAA,IAC/B,MAAM;AACL,SAAG;AAAA,IACJ;AAAA,EACD;AAAA,EACD,SAAS;AAAA,IACR,KAAK,MAAM;AACV,aAAO,iBAAkBC,WAAS,CAAE;AAAA,IACrC;AAAA,IACA,KAAK,CAAE,OAAQ;AACd,aAAO,iBAAkBA,WAAS,CAAE,EAAE,KAAM,CAAE,UAAW,MAAM,OAAO,EAAG,KAAK;AAAA,IAC/E;AAAA,EACD;AACD,CAAE;;;ACvBF,SAAS,6BAAiD;AAC1D,SAAS,cAAcC,WAAU,cAAcC,kBAAgB;AAM/D,eAAsB,2BAA4B;AAAA,EACjD;AAAA,EACA;AACD,GAGI;AACH,QAAM,wBAAwB,4BAA6BC,WAAS,CAAE;AAEtE,MAAK,CAAE,sBAAsB,QAAS;AACrC;AAAA,EACD;AAEA,MAAI;AACH,UAAM,mBAAmB,MAAM,iBAAkB,uBAAuB,MAAO;AAE/E,6BAA0B,UAAU,gBAAiB;AAErD,IAAAC;AAAA,MACC,MAAM,QAAQ;AAAA,QACb,sBAAsB,IAAK,CAAE,eAAiB;AAAA,UAC7C,IAAI,iBAAiB,IAAK,UAAU,GAAI;AAAA,UACxC,MAAM,UAAU;AAAA,UAChB,KAAK,UAAU;AAAA,QAChB,EAAI;AAAA,MACL;AAAA,IACD;AACA,IAAAA,UAAU,MAAM,QAAQ,iBAAiB,CAAE;AAAA,EAC5C,SAAU,OAAQ;AACjB,UAAM,IAAI,MAAO,gEAAiE,KAAM,EAAG;AAAA,EAC5F;AACD;AAEA,eAAe,iBACd,YACA,QACmC;AACnC,QAAM,WAAW,MAAM,UAAU,OAAQ;AAAA,IACxC;AAAA,IACA,OAAO,WAAW,IAAK,CAAE,eAAiB;AAAA,MACzC,KAAK,UAAU;AAAA,MACf,OAAO,UAAU;AAAA,MACjB,UAAU,UAAU;AAAA,IACrB,EAAI;AAAA,EACL,CAAE;AAEF,QAAM,MAAM,oBAAI,IAAsB;AAEtC,SAAO,QAAS,QAAS,EAAE,QAAS,CAAE,CAAE,KAAK,KAAM,MAAO;AACzD,QAAI,IAAK,KAAK,KAAM;AAAA,EACrB,CAAE;AAEF,SAAO;AACR;AAEA,SAAS,yBAA0B,UAA2B,kBAAgD;AAC7G,WAAS,QAAS,CAAE,YAAa;AAChC,UAAM,EAAE,cAAc,eAAe,IAAI,oBAAqB,SAAS,gBAAiB;AACxF,QAAK,cAAe;AACnB,+BAA0B,QAAQ,IAAI,cAAe;AAAA,IACtD;AAEA,QAAK,QAAQ,UAAW;AACvB,+BAA0B,QAAQ,UAAU,gBAAiB;AAAA,IAC9D;AAAA,EACD,CAAE;AACH;AAEA,SAAS,oBACR,SACA,kBACiG;AACjG,MAAK,QAAQ,eAAe,eAAgB;AAC3C,UAAM,qBAAuB,QAAQ,UAAU,oBAC5C,OAAO,aAAa;AAEvB,QAAK,sBAAsB,iBAAiB,IAAK,kBAAmB,GAAI;AACvE,aAAO,EAAE,cAAc,MAAM,gBAAgB,iBAAiB,IAAK,kBAAmB,EAAY;AAAA,IACnG;AAAA,EACD;AACA,SAAO,EAAE,cAAc,OAAO,gBAAgB,KAAK;AACpD;AAEA,SAAS,yBAA0B,WAAmB,aAA4B;AACjF,wBAAuB;AAAA,IACtB,IAAI;AAAA,IACJ,OAAO;AAAA,MACN,oBAAoB;AAAA,QACnB,QAAQ;AAAA,QACR,OAAO;AAAA,UACN,cAAc,EAAE,QAAQ,UAAU,OAAO,YAAY;AAAA,QACtD;AAAA,MACD;AAAA,IACD;AAAA,IACA,aAAa;AAAA,EACd,CAAE;AACH;;;ACrGA,SAAS,cAAcC,kBAAgB;AAKhC,IAAM,iDAAiD,CAAE;AAAA,EAC/D;AACD,MAEO;AACN,QAAM,kBAAkB,UAAU;AAElC,MAAK,CAAE,mBAAmB,gBAAgB,OAAO,SAAS,yBAA0B;AACnF;AAAA,EACD;AAEA,QAAM,mBAAmB,uBAAwBC,WAAS,GAAG,gBAAgB,EAAG;AAChF,MAAK,kBAAmB;AACvB,cAAU,SAAS,IAAK,qBAAqB,gBAAiB;AAAA,EAC/D;AACD;;;ACtBA,SAAgC,cAAc;AAC9C,SAAS,cAAcC,kBAAgB;AAKvC,IAAM,qBAAqB,CAAE,aAAyC;AAAA,EACrE,MAAM;AAAA,EACN,SAAS,iCAAkC,OAAQ;AAAA,EACnD,IAAI;AACL;AAEA,IAAM,sBAAsB,CAAE,aAAyC;AAAA,EACtE,MAAM;AAAA,EACN,SAAS,qCAAsC,OAAQ;AAAA,EACvD,IAAI;AACL;AAEO,IAAM,oCAAoC,YAAY;AAC5D,MAAI;AACH,UAAM,qBAAqB,yBAA0BC,WAAS,CAAE;AAEhE,QAAK,CAAE,mBAAmB,QAAS;AAClC;AAAA,IACD;AAEA,UAAM,SAAS,MAAM,UAAU;AAAA,MAC9B,mBAAmB,IAAK,CAAE,cAAe,UAAU,EAAG;AAAA,IACvD;AAEA,UAAM,YAAY,OAAO,UAAU,KAAM,IAAK;AAC9C,UAAM,aAAa,OAAO,WAAW,KAAM,IAAK;AAEhD,QAAK,WAAY;AAChB,aAAQ,mBAAoB,SAAU,CAAE;AAAA,IACzC;AAEA,QAAK,YAAa;AACjB,aAAQ,oBAAqB,UAAW,CAAE;AAAA,IAC3C;AAAA,EACD,SAAU,OAAQ;AACjB,UAAM,IAAI,MAAO,yCAA0C,KAAM,EAAG;AAAA,EACrE;AACD;;;AC3CA,SAAS,mBAAAC,wBAAuB;AAahC,eAAsB,2BAA4B,EAAE,QAAQ,SAAS,GAAa;AACjF,MAAK,WAAW,WAAY;AAC3B;AAAA,EACD;AAEA,QAAM,eAAe,MAAM,gBAAiB,QAAS;AAErD,QAAM,wBAAwB,MAAM,QAAQ,IAAK,aAAa,IAAK,wBAAyB,CAAE;AAE9F,QAAM,WAAW,sBACf,OAAQ,CAAE,aAAc,CAAC,CAAE,QAAS,EACpC,OAAQC,gBAAgB,EACxB,IAAK,CAAE,aAAc,SAAS,EAAG;AAEnC,MAAK,SAAS,WAAW,GAAI;AAC5B;AAAA,EACD;AAEA,QAAM,UAAU,eAAgB,UAAU,SAAU;AAEpD,WAAS,QAAS,CAAE,OAAQ,gCAAiC,EAAG,CAAE;AACnE;;;ACbO,IAAM,aAAa,CAAE,EAAE,WAAW,OAAO,MAAgB;AAC/D,QAAM,WAAW,UAAU,MAAM,IAAK,UAAW,GAAG,OAAO,KAAK,CAAC;AAEjE,SAAO,QAAQ,IAAK;AAAA,IACnB,kCAAkC;AAAA,IAClC,2BAA4B,EAAE,UAAU,OAAO,CAAE;AAAA,IACjD,2BAA4B,EAAE,UAAU,OAAO,CAAE;AAAA,IACjD,+CAAgD,EAAE,UAAU,CAAE;AAAA,EAC/D,CAAE;AACH;;;AhEcO,SAAS,OAAO;AACtB,mBAAiB,SAAU,wBAAyB;AAEpD,gBAAe,KAAM;AAErB;AAAA,IAAqB;AAAA,IAAM,CAAE,YAC5B,oBAAqB,EAAE,GAAG,SAAS,mBAAmB,mBAAmB,CAAE;AAAA,EAC5E;AAEA,mBAAkB,cAAc,0BAA0B,CAAE,SAAU;AACrE,UAAM,WAAW,qBAAqB;AACtC,QAAK,SAAS,OAAO,SAAS,yBAA0B;AACvD,WAAK,OAAO;AAAA,IACb;AACA,WAAO;AAAA,EACR,CAAE;AAEF,mBAAkB,SAAS,gBAAgB,aAAc;AAEzD,EAAE,OAAsC,gBAAgB,eAAe;AAEvE,YAAW;AAAA,IACV,IAAI;AAAA,IACJ,OAAOC,KAAI,cAAc,WAAY;AAAA,IACrC,WAAW;AAAA,EACZ,CAAE;AAEF,gBAAe;AAAA,IACd,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,kBAAiB;AAAA,IAChB,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,gBAAe;AAAA,IACd,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,2BAA0B;AAAA,IACzB,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,mBAAkB,SAAS,mCAAmC,YAAY;AACzE,UAAM,EAAE,IAAI,OAAO,IAAI,qBAAqB;AAE5C,QAAK,IAAK;AACT,4BAAuB,EAAG;AAAA,IAC3B;AAEA,UAAM,qBAAwB,QAAQ,YAAiC,CAAC,CAAE;AAAA,EAC3E,CAAE;AAEF,yBAAwB;AAAA,IACvB,WAAW,WAAW;AAAA,IACtB,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,EACZ,CAAE;AAEF,6BAA4B;AAAA,IAC3B,WAAW;AAAA,IACX,WAAW,CAAE,EAAE,MAAM,MAAO,iCAAiC,QAAS,KAAM;AAAA,EAC7E,CAAE;AAEF,kCAAiC;AAAA,IAChC,IAAI;AAAA,IACJ,WAAW,CAAE,GAAG,gBAAiB,YAAY,QAAQ;AAAA,IACrD,WAAW;AAAA,EACZ,CAAE;AAEF,+BAA6B,SAAU,sBAAsB,4BAA6B;AAC1F,+BAA6B,SAAU,eAAe,+BAAgC;AAEtF,UAAQ;AACT;","names":["__","createTransformer","React","getV1DocumentsManager","useSelector","Box","__","getV1DocumentsManager","getV1DocumentsManager","useSelector","useSelector","useSelector","Box","__","getV1DocumentsManager","React","React","Box","Stack","__","React","Stack","Box","__","React","ComponentsIcon","Box","Divider","Stack","Typography","__","useSelector","useSelector","React","Box","IconButton","Stack","Typography","__","dispatch","setDocumentModifiedStatus","__","getState","getState","__","getState","getState","dispatch","getState","getState","dispatch","setDocumentModifiedStatus","Stack","Box","Typography","IconButton","__","React","Box","ListItemButton","Stack","Stack","Typography","__","Divider","ComponentsIcon","Box","React","useEffect","useMemo","useRef","useState","ThemeProvider","Stack","TextField","Typography","__","runCommand","dispatch","dispatch","runCommand","__","useState","useRef","useEffect","__","ThemeProvider","validateForm","useMemo","Stack","Typography","TextField","React","useEffect","getV1DocumentsManager","commandEndEvent","useSelector","setDocumentModifiedStatus","getStore","dispatch","getStore","React","useEffect","__","useEffect","useState","useEffect","__","useSelector","getV1DocumentsManager","useEffect","commandEndEvent","React","Box","Button","Icon","Stack","Typography","__","React","ComponentsIcon","PencilIcon","getState","IconButton","Stack","Tooltip","__","createPropUtils","z","createPropUtils","z","z","createPropUtils","z","createPropUtils","z","React","ComponentPropListIcon","Button","Stack","Typography","__","EmptyState","React","ListItemButton","Stack","getState","__","Stack","ComponentsIcon","Tooltip","IconButton","PencilIcon","EmptyState","React","useElement","getState","createPropUtils","z","React","createContext","useContext","dispatch","getState","getState","dispatch","useElement","getState","React","useBoundProp","useElement","getState","bindTrigger","Popover","Tooltip","usePopupState","__","dispatch","getState","generateUniqueId","__","getState","generateUniqueId","dispatch","__","React","Box","styled","__","React","useState","Form","MenuListItem","Button","FormLabel","Grid","Stack","TextField","Typography","__","SIZE","getState","getState","useBoundProp","getState","Content","useElement","usePopupState","bindTrigger","Tooltip","__","Popover","getMCPByDomain","getContainer","z","z","getContainer","getMCPByDomain","useEffect","dispatch","useEffect","dispatch","dispatch","dispatch","getState","getState","dispatch","getState","getState","dispatch","getState","getState","getState","getState","isDocumentDirty","isDocumentDirty","__"]}