@elementor/editor-components 3.35.0-389 → 3.35.0-391

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.
Files changed (29) hide show
  1. package/dist/index.js +407 -173
  2. package/dist/index.js.map +1 -1
  3. package/dist/index.mjs +381 -143
  4. package/dist/index.mjs.map +1 -1
  5. package/package.json +22 -22
  6. package/src/component-instance-transformer.ts +2 -2
  7. package/src/component-override-transformer.ts +2 -2
  8. package/src/components/component-properties-panel/component-properties-panel-content.tsx +4 -4
  9. package/src/components/control-label.tsx +15 -0
  10. package/src/components/instance-editing-panel/instance-editing-panel.tsx +27 -20
  11. package/src/components/instance-editing-panel/override-prop-control.tsx +207 -0
  12. package/src/components/instance-editing-panel/override-props-group.tsx +13 -7
  13. package/src/components/overridable-props/overridable-prop-control.tsx +23 -5
  14. package/src/components/overridable-props/overridable-prop-indicator.tsx +10 -6
  15. package/src/create-component-type.ts +4 -3
  16. package/src/hooks/regenerate-override-keys.ts +6 -4
  17. package/src/hooks/use-controls-by-widget-type.ts +40 -0
  18. package/src/prop-types/component-instance-override-prop-type.ts +0 -1
  19. package/src/prop-types/component-instance-overrides-prop-type.ts +5 -1
  20. package/src/prop-types/component-instance-prop-type.ts +2 -1
  21. package/src/store/actions/set-overridable-prop.ts +4 -1
  22. package/src/store/actions/update-overridable-prop-params.ts +58 -0
  23. package/src/store/actions/update-overridable-prop.ts +30 -38
  24. package/src/store/store.ts +8 -0
  25. package/src/sync/create-components-before-save.ts +9 -5
  26. package/src/types.ts +3 -20
  27. package/src/utils/get-component-ids.ts +11 -6
  28. package/src/utils/get-prop-type-for-component-override.ts +23 -0
  29. package/src/store/actions/update-overridable-prop-origin-value.ts +0 -37
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/component-instance-transformer.ts","../src/store/store.ts","../src/store/thunks.ts","../src/api.ts","../src/utils/component-document-data.ts","../src/component-overridable-transformer.ts","../src/component-override-transformer.ts","../src/components/component-panel-header/component-panel-header.tsx","../src/hooks/use-navigate-back.ts","../src/utils/switch-to-component.ts","../src/components/component-properties-panel/component-properties-panel.tsx","../src/components/component-properties-panel/component-properties-panel-content.tsx","../src/store/actions/add-overridable-group.ts","../src/store/actions/delete-overridable-group.ts","../src/store/utils/groups-transformers.ts","../src/store/actions/delete-overridable-prop.ts","../src/store/actions/reorder-group-props.ts","../src/store/actions/reorder-overridable-groups.ts","../src/store/actions/update-overridable-prop.ts","../src/components/component-panel-header/use-overridable-props.ts","../src/components/component-properties-panel/properties-empty-state.tsx","../src/components/components-tab/component-introduction.tsx","../src/components/component-properties-panel/properties-group.tsx","../src/components/component-properties-panel/property-item.tsx","../src/components/overridable-props/overridable-prop-form.tsx","../src/components/component-properties-panel/sortable.tsx","../src/components/component-properties-panel/use-current-editable-item.ts","../src/store/actions/rename-overridable-group.ts","../src/components/component-properties-panel/utils/validate-group-label.ts","../src/components/component-properties-panel/utils/generate-unique-label.ts","../src/components/component-panel-header/component-badge.tsx","../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/is-component-instance.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/utils/get-overridable-prop.ts","../src/hooks/regenerate-override-keys.ts","../src/mcp/index.ts","../src/mcp/save-as-component-tool.ts","../src/populate-store.ts","../src/store/actions/remove-component-styles.ts","../src/store/components-styles-provider.ts","../src/sync/create-components-before-save.ts","../src/sync/set-component-overridable-props-settings-before-save.ts","../src/sync/update-archived-component-before-save.ts","../src/sync/update-components-before-save.ts","../src/sync/before-save.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoLogic, injectIntoTop } from '@elementor/editor';\nimport {\n\ttype CreateTemplatedElementTypeOptions,\n\tregisterElementType,\n\tsettingsTransformersRegistry,\n} from '@elementor/editor-canvas';\nimport { getV1CurrentDocument } from '@elementor/editor-documents';\nimport {\n\tFIELD_TYPE,\n\tinjectIntoPanelHeaderTop,\n\tregisterControlReplacement,\n\tregisterEditingPanelReplacement,\n\tregisterFieldIndicator,\n} from '@elementor/editor-editing-panel';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { injectTab } from '@elementor/editor-elements-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __registerSlice as registerSlice } from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstanceTransformer } from './component-instance-transformer';\nimport { componentOverridableTransformer } from './component-overridable-transformer';\nimport { componentOverrideTransformer } from './component-override-transformer';\nimport { ComponentPanelHeader } from './components/component-panel-header/component-panel-header';\nimport { panel as componentPropertiesPanel } from './components/component-properties-panel/component-properties-panel';\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 { COMPONENT_WIDGET_TYPE, createComponentType } from './create-component-type';\nimport { initRegenerateOverrideKeys } from './hooks/regenerate-override-keys';\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\tregisterPanel( componentPropertiesPanel );\n\n\tregisterElementType( COMPONENT_WIDGET_TYPE, ( options: CreateTemplatedElementTypeOptions ) =>\n\t\tcreateComponentType( { ...options, showLockedByModal: openEditModeDialog } )\n\t);\n\n\tregisterDataHook( 'dependency', 'editor/documents/close', ( args ) => {\n\t\tconst document = getV1CurrentDocument();\n\t\tif ( document.config.type === COMPONENT_DOCUMENT_TYPE ) {\n\t\t\targs.mode = 'autosave';\n\t\t}\n\t\treturn true;\n\t} );\n\n\tregisterDataHook( 'after', 'preview/drop', onElementDrop );\n\n\t( window as unknown as ExtendedWindow ).elementorCommon.__beforeSave = beforeSave;\n\n\tinjectTab( {\n\t\tid: 'components',\n\t\tlabel: __( 'Components', 'elementor' ),\n\t\tcomponent: Components,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'create-component-popup',\n\t\tcomponent: CreateComponentForm,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'components-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'edit-component',\n\t\tcomponent: EditComponent,\n\t} );\n\n\tinjectIntoPanelHeaderTop( {\n\t\tid: 'component-panel-header',\n\t\tcomponent: ComponentPanelHeader,\n\t} );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\tconst { id, config } = getV1CurrentDocument();\n\n\t\tif ( id ) {\n\t\t\tremoveComponentStyles( id );\n\t\t}\n\n\t\tawait loadComponentsAssets( ( config?.elements as V1ElementData[] ) ?? [] );\n\t} );\n\n\tregisterFieldIndicator( {\n\t\tfieldType: FIELD_TYPE.SETTINGS,\n\t\tid: 'component-overridable-prop',\n\t\tpriority: 1,\n\t\tindicator: OverridablePropIndicator,\n\t} );\n\n\tregisterControlReplacement( {\n\t\tcomponent: OverridablePropControl,\n\t\tcondition: ( { value } ) => componentOverridablePropTypeUtil.isValid( value ),\n\t} );\n\n\tregisterEditingPanelReplacement( {\n\t\tid: 'component-instance-edit-panel',\n\t\tcondition: ( _, elementType ) => elementType.key === 'e-component',\n\t\tcomponent: InstanceEditingPanel,\n\t} );\n\n\tsettingsTransformersRegistry.register( 'component-instance', componentInstanceTransformer );\n\tsettingsTransformersRegistry.register( 'overridable', componentOverridableTransformer );\n\tsettingsTransformersRegistry.register( 'override', componentOverrideTransformer );\n\n\tinitRegenerateOverrideKeys();\n\n\tinitMcp();\n}\n","import { createTransformer, RenderContext } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectUnpublishedComponents } from './store/store';\nimport { type ComponentOverridePropValue } from './types';\nimport { getComponentDocumentData } from './utils/component-document-data';\n\ntype ComponentInstanceContext = {\n\toverrides?: Record< string, unknown >;\n};\n\nexport const componentInstanceContext = new RenderContext< ComponentInstanceContext >( 'component-instance', {\n\toverrides: {},\n} );\n\nexport const componentInstanceTransformer = createTransformer(\n\tasync ( {\n\t\tcomponent_id: id,\n\t\toverrides: overridesValue,\n\t}: {\n\t\tcomponent_id: number | string;\n\t\toverrides?: ComponentOverridePropValue[];\n\t} ) => {\n\t\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\t\tconst unpublishedComponent = unpublishedComponents.find( ( { uid } ) => uid === id );\n\n\t\tconst overrides = overridesValue?.reduce( ( acc, override ) => ( { ...acc, ...override } ), {} );\n\n\t\tif ( unpublishedComponent ) {\n\t\t\treturn {\n\t\t\t\telements: structuredClone( unpublishedComponent.elements ),\n\t\t\t\toverrides,\n\t\t\t};\n\t\t}\n\n\t\tif ( typeof id !== 'number' ) {\n\t\t\tthrow new Error( `Component ID \"${ id }\" not valid.` );\n\t\t}\n\n\t\tconst data = await getComponentDocumentData( id );\n\n\t\treturn {\n\t\t\telements: data?.elements ?? [],\n\t\t\toverrides,\n\t\t};\n\t}\n);\n","import { type V1Document } from '@elementor/editor-documents';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\t__useSelector as useSelector,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport {\n\ttype Component,\n\ttype ComponentId,\n\ttype OverridableProps,\n\ttype PublishedComponent,\n\ttype StylesDefinition,\n\ttype UnpublishedComponent,\n} from '../types';\nimport { loadComponents } from './thunks';\n\ntype GetComponentResponse = PublishedComponent[];\n\ntype Status = 'idle' | 'pending' | 'error';\n\ntype ComponentsState = {\n\tdata: PublishedComponent[];\n\tunpublishedData: UnpublishedComponent[];\n\tloadStatus: Status;\n\tstyles: StylesDefinition;\n\tcreatedThisSession: Component[ 'uid' ][];\n\tarchivedData: PublishedComponent[];\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n};\n\nexport type ComponentsSlice = SliceState< typeof slice >;\n\nexport type ComponentsPathItem = {\n\tinstanceId?: string;\n\tcomponentId: V1Document[ 'id' ];\n};\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\n\tcreatedThisSession: [],\n\tarchivedData: [],\n\tpath: [],\n\tcurrentComponentId: null,\n};\n\nexport const SLICE_NAME = 'components';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tadd: ( state, { payload }: PayloadAction< PublishedComponent | PublishedComponent[] > ) => {\n\t\t\tif ( Array.isArray( payload ) ) {\n\t\t\t\tstate.data = [ ...state.data, ...payload ];\n\t\t\t} else {\n\t\t\t\tstate.data.unshift( payload );\n\t\t\t}\n\t\t},\n\t\tload: ( state, { payload }: PayloadAction< PublishedComponent[] > ) => {\n\t\t\tstate.data = payload;\n\t\t},\n\t\taddUnpublished: ( state, { payload }: PayloadAction< UnpublishedComponent > ) => {\n\t\t\tstate.unpublishedData.unshift( payload );\n\t\t},\n\t\tresetUnpublished: ( state ) => {\n\t\t\tstate.unpublishedData = [];\n\t\t},\n\t\tremoveStyles( state, { payload }: PayloadAction< { id: ComponentId } > ) {\n\t\t\tconst { [ payload.id ]: _, ...rest } = state.styles;\n\n\t\t\tstate.styles = rest;\n\t\t},\n\t\taddStyles: ( state, { payload } ) => {\n\t\t\tstate.styles = { ...state.styles, ...payload };\n\t\t},\n\t\taddCreatedThisSession: ( state, { payload }: PayloadAction< string > ) => {\n\t\t\tstate.createdThisSession.push( payload );\n\t\t},\n\t\tarchive: ( state, { payload }: PayloadAction< number > ) => {\n\t\t\tstate.data = state.data.filter( ( component ) => {\n\t\t\t\tconst isArchived = component.id === payload;\n\t\t\t\tif ( isArchived ) {\n\t\t\t\t\tstate.archivedData.push( component );\n\t\t\t\t}\n\n\t\t\t\treturn ! isArchived;\n\t\t\t} );\n\t\t},\n\t\tsetCurrentComponentId: ( state, { payload }: PayloadAction< V1Document[ 'id' ] | null > ) => {\n\t\t\tstate.currentComponentId = payload;\n\t\t},\n\t\tsetPath: ( state, { payload }: PayloadAction< ComponentsPathItem[] > ) => {\n\t\t\tstate.path = payload;\n\t\t},\n\t\tsetOverridableProps: (\n\t\t\tstate,\n\t\t\t{ payload }: PayloadAction< { componentId: ComponentId; overridableProps: OverridableProps } >\n\t\t) => {\n\t\t\tconst component = state.data.find( ( comp ) => comp.id === payload.componentId );\n\n\t\t\tif ( ! component ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcomponent.overridableProps = payload.overridableProps;\n\t\t},\n\t},\n\textraReducers: ( builder ) => {\n\t\tbuilder.addCase( loadComponents.fulfilled, ( state, { payload }: PayloadAction< GetComponentResponse > ) => {\n\t\t\tstate.data = payload;\n\t\t\tstate.loadStatus = 'idle';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.pending, ( state ) => {\n\t\t\tstate.loadStatus = 'pending';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.rejected, ( state ) => {\n\t\t\tstate.loadStatus = 'error';\n\t\t} );\n\t},\n} );\n\nconst selectData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].data;\nconst selectArchivedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].archivedData;\nconst selectLoadStatus = ( state: ComponentsSlice ) => state[ SLICE_NAME ].loadStatus;\nconst selectStylesDefinitions = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nconst selectUnpublishedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].unpublishedData;\nconst getCreatedThisSession = ( state: ComponentsSlice ) => state[ SLICE_NAME ].createdThisSession;\nconst getPath = ( state: ComponentsSlice ) => state[ SLICE_NAME ].path;\nconst getCurrentComponentId = ( state: ComponentsSlice ) => state[ SLICE_NAME ].currentComponentId;\nexport const selectComponent = ( state: ComponentsSlice, componentId: ComponentId ) =>\n\tstate[ SLICE_NAME ].data.find( ( component ) => component.id === componentId );\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: PublishedComponent[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( {\n\t\t\tuid: item.uid,\n\t\t\tname: item.name,\n\t\t\toverridableProps: item.overridableProps,\n\t\t} ) ),\n\t\t...data,\n\t]\n);\nexport const selectUnpublishedComponents = createSelector(\n\tselectUnpublishedData,\n\t( unpublishedData: UnpublishedComponent[] ) => unpublishedData\n);\nexport const selectLoadIsPending = createSelector( selectLoadStatus, ( status ) => status === 'pending' );\nexport const selectLoadIsError = createSelector( selectLoadStatus, ( status ) => status === 'error' );\nexport const selectStyles = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nexport const selectFlatStyles = createSelector( selectStylesDefinitions, ( data ) => Object.values( data ).flat() );\nexport const selectCreatedThisSession = createSelector(\n\tgetCreatedThisSession,\n\t( createdThisSession ) => createdThisSession\n);\n\nconst DEFAULT_OVERRIDABLE_PROPS: OverridableProps = {\n\tprops: {},\n\tgroups: {\n\t\titems: {},\n\t\torder: [],\n\t},\n};\n\nexport const selectOverridableProps = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\tif ( ! component ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;\n\t}\n);\nexport const selectIsOverridablePropsLoaded = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\treturn !! component?.overridableProps;\n\t}\n);\nexport const selectPath = createSelector( getPath, ( path ) => path );\n\nexport const selectCurrentComponentId = createSelector(\n\tgetCurrentComponentId,\n\t( currentComponentId ) => currentComponentId\n);\n\nexport const useCurrentComponentId = () => {\n\treturn useSelector( selectCurrentComponentId );\n};\n\nexport const selectArchivedComponents = createSelector(\n\tselectArchivedData,\n\t( archivedData: PublishedComponent[] ) => archivedData\n);\n","import { __createAsyncThunk as createAsyncThunk } from '@elementor/store';\n\nimport { apiClient } from '../api';\n\nconst loadComponents = createAsyncThunk( 'components/load', async () => {\n\tconst response = await apiClient.get();\n\treturn response;\n} );\n\nexport { loadComponents };\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { ajax } from '@elementor/editor-v1-adapters';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type DocumentSaveStatus, type OverridableProps, type PublishedComponent } from './types';\n\nconst BASE_URL = 'elementor/v1/components';\n\nexport type ComponentItems = Array< {\n\tuid: string;\n\ttitle: string;\n\telements: V1ElementData[];\n\tsettings?: {\n\t\toverridable_props?: OverridableProps;\n\t};\n} >;\n\nexport type CreateComponentPayload = {\n\tstatus: DocumentSaveStatus;\n\titems: ComponentItems;\n};\n\ntype ComponentLockStatusResponse = {\n\tis_current_user_allow_to_edit: boolean;\n\tlocked_by: string;\n};\n\ntype GetComponentResponse = Array< PublishedComponent >;\n\nexport type CreateComponentResponse = Record< string, number >;\n\nexport type ValidateComponentsPayload = {\n\titems: ComponentItems;\n};\n\nexport type ValidateComponentsResponse = {\n\tcode: string;\n\tmessage: string;\n\tdata: {\n\t\tstatus: number;\n\t\tmeta: Record< string, unknown >;\n\t};\n};\n\nexport const getParams = ( id: number ) => ( {\n\taction: 'get_document_config',\n\tunique_id: `document-config-${ id }`,\n\tdata: { id },\n} );\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< HttpResponse< GetComponentResponse > >( `${ BASE_URL }` )\n\t\t\t.then( ( res ) => res.data.data ),\n\tcreate: ( payload: CreateComponentPayload ) =>\n\t\thttpService()\n\t\t\t.post< HttpResponse< CreateComponentResponse > >( `${ BASE_URL }`, payload )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateStatuses: ( ids: number[], status: DocumentSaveStatus ) =>\n\t\thttpService().put( `${ BASE_URL }/status`, {\n\t\t\tids,\n\t\t\tstatus,\n\t\t} ),\n\tgetComponentConfig: ( id: number ) => ajax.load< { id: number }, V1ElementData >( getParams( id ) ),\n\tinvalidateComponentConfigCache: ( id: number ) => ajax.invalidateCache< { id: number } >( getParams( id ) ),\n\tgetComponentLockStatus: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< { data: ComponentLockStatusResponse } >( `${ BASE_URL }/lock-status`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId,\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => {\n\t\t\t\tconst { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data;\n\t\t\t\treturn { isAllowedToSwitchDocument, lockedBy: lockedBy || '' };\n\t\t\t} ),\n\tlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/lock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tunlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/unlock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tgetOverridableProps: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< HttpResponse< OverridableProps > >( `${ BASE_URL }/overridable-props`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId: componentId.toString(),\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateArchivedComponents: async ( componentIds: number[] ) =>\n\t\tawait httpService()\n\t\t\t.post< { data: { failedIds: number[]; successIds: number[]; success: boolean } } >(\n\t\t\t\t`${ BASE_URL }/archive`,\n\t\t\t\t{\n\t\t\t\t\tcomponentIds,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then( ( res ) => res.data.data ),\n\tvalidate: async ( payload: ValidateComponentsPayload ) =>\n\t\tawait httpService()\n\t\t\t.post< HttpResponse< ValidateComponentsResponse > >( `${ BASE_URL }/create-validate`, payload )\n\t\t\t.then( ( res ) => res.data ),\n};\n","import { type Document, getV1DocumentsManager } from '@elementor/editor-documents';\n\ntype ComponentDocumentData = Document;\n\nexport const getComponentDocumentData = async ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\ttry {\n\t\treturn await documentManager.request< ComponentDocumentData >( id );\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const invalidateComponentDocumentData = ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\tdocumentManager.invalidateCache( id );\n};\n","import { createTransformer, settingsTransformersRegistry } from '@elementor/editor-canvas';\nimport { type PropValue, type TransformablePropValue } from '@elementor/editor-props';\n\nimport { componentInstanceContext } from './component-instance-transformer';\nimport { type ComponentOverridable } from './types';\n\nexport const componentOverridableTransformer = createTransformer(\n\t( value: ComponentOverridable, options: { key: string } ) => {\n\t\tconst { overrides } = componentInstanceContext.get();\n\n\t\tconst overrideValue = overrides?.[ value.override_key ];\n\n\t\tif ( overrideValue ) {\n\t\t\tconst isOverride = isOriginValueOverride( value.origin_value );\n\n\t\t\tif ( isOverride ) {\n\t\t\t\treturn transformOverride( value, options, overrideValue );\n\t\t\t}\n\n\t\t\treturn overrideValue;\n\t\t}\n\n\t\treturn value.origin_value;\n\t}\n);\n\nfunction transformOverride(\n\tvalue: ComponentOverridable,\n\toptions: {\n\t\tkey: string;\n\t},\n\toverrideValue: PropValue\n) {\n\tconst transformer = settingsTransformersRegistry.get( 'override' );\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\tconst transformedValue = transformer( value.origin_value.value, options );\n\n\tif ( ! transformedValue ) {\n\t\treturn null;\n\t}\n\n\tconst [ key ] = Object.keys( transformedValue as Record< string, unknown > );\n\n\treturn {\n\t\t[ key ]: overrideValue,\n\t};\n}\n\nfunction isOriginValueOverride( originValue: TransformablePropValue< string > ): boolean {\n\treturn originValue.$$type === 'override';\n}\n","import { createTransformer } from '@elementor/editor-canvas';\n\nimport { type ComponentOverridePropValue } from './types';\n\nexport const componentOverrideTransformer = createTransformer( ( override: ComponentOverridePropValue ) => {\n\tconst { override_key: key, override_value: overrideValue } = override;\n\n\treturn { [ key ]: overrideValue };\n} );\n","import * as React from 'react';\nimport { useSuppressedMessage } from '@elementor/editor-current-user';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { ArrowLeftIcon, ComponentsFilledIcon } from '@elementor/icons';\nimport { Box, Divider, IconButton, Stack, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { useCurrentComponentId } from '../../store/store';\nimport { usePanelActions } from '../component-properties-panel/component-properties-panel';\nimport { ComponentIntroduction } from '../components-tab/component-introduction';\nimport { ComponentsBadge } from './component-badge';\nimport { useOverridableProps } from './use-overridable-props';\n\nconst MESSAGE_KEY = 'components-properties-introduction';\n\nexport const ComponentPanelHeader = () => {\n\tconst currentComponentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\tconst onBack = useNavigateBack();\n\tconst componentName = getComponentName();\n\tconst [ isMessageSuppressed, suppressMessage ] = useSuppressedMessage( MESSAGE_KEY );\n\tconst [ shouldShowIntroduction, setShouldShowIntroduction ] = React.useState( ! isMessageSuppressed );\n\n\tconst { open: openPropertiesPanel } = usePanelActions();\n\n\tconst overridesCount = overridableProps ? Object.keys( overridableProps.props ).length : 0;\n\tconst anchorRef = React.useRef< HTMLDivElement >( null );\n\n\tif ( ! currentComponentId ) {\n\t\treturn null;\n\t}\n\n\tconst handleCloseIntroduction = () => {\n\t\tsuppressMessage();\n\t\tsetShouldShowIntroduction( false );\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 } ref={ anchorRef } onClick={ openPropertiesPanel } />\n\t\t\t</Stack>\n\t\t\t<Divider />\n\t\t\t<ComponentIntroduction\n\t\t\t\tanchorRef={ anchorRef }\n\t\t\t\tshouldShowIntroduction={ shouldShowIntroduction }\n\t\t\t\tonClose={ handleCloseIntroduction }\n\t\t\t/>\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 { ElementProvider, usePanelActions as useEditingPanelActions } from '@elementor/editor-editing-panel';\nimport { useSelectedElement } from '@elementor/editor-elements';\nimport { __createPanel as createPanel, Panel } from '@elementor/editor-panels';\nimport { ThemeProvider } from '@elementor/editor-ui';\nimport { Alert, Box, ErrorBoundary } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { ComponentPropertiesPanelContent } from './component-properties-panel-content';\n\nconst id = 'component-properties-panel';\n\nexport const { panel, usePanelActions } = createPanel( {\n\tid,\n\tcomponent: ComponentPropertiesPanel,\n} );\n\nfunction ComponentPropertiesPanel() {\n\tconst { element, elementType } = useSelectedElement();\n\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openEditingPanel } = useEditingPanelActions();\n\n\tif ( ! element || ! elementType ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<ErrorBoundary fallback={ <ErrorBoundaryFallback /> }>\n\t\t\t\t<ElementProvider element={ element } elementType={ elementType }>\n\t\t\t\t\t<Panel>\n\t\t\t\t\t\t<ComponentPropertiesPanelContent\n\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\topenEditingPanel();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Panel>\n\t\t\t\t</ElementProvider>\n\t\t\t</ErrorBoundary>\n\t\t</ThemeProvider>\n\t);\n}\n\nconst ErrorBoundaryFallback = () => (\n\t<Box role=\"alert\" sx={ { minHeight: '100%', p: 2 } }>\n\t\t<Alert severity=\"error\" sx={ { mb: 2, maxWidth: 400, textAlign: 'center' } }>\n\t\t\t<strong>{ __( 'Something went wrong', 'elementor' ) }</strong>\n\t\t</Alert>\n\t</Box>\n);\n","import * as React from 'react';\nimport { useMemo, useRef, useState } from 'react';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { ComponentPropListIcon, FolderPlusIcon, XIcon } from '@elementor/icons';\nimport { Divider, IconButton, List, Stack, Tooltip } from '@elementor/ui';\nimport { generateUniqueId } from '@elementor/utils';\nimport { __ } from '@wordpress/i18n';\n\nimport { addOverridableGroup } from '../../store/actions/add-overridable-group';\nimport { deleteOverridableGroup } from '../../store/actions/delete-overridable-group';\nimport { deleteOverridableProp } from '../../store/actions/delete-overridable-prop';\nimport { reorderGroupProps } from '../../store/actions/reorder-group-props';\nimport { reorderOverridableGroups } from '../../store/actions/reorder-overridable-groups';\nimport { updateOverridableProp } from '../../store/actions/update-overridable-prop';\nimport { useCurrentComponentId } from '../../store/store';\nimport { useOverridableProps } from '../component-panel-header/use-overridable-props';\nimport { PropertiesEmptyState } from './properties-empty-state';\nimport { PropertiesGroup } from './properties-group';\nimport { SortableItem, SortableProvider } from './sortable';\nimport { useCurrentEditableItem } from './use-current-editable-item';\nimport { generateUniqueLabel } from './utils/generate-unique-label';\n\ntype Props = {\n\tonClose: () => void;\n};\n\nexport function ComponentPropertiesPanelContent( { onClose }: Props ) {\n\tconst currentComponentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\tconst [ isAddingGroup, setIsAddingGroup ] = useState( false );\n\tconst introductionRef = useRef< HTMLButtonElement >( null );\n\tconst groupLabelEditable = useCurrentEditableItem();\n\n\tconst groups = useMemo( () => {\n\t\tif ( ! overridableProps ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn overridableProps.groups.order\n\t\t\t.map( ( groupId ) => overridableProps.groups.items[ groupId ] ?? null )\n\t\t\t.filter( Boolean );\n\t}, [ overridableProps ] );\n\n\tconst allGroupsForSelect = useMemo(\n\t\t() => groups.map( ( group ) => ( { value: group.id, label: group.label } ) ),\n\t\t[ groups ]\n\t);\n\n\tif ( ! currentComponentId || ! overridableProps ) {\n\t\treturn null;\n\t}\n\n\tconst hasGroups = groups.length > 0;\n\tconst showEmptyState = ! hasGroups && ! isAddingGroup;\n\tconst groupIds = overridableProps.groups.order;\n\n\tconst handleAddGroupClick = () => {\n\t\tif ( isAddingGroup ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newGroupId = generateUniqueId( 'group' );\n\t\tconst newLabel = generateUniqueLabel( groups );\n\n\t\taddOverridableGroup( { componentId: currentComponentId, groupId: newGroupId, label: newLabel } );\n\t\tsetDocumentModifiedStatus( true );\n\t\tsetIsAddingGroup( false );\n\n\t\tgroupLabelEditable.setEditingGroupId( newGroupId );\n\t};\n\n\tconst handleGroupsReorder = ( newOrder: string[] ) => {\n\t\treorderOverridableGroups( { componentId: currentComponentId, newOrder } );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst handlePropsReorder = ( groupId: string, newPropsOrder: string[] ) => {\n\t\treorderGroupProps( { componentId: currentComponentId, groupId, newPropsOrder } );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst handlePropertyDelete = ( propKey: string ) => {\n\t\tdeleteOverridableProp( { componentId: currentComponentId, propKey } );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst handlePropertyUpdate = ( propKey: string, data: { label: string; group: string | null } ) => {\n\t\tupdateOverridableProp( {\n\t\t\tcomponentId: currentComponentId,\n\t\t\tpropKey,\n\t\t\tlabel: data.label,\n\t\t\tgroupId: data.group,\n\t\t} );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst handleGroupDelete = ( groupId: string ) => {\n\t\tdeleteOverridableGroup( { componentId: currentComponentId, groupId } );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PanelHeader sx={ { justifyContent: 'start', pl: 1.5, pr: 1, py: 1 } }>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 } flexGrow={ 1 }>\n\t\t\t\t\t<ComponentPropListIcon fontSize=\"tiny\" />\n\t\t\t\t\t<PanelHeaderTitle variant=\"subtitle2\">\n\t\t\t\t\t\t{ __( 'Component properties', 'elementor' ) }\n\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t</Stack>\n\n\t\t\t\t{ ! showEmptyState && (\n\t\t\t\t\t<Tooltip title={ __( 'Add new group', 'elementor' ) }>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\taria-label={ __( 'Add new group', 'elementor' ) }\n\t\t\t\t\t\t\tonClick={ handleAddGroupClick }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<FolderPlusIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) }\n\n\t\t\t\t<Tooltip title={ __( 'Close panel', 'elementor' ) }>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tref={ introductionRef }\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\taria-label={ __( 'Close panel', 'elementor' ) }\n\t\t\t\t\t\tonClick={ onClose }\n\t\t\t\t\t>\n\t\t\t\t\t\t<XIcon fontSize=\"tiny\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t</PanelHeader>\n\n\t\t\t<Divider />\n\n\t\t\t<PanelBody>\n\t\t\t\t{ showEmptyState ? (\n\t\t\t\t\t<PropertiesEmptyState introductionRef={ introductionRef } />\n\t\t\t\t) : (\n\t\t\t\t\t<List sx={ { p: 2, display: 'flex', flexDirection: 'column', gap: 2 } }>\n\t\t\t\t\t\t<SortableProvider value={ groupIds } onChange={ handleGroupsReorder }>\n\t\t\t\t\t\t\t{ groups.map( ( group ) => (\n\t\t\t\t\t\t\t\t<SortableItem key={ group.id } id={ group.id }>\n\t\t\t\t\t\t\t\t\t{ ( { triggerProps, triggerStyle, isDragPlaceholder } ) => (\n\t\t\t\t\t\t\t\t\t\t<PropertiesGroup\n\t\t\t\t\t\t\t\t\t\t\tgroup={ group }\n\t\t\t\t\t\t\t\t\t\t\tprops={ overridableProps.props }\n\t\t\t\t\t\t\t\t\t\t\tallGroups={ allGroupsForSelect }\n\t\t\t\t\t\t\t\t\t\t\tallGroupsRecord={ overridableProps.groups.items }\n\t\t\t\t\t\t\t\t\t\t\tsortableTriggerProps={ { ...triggerProps, style: triggerStyle } }\n\t\t\t\t\t\t\t\t\t\t\tisDragPlaceholder={ isDragPlaceholder }\n\t\t\t\t\t\t\t\t\t\t\tsetIsAddingGroup={ setIsAddingGroup }\n\t\t\t\t\t\t\t\t\t\t\tonPropsReorder={ ( newOrder ) => handlePropsReorder( group.id, newOrder ) }\n\t\t\t\t\t\t\t\t\t\t\tonPropertyDelete={ handlePropertyDelete }\n\t\t\t\t\t\t\t\t\t\t\tonPropertyUpdate={ handlePropertyUpdate }\n\t\t\t\t\t\t\t\t\t\t\teditableLabelProps={ groupLabelEditable }\n\t\t\t\t\t\t\t\t\t\t\tonGroupDelete={ handleGroupDelete }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</SortableProvider>\n\t\t\t\t\t</List>\n\t\t\t\t) }\n\t\t\t</PanelBody>\n\t\t</>\n\t);\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId, type OverridablePropsGroup } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype AddGroupParams = {\n\tcomponentId: ComponentId;\n\tgroupId: string;\n\tlabel: string;\n};\n\nexport function addOverridableGroup( {\n\tcomponentId,\n\tgroupId,\n\tlabel,\n}: AddGroupParams ): OverridablePropsGroup | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst newGroup: OverridablePropsGroup = {\n\t\tid: groupId,\n\t\tlabel,\n\t\tprops: [],\n\t};\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tgroups: {\n\t\t\t\t\t...overridableProps.groups,\n\t\t\t\t\titems: {\n\t\t\t\t\t\t...overridableProps.groups.items,\n\t\t\t\t\t\t[ groupId ]: newGroup,\n\t\t\t\t\t},\n\t\t\t\t\torder: [ groupId, ...overridableProps.groups.order ],\n\t\t\t\t},\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn newGroup;\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport { deleteGroup } from '../utils/groups-transformers';\n\ntype DeleteGroupParams = {\n\tcomponentId: ComponentId;\n\tgroupId: string;\n};\n\nexport function deleteOverridableGroup( { componentId, groupId }: DeleteGroupParams ): boolean {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn false;\n\t}\n\n\tconst group = overridableProps.groups.items[ groupId ];\n\n\tif ( ! group || group.props.length > 0 ) {\n\t\treturn false;\n\t}\n\n\tconst updatedGroups = deleteGroup( overridableProps.groups, groupId );\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tgroups: updatedGroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn true;\n}\n","import { generateUniqueId } from '@elementor/utils';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp, type OverridableProps, type OverridablePropsGroup } from '../../types';\n\ntype Groups = OverridableProps[ 'groups' ];\n\nexport function removePropFromAllGroups( groups: Groups, propKey: string ): Groups {\n\treturn {\n\t\t...groups,\n\t\titems: Object.fromEntries(\n\t\t\tObject.entries( groups.items ).map( ( [ groupId, group ] ) => [\n\t\t\t\tgroupId,\n\t\t\t\t{\n\t\t\t\t\t...group,\n\t\t\t\t\tprops: group.props.filter( ( p ) => p !== propKey ),\n\t\t\t\t},\n\t\t\t] )\n\t\t),\n\t};\n}\n\nexport function addPropToGroup( groups: Groups, groupId: string, propKey: string ): Groups {\n\tconst group = groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn groups;\n\t}\n\n\tif ( group.props.includes( propKey ) ) {\n\t\treturn groups;\n\t}\n\n\treturn {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ groupId ]: {\n\t\t\t\t...group,\n\t\t\t\tprops: [ ...group.props, propKey ],\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function movePropBetweenGroups(\n\tgroups: Groups,\n\tpropKey: string,\n\tfromGroupId: string,\n\ttoGroupId: string\n): Groups {\n\tif ( fromGroupId === toGroupId ) {\n\t\treturn groups;\n\t}\n\n\tconst withoutProp = removePropFromGroup( groups, fromGroupId, propKey );\n\treturn addPropToGroup( withoutProp, toGroupId, propKey );\n}\n\nexport function removePropFromGroup( groups: Groups, groupId: string, propKey: string ): Groups {\n\tconst group = groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn groups;\n\t}\n\n\treturn {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ groupId ]: {\n\t\t\t\t...group,\n\t\t\t\tprops: group.props.filter( ( p ) => p !== propKey ),\n\t\t\t},\n\t\t},\n\t};\n}\n\ntype ResolvedGroup = {\n\tgroups: Groups;\n\tgroupId: string;\n};\n\nexport function resolveOrCreateGroup( groups: Groups, requestedGroupId?: string ): ResolvedGroup {\n\tif ( requestedGroupId && groups.items[ requestedGroupId ] ) {\n\t\treturn { groups, groupId: requestedGroupId };\n\t}\n\n\tif ( ! requestedGroupId && groups.order.length > 0 ) {\n\t\treturn { groups, groupId: groups.order[ 0 ] };\n\t}\n\n\treturn createGroup( groups, requestedGroupId );\n}\n\nexport function createGroup( groups: Groups, groupId?: string, label?: string ): ResolvedGroup {\n\tconst newGroupId = groupId || generateUniqueId( 'group' );\n\tconst newLabel = label || __( 'Default', 'elementor' );\n\n\treturn {\n\t\tgroups: {\n\t\t\t...groups,\n\t\t\titems: {\n\t\t\t\t...groups.items,\n\t\t\t\t[ newGroupId ]: {\n\t\t\t\t\tid: newGroupId,\n\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\tprops: [],\n\t\t\t\t},\n\t\t\t},\n\t\t\torder: [ ...groups.order, newGroupId ],\n\t\t},\n\t\tgroupId: newGroupId,\n\t};\n}\n\nexport function removePropsFromState(\n\toverridableProps: OverridableProps,\n\tpropsToRemove: OverridableProp[]\n): OverridableProps {\n\tconst overrideKeysToRemove = propsToRemove.map( ( prop ) => prop.overrideKey );\n\n\tconst remainingProps = Object.fromEntries(\n\t\tObject.entries( overridableProps.props ).filter( ( [ , prop ] ) => ! propsToRemove.includes( prop ) )\n\t);\n\n\tconst updatedGroupItems = Object.fromEntries(\n\t\tObject.entries( overridableProps.groups.items ).map(\n\t\t\t( [ groupId, group ]: [ string, OverridablePropsGroup ] ) => [\n\t\t\t\tgroupId,\n\t\t\t\t{\n\t\t\t\t\t...group,\n\t\t\t\t\tprops: group.props.filter( ( prop ) => ! overrideKeysToRemove.includes( prop ) ),\n\t\t\t\t},\n\t\t\t]\n\t\t)\n\t);\n\n\treturn {\n\t\tprops: remainingProps,\n\t\tgroups: {\n\t\t\titems: updatedGroupItems,\n\t\t\torder: overridableProps.groups.order.filter( ( groupId ) => ! overrideKeysToRemove.includes( groupId ) ),\n\t\t},\n\t};\n}\n\nexport function ensureGroupInOrder( groups: Groups, groupId: string ): Groups {\n\tif ( groups.order.includes( groupId ) ) {\n\t\treturn groups;\n\t}\n\n\treturn {\n\t\t...groups,\n\t\torder: [ ...groups.order, groupId ],\n\t};\n}\n\nexport function deleteGroup( groups: Groups, groupId: string ): Groups {\n\tconst { [ groupId ]: removed, ...remainingItems } = groups.items;\n\n\treturn {\n\t\titems: remainingItems,\n\t\torder: groups.order.filter( ( id ) => id !== groupId ),\n\t};\n}\n\nexport function renameGroup( groups: Groups, groupId: string, newLabel: string ): Groups {\n\tconst group = groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn groups;\n\t}\n\n\treturn {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ groupId ]: {\n\t\t\t\t...group,\n\t\t\t\tlabel: newLabel,\n\t\t\t},\n\t\t},\n\t};\n}\n","import { getContainer, updateElementSettings } from '@elementor/editor-elements';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport { removePropFromAllGroups } from '../utils/groups-transformers';\n\ntype DeletePropParams = {\n\tcomponentId: ComponentId;\n\tpropKey: string;\n};\n\nexport function deleteOverridableProp( { componentId, propKey }: DeletePropParams ): void {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst prop = overridableProps.props[ propKey ];\n\n\tif ( ! prop ) {\n\t\treturn;\n\t}\n\n\trevertElementSetting( prop.elementId, prop.propKey, prop.originValue );\n\n\tconst { [ propKey ]: removedProp, ...remainingProps } = overridableProps.props;\n\n\tconst updatedGroups = removePropFromAllGroups( overridableProps.groups, propKey );\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tprops: remainingProps,\n\t\t\t\tgroups: updatedGroups,\n\t\t\t},\n\t\t} )\n\t);\n}\n\nfunction revertElementSetting( elementId: string, settingKey: string, originValue: unknown ): void {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tupdateElementSettings( {\n\t\tid: elementId,\n\t\tprops: { [ settingKey ]: originValue ?? null },\n\t\twithHistory: false,\n\t} );\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype ReorderGroupPropsParams = {\n\tcomponentId: ComponentId;\n\tgroupId: string;\n\tnewPropsOrder: string[];\n};\n\nexport function reorderGroupProps( { componentId, groupId, newPropsOrder }: ReorderGroupPropsParams ): void {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst group = overridableProps.groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn;\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tgroups: {\n\t\t\t\t\t...overridableProps.groups,\n\t\t\t\t\titems: {\n\t\t\t\t\t\t...overridableProps.groups.items,\n\t\t\t\t\t\t[ groupId ]: {\n\t\t\t\t\t\t\t...group,\n\t\t\t\t\t\t\tprops: newPropsOrder,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t} )\n\t);\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype ReorderGroupsParams = {\n\tcomponentId: ComponentId;\n\tnewOrder: string[];\n};\n\nexport function reorderOverridableGroups( { componentId, newOrder }: ReorderGroupsParams ): void {\n\tconst overridableProps = selectOverridableProps( getState(), 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\t\t...overridableProps,\n\t\t\t\tgroups: {\n\t\t\t\t\t...overridableProps.groups,\n\t\t\t\t\torder: newOrder,\n\t\t\t\t},\n\t\t\t},\n\t\t} )\n\t);\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId, type OverridableProp } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport { movePropBetweenGroups } from '../utils/groups-transformers';\n\ntype UpdatePropParams = {\n\tcomponentId: ComponentId;\n\tpropKey: string;\n\tlabel: string;\n\tgroupId: string | null;\n};\n\nexport function updateOverridableProp( {\n\tcomponentId,\n\tpropKey,\n\tlabel,\n\tgroupId,\n}: UpdatePropParams ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst prop = overridableProps.props[ propKey ];\n\n\tif ( ! prop ) {\n\t\treturn;\n\t}\n\n\tconst oldGroupId = prop.groupId;\n\tconst newGroupId = groupId ?? oldGroupId;\n\n\tconst updatedProp: OverridableProp = {\n\t\t...prop,\n\t\tlabel,\n\t\tgroupId: newGroupId,\n\t};\n\n\tconst updatedGroups = movePropBetweenGroups( overridableProps.groups, propKey, oldGroupId, newGroupId );\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tprops: {\n\t\t\t\t\t...overridableProps.props,\n\t\t\t\t\t[ propKey ]: updatedProp,\n\t\t\t\t},\n\t\t\t\tgroups: updatedGroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn updatedProp;\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 { useState } from 'react';\nimport { ComponentPropListIcon } from '@elementor/icons';\nimport { Link, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { ComponentIntroduction } from '../components-tab/component-introduction';\n\nexport function PropertiesEmptyState( { introductionRef }: { introductionRef: React.RefObject< HTMLButtonElement > } ) {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\treturn (\n\t\t<>\n\t\t\t<Stack\n\t\t\t\talignItems=\"center\"\n\t\t\t\tjustifyContent=\"flex-start\"\n\t\t\t\theight=\"100%\"\n\t\t\t\tcolor=\"text.secondary\"\n\t\t\t\tsx={ { px: 2.5, pt: 10, pb: 5.5 } }\n\t\t\t\tgap={ 1 }\n\t\t\t>\n\t\t\t\t<ComponentPropListIcon fontSize=\"large\" />\n\n\t\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t\t{ __( 'Add your first property', 'elementor' ) }\n\t\t\t\t</Typography>\n\n\t\t\t\t<Typography align=\"center\" variant=\"caption\">\n\t\t\t\t\t{ __( 'Make instances flexible while keeping design synced.', 'elementor' ) }\n\t\t\t\t</Typography>\n\n\t\t\t\t<Typography align=\"center\" variant=\"caption\">\n\t\t\t\t\t{ __( 'Select any element, then click + next to a setting to expose it.', 'elementor' ) }\n\t\t\t\t</Typography>\n\n\t\t\t\t<Link\n\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\tcolor=\"secondary\"\n\t\t\t\t\tsx={ { textDecorationLine: 'underline' } }\n\t\t\t\t\tonClick={ () => setIsOpen( true ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Learn more', 'elementor' ) }\n\t\t\t\t</Link>\n\t\t\t</Stack>\n\t\t\t<ComponentIntroduction\n\t\t\t\tanchorRef={ introductionRef }\n\t\t\t\tshouldShowIntroduction={ isOpen }\n\t\t\t\tonClose={ () => setIsOpen( false ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { PopoverContent } from '@elementor/editor-controls';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { Box, Button, Image, Popover, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const ComponentIntroduction = ( {\n\tanchorRef,\n\tshouldShowIntroduction,\n\tonClose,\n}: {\n\tanchorRef: React.RefObject< HTMLElement >;\n\tshouldShowIntroduction: boolean;\n\tonClose: () => void;\n} ) => {\n\tif ( ! anchorRef.current || ! shouldShowIntroduction ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tanchorEl={ anchorRef.current }\n\t\t\topen={ shouldShowIntroduction }\n\t\t\tanchorOrigin={ {\n\t\t\t\tvertical: 'top',\n\t\t\t\thorizontal: 'right',\n\t\t\t} }\n\t\t\ttransformOrigin={ {\n\t\t\t\tvertical: 'top',\n\t\t\t\thorizontal: -30,\n\t\t\t} }\n\t\t\tonClose={ onClose }\n\t\t>\n\t\t\t<Box sx={ { width: '296px' } }>\n\t\t\t\t<PopoverHeader title={ __( 'Add your first property', 'elementor' ) } onClose={ onClose } />\n\t\t\t\t<Image\n\t\t\t\t\tsx={ { width: '296px', height: '160px' } }\n\t\t\t\t\tsrc={ 'https://assets.elementor.com/packages/v1/images/components-properties-intro.png' }\n\t\t\t\t\talt={ '' }\n\t\t\t\t/>\n\t\t\t\t<PopoverContent>\n\t\t\t\t\t<Stack gap={ 1 } sx={ { p: 2 } }>\n\t\t\t\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t\t\t\t{ __( 'Properties make instances flexible.', 'elementor' ) }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Click next to any setting you want users to customize - like text, images, or links.',\n\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Your properties will appear in the Properties panel, where you can organize and manage them anytime.',\n\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"flex-end\">\n\t\t\t\t\t\t\t<Button size=\"medium\" variant=\"contained\" onClick={ onClose }>\n\t\t\t\t\t\t\t\t{ __( 'Got it', 'elementor' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Stack>\n\t\t\t\t</PopoverContent>\n\t\t\t</Box>\n\t\t</Popover>\n\t);\n};\n","import * as React from 'react';\nimport { EditableField, MenuListItem } from '@elementor/editor-ui';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tList,\n\tMenu,\n\tStack,\n\tTooltip,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp, type OverridablePropsGroup } from '../../types';\nimport { PropertyItem } from './property-item';\nimport { SortableItem, SortableProvider, SortableTrigger, type SortableTriggerProps } from './sortable';\nimport { type GroupLabelEditableState } from './use-current-editable-item';\n\ntype Props = {\n\tgroup: OverridablePropsGroup;\n\tprops: Record< string, OverridableProp >;\n\tallGroups: { value: string; label: string }[];\n\tallGroupsRecord: Record< string, OverridablePropsGroup >;\n\tsortableTriggerProps: SortableTriggerProps;\n\tisDragPlaceholder?: boolean;\n\tsetIsAddingGroup: ( isAddingGroup: boolean ) => void;\n\tonPropsReorder: ( newOrder: string[] ) => void;\n\tonPropertyDelete: ( propKey: string ) => void;\n\tonPropertyUpdate: ( propKey: string, data: { label: string; group: string | null } ) => void;\n\tonGroupDelete: ( groupId: string ) => void;\n\teditableLabelProps: GroupLabelEditableState;\n};\n\nexport function PropertiesGroup( {\n\tgroup,\n\tprops,\n\tallGroups,\n\tsortableTriggerProps,\n\tisDragPlaceholder,\n\tonPropsReorder,\n\tonPropertyDelete,\n\tonPropertyUpdate,\n\tonGroupDelete,\n\teditableLabelProps,\n}: Props ) {\n\tconst groupProps = group.props\n\t\t.map( ( propId ) => props[ propId ] )\n\t\t.filter( ( prop ): prop is OverridableProp => Boolean( prop ) );\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst { editableRef, isEditing, error, getEditableProps, setEditingGroupId, editingGroupId } = editableLabelProps;\n\n\tconst hasProperties = group.props.length > 0;\n\tconst isThisGroupEditing = isEditing && editingGroupId === group.id;\n\n\tconst handleRenameClick = () => {\n\t\tpopupState.close();\n\t\tsetEditingGroupId( group.id );\n\t};\n\n\tconst handleDeleteClick = () => {\n\t\tpopupState.close();\n\t\tonGroupDelete( group.id );\n\t};\n\n\treturn (\n\t\t<Box\n\t\t\tsx={ {\n\t\t\t\topacity: isDragPlaceholder ? 0.5 : 1,\n\t\t\t} }\n\t\t>\n\t\t\t<Stack gap={ 1 }>\n\t\t\t\t<Box\n\t\t\t\t\tclassName=\"group-header\"\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t'&:hover .group-sortable-trigger': {\n\t\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'& .group-sortable-trigger': {\n\t\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'&:hover .group-menu': {\n\t\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'& .group-menu': {\n\t\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t\t},\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<SortableTrigger triggerClassName=\"group-sortable-trigger\" { ...sortableTriggerProps } />\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" gap={ 2 }>\n\t\t\t\t\t\t{ isThisGroupEditing ? (\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t\theight: 28,\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tborder: 2,\n\t\t\t\t\t\t\t\t\tborderColor: 'text.secondary',\n\t\t\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\t\t\tpl: 0.5,\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<EditableField\n\t\t\t\t\t\t\t\t\tref={ editableRef }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\terror={ error ?? undefined }\n\t\t\t\t\t\t\t\t\tsx={ { color: 'text.primary', fontWeight: 400, lineHeight: 1.66 } }\n\t\t\t\t\t\t\t\t\t{ ...getEditableProps() }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\tsx={ { color: 'text.primary', fontWeight: 400, lineHeight: 1.66 } }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ group.label }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tclassName=\"group-menu\"\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tsx={ { p: 0.25, visibility: isThisGroupEditing ? 'visible' : undefined } }\n\t\t\t\t\t\t\taria-label={ __( 'Group actions', 'elementor' ) }\n\t\t\t\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Box>\n\t\t\t\t<List sx={ { p: 0, display: 'flex', flexDirection: 'column', gap: 1 } }>\n\t\t\t\t\t<SortableProvider value={ group.props } onChange={ onPropsReorder }>\n\t\t\t\t\t\t{ groupProps.map( ( prop ) => (\n\t\t\t\t\t\t\t<SortableItem key={ prop.overrideKey } id={ prop.overrideKey }>\n\t\t\t\t\t\t\t\t{ ( { triggerProps, triggerStyle, isDragPlaceholder: isItemDragPlaceholder } ) => (\n\t\t\t\t\t\t\t\t\t<PropertyItem\n\t\t\t\t\t\t\t\t\t\tprop={ prop }\n\t\t\t\t\t\t\t\t\t\tsortableTriggerProps={ { ...triggerProps, style: triggerStyle } }\n\t\t\t\t\t\t\t\t\t\tisDragPlaceholder={ isItemDragPlaceholder }\n\t\t\t\t\t\t\t\t\t\tgroups={ allGroups }\n\t\t\t\t\t\t\t\t\t\tonDelete={ onPropertyDelete }\n\t\t\t\t\t\t\t\t\t\tonUpdate={ ( data ) => onPropertyUpdate( prop.overrideKey, data ) }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</SortableProvider>\n\t\t\t\t</List>\n\t\t\t</Stack>\n\t\t\t<Menu\n\t\t\t\t{ ...bindMenu( popupState ) }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'right' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t>\n\t\t\t\t<MenuListItem sx={ { minWidth: '160px' } } onClick={ handleRenameClick }>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t{ __( 'Rename', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t\t<Tooltip\n\t\t\t\t\ttitle={\n\t\t\t\t\t\thasProperties ? __( 'To delete the group, first remove all the properties', 'elementor' ) : ''\n\t\t\t\t\t}\n\t\t\t\t\tplacement=\"right\"\n\t\t\t\t>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<MenuListItem onClick={ handleDeleteClick } disabled={ hasProperties }>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\tsx={ { color: hasProperties ? 'text.disabled' : 'error.light' } }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t</span>\n\t\t\t\t</Tooltip>\n\t\t\t</Menu>\n\t\t</Box>\n\t);\n}\n","import * as React from 'react';\nimport { getWidgetsCache } from '@elementor/editor-elements';\nimport { XIcon } from '@elementor/icons';\nimport { bindPopover, bindTrigger, Box, IconButton, Popover, Typography, usePopupState } from '@elementor/ui';\n\nimport { type OverridableProp } from '../../types';\nimport { OverridablePropForm } from '../overridable-props/overridable-prop-form';\nimport { SortableTrigger, type SortableTriggerProps } from './sortable';\n\ntype PropertyItemProps = {\n\tprop: OverridableProp;\n\tsortableTriggerProps: SortableTriggerProps;\n\tisDragPlaceholder?: boolean;\n\tgroups: { value: string; label: string }[];\n\tonDelete: ( propKey: string ) => void;\n\tonUpdate: ( data: { label: string; group: string | null } ) => void;\n};\n\nexport function PropertyItem( {\n\tprop,\n\tsortableTriggerProps,\n\tisDragPlaceholder,\n\tgroups,\n\tonDelete,\n\tonUpdate,\n}: PropertyItemProps ) {\n\tconst popoverState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\tconst icon = getElementIcon( prop );\n\tconst popoverProps = bindPopover( popoverState );\n\n\tconst handleSubmit = ( data: { label: string; group: string | null } ) => {\n\t\tonUpdate( data );\n\t\tpopoverState.close();\n\t};\n\n\tconst handleDelete = ( event: React.MouseEvent ) => {\n\t\tevent.stopPropagation();\n\t\tonDelete( prop.overrideKey );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Box\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tsx={ {\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tpl: 0.5,\n\t\t\t\t\tpr: 1,\n\t\t\t\t\tpy: 0.25,\n\t\t\t\t\tminHeight: 28,\n\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\tborder: '1px solid',\n\t\t\t\t\tborderColor: 'divider',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 0.5,\n\t\t\t\t\topacity: isDragPlaceholder ? 0.5 : 1,\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\tbackgroundColor: 'action.hover',\n\t\t\t\t\t},\n\t\t\t\t\t'&:hover .sortable-trigger': {\n\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t},\n\t\t\t\t\t'& .sortable-trigger': {\n\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t},\n\t\t\t\t\t'&:hover .delete-button': {\n\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t},\n\t\t\t\t\t'& .delete-button': {\n\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<SortableTrigger { ...sortableTriggerProps } />\n\t\t\t\t<Box\n\t\t\t\t\tsx={ { display: 'flex', alignItems: 'center', color: 'text.primary', fontSize: 12, padding: 0.25 } }\n\t\t\t\t>\n\t\t\t\t\t<i className={ icon } />\n\t\t\t\t</Box>\n\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', flexGrow: 1, fontSize: 10 } }>\n\t\t\t\t\t{ prop.label }\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton size=\"tiny\" onClick={ handleDelete } aria-label=\"Delete property\" sx={ { p: 0.25 } }>\n\t\t\t\t\t<XIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</Box>\n\n\t\t\t<Popover\n\t\t\t\t{ ...popoverProps }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'left' } }\n\t\t\t\tPaperProps={ { sx: { width: popoverState.anchorEl?.getBoundingClientRect().width } } }\n\t\t\t>\n\t\t\t\t<OverridablePropForm\n\t\t\t\t\tonSubmit={ handleSubmit }\n\t\t\t\t\tcurrentValue={ prop }\n\t\t\t\t\tgroups={ groups }\n\t\t\t\t\tsx={ { width: '100%' } }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nfunction getElementIcon( prop: OverridableProp ): string {\n\tconst elType = prop.elType === 'widget' ? prop.widgetType : prop.elType;\n\n\tconst widgetsCache = getWidgetsCache();\n\n\tif ( ! widgetsCache ) {\n\t\treturn 'eicon-apps';\n\t}\n\n\tconst widgetConfig = widgetsCache[ elType ];\n\n\treturn widgetConfig?.icon || 'eicon-apps';\n}\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { Form, MenuListItem } from '@elementor/editor-ui';\nimport { Button, FormLabel, Grid, Select, Stack, type SxProps, 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\tsx?: SxProps;\n};\n\nexport function OverridablePropForm( { onSubmit, groups, currentValue, sx }: 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\" sx={ { width: '268px', ...sx } }>\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={ ( e: React.ChangeEvent< HTMLSelectElement > ) =>\n\t\t\t\t\t\t\t\tsetGroup( e.target.value as string | null )\n\t\t\t\t\t\t\t}\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 * as React from 'react';\nimport { GripVerticalIcon } from '@elementor/icons';\nimport {\n\tBox,\n\tstyled,\n\tUnstableSortableItem,\n\ttype UnstableSortableItemProps,\n\ttype UnstableSortableItemRenderProps,\n\tUnstableSortableProvider,\n\ttype UnstableSortableProviderProps,\n} from '@elementor/ui';\n\nexport const SortableProvider = < T extends string >( props: UnstableSortableProviderProps< T > ) => (\n\t<UnstableSortableProvider restrictAxis variant=\"static\" dragPlaceholderStyle={ { opacity: '1' } } { ...props } />\n);\n\nexport type SortableTriggerProps = React.HTMLAttributes< HTMLDivElement > & {\n\ttriggerClassName?: string;\n};\n\nexport const SortableTrigger = ( { triggerClassName, ...props }: SortableTriggerProps ) => (\n\t<StyledSortableTrigger\n\t\t{ ...props }\n\t\trole=\"button\"\n\t\tclassName={ `sortable-trigger ${ triggerClassName ?? '' }`.trim() }\n\t\taria-label=\"sort\"\n\t>\n\t\t<GripVerticalIcon fontSize=\"tiny\" />\n\t</StyledSortableTrigger>\n);\n\ntype SortableItemProps = {\n\tid: UnstableSortableItemProps[ 'id' ];\n\tchildren: ( props: SortableItemRenderData ) => React.ReactNode;\n};\n\nexport type SortableItemRenderData = {\n\tisDragged: boolean;\n\tisDragPlaceholder: boolean;\n\ttriggerProps: React.HTMLAttributes< HTMLElement >;\n\ttriggerStyle: React.CSSProperties;\n};\n\nexport const SortableItem = ( { children, id }: SortableItemProps ) => (\n\t<UnstableSortableItem\n\t\tid={ id }\n\t\trender={ ( {\n\t\t\titemProps,\n\t\t\tisDragged,\n\t\t\ttriggerProps,\n\t\t\titemStyle,\n\t\t\ttriggerStyle,\n\t\t\tdropIndicationStyle,\n\t\t\tshowDropIndication,\n\t\t\tisDragOverlay,\n\t\t\tisDragPlaceholder,\n\t\t}: UnstableSortableItemRenderProps ) => (\n\t\t\t<Box\n\t\t\t\t{ ...itemProps }\n\t\t\t\tstyle={ itemStyle }\n\t\t\t\tcomponent=\"div\"\n\t\t\t\trole=\"listitem\"\n\t\t\t\tsx={ {\n\t\t\t\t\tbackgroundColor: isDragOverlay ? 'background.paper' : undefined,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ children( {\n\t\t\t\t\tisDragged,\n\t\t\t\t\tisDragPlaceholder,\n\t\t\t\t\ttriggerProps,\n\t\t\t\t\ttriggerStyle,\n\t\t\t\t} ) }\n\t\t\t\t{ showDropIndication && <SortableItemIndicator style={ dropIndicationStyle } /> }\n\t\t\t</Box>\n\t\t) }\n\t/>\n);\n\nconst StyledSortableTrigger = styled( 'div' )( ( { theme } ) => ( {\n\tposition: 'absolute',\n\tleft: '-2px',\n\ttop: '50%',\n\ttransform: `translate( -${ theme.spacing( 1.5 ) }, -50% )`,\n\tcolor: theme.palette.action.active,\n\tcursor: 'grab',\n} ) );\n\nconst SortableItemIndicator = styled( Box )`\n\twidth: 100%;\n\theight: 1px;\n\tbackground-color: ${ ( { theme } ) => theme.palette.text.primary };\n`;\n","import { useState } from 'react';\nimport type * as React from 'react';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { useEditable } from '@elementor/editor-ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { renameOverridableGroup } from '../../store/actions/rename-overridable-group';\nimport { useCurrentComponentId } from '../../store/store';\nimport { useOverridableProps } from '../component-panel-header/use-overridable-props';\nimport { validateGroupLabel } from './utils/validate-group-label';\n\nexport type GroupLabelEditableState = {\n\teditableRef: React.RefObject< HTMLElement | null >;\n\tisEditing: boolean;\n\terror: string | null;\n\tgetEditableProps: () => { value: string };\n\tsetEditingGroupId: ( groupId: string ) => void;\n\teditingGroupId: string | null;\n};\n\nexport function useCurrentEditableItem(): GroupLabelEditableState {\n\tconst [ editingGroupId, setEditingGroupId ] = useState< string | null >( null );\n\tconst currentComponentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\n\tconst allGroupsRecord = overridableProps?.groups?.items ?? {};\n\tconst currentGroup = editingGroupId ? allGroupsRecord[ editingGroupId ] : null;\n\n\tconst validateLabel = ( newLabel: string ): string | null => {\n\t\tconst otherGroups = Object.fromEntries(\n\t\t\tObject.entries( allGroupsRecord ).filter( ( [ id ] ) => id !== editingGroupId )\n\t\t);\n\n\t\treturn validateGroupLabel( newLabel, otherGroups ) || null;\n\t};\n\n\tconst handleSubmit = ( newLabel: string ) => {\n\t\tif ( ! editingGroupId || ! currentComponentId ) {\n\t\t\tthrow new Error( __( 'Group ID or component ID is missing', 'elementor' ) );\n\t\t}\n\n\t\trenameOverridableGroup( {\n\t\t\tcomponentId: currentComponentId,\n\t\t\tgroupId: editingGroupId,\n\t\t\tlabel: newLabel,\n\t\t} );\n\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst {\n\t\tref: editableRef,\n\t\topenEditMode,\n\t\tisEditing,\n\t\terror,\n\t\tgetProps: getEditableProps,\n\t} = useEditable( {\n\t\tvalue: currentGroup?.label ?? '',\n\t\tonSubmit: handleSubmit,\n\t\tvalidation: validateLabel,\n\t} );\n\n\treturn {\n\t\teditableRef,\n\t\tisEditing,\n\t\terror,\n\t\tgetEditableProps,\n\t\tsetEditingGroupId: ( groupId ) => {\n\t\t\tsetEditingGroupId( groupId );\n\t\t\topenEditMode();\n\t\t},\n\t\teditingGroupId,\n\t};\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport { renameGroup } from '../utils/groups-transformers';\n\ntype RenameGroupParams = {\n\tcomponentId: ComponentId;\n\tgroupId: string;\n\tlabel: string;\n};\n\nexport function renameOverridableGroup( { componentId, groupId, label }: RenameGroupParams ): boolean {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn false;\n\t}\n\n\tconst group = overridableProps.groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn false;\n\t}\n\n\tconst updatedGroups = renameGroup( overridableProps.groups, groupId, label );\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tgroups: updatedGroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn true;\n}\n","import { __ } from '@wordpress/i18n';\n\nimport { type OverridablePropsGroup } from '../../../types';\n\nexport const ERROR_MESSAGES = {\n\tEMPTY_NAME: __( 'Group name is required', 'elementor' ),\n\tDUPLICATE_NAME: __( 'Group name already exists', 'elementor' ),\n} as const;\n\nexport function validateGroupLabel( label: string, existingGroups: Record< string, OverridablePropsGroup > ): string {\n\tconst trimmedLabel = label.trim();\n\n\tif ( ! trimmedLabel ) {\n\t\treturn ERROR_MESSAGES.EMPTY_NAME;\n\t}\n\n\tconst isDuplicate = Object.values( existingGroups ).some( ( group ) => group.label === trimmedLabel );\n\n\tif ( isDuplicate ) {\n\t\treturn ERROR_MESSAGES.DUPLICATE_NAME;\n\t}\n\n\treturn '';\n}\n","import { type OverridablePropsGroup } from '../../../types';\n\nconst DEFAULT_NEW_GROUP_LABEL = 'New group';\n\nexport function generateUniqueLabel( groups: OverridablePropsGroup[] ): string {\n\tconst existingLabels = new Set( groups.map( ( group ) => group.label ) );\n\n\tif ( ! existingLabels.has( DEFAULT_NEW_GROUP_LABEL ) ) {\n\t\treturn DEFAULT_NEW_GROUP_LABEL;\n\t}\n\n\tlet index = 1;\n\tlet newLabel = `${ DEFAULT_NEW_GROUP_LABEL }-${ index }`;\n\n\twhile ( existingLabels.has( newLabel ) ) {\n\t\tindex++;\n\t\tnewLabel = `${ DEFAULT_NEW_GROUP_LABEL }-${ index }`;\n\t}\n\n\treturn newLabel;\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 = React.forwardRef< HTMLDivElement, { overridesCount: number; onClick: () => void } >(\n\t( { overridesCount, onClick }, ref ) => {\n\t\tconst prevCount = usePrevious( overridesCount );\n\n\t\tconst isFirstOverride = prevCount === 0 && overridesCount === 1;\n\n\t\treturn (\n\t\t\t<StyledBadge\n\t\t\t\tref={ ref }\n\t\t\t\tcolor=\"primary\"\n\t\t\t\tkey={ overridesCount }\n\t\t\t\tinvisible={ overridesCount === 0 }\n\t\t\t\tanimate={ isFirstOverride }\n\t\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\tbadgeContent={\n\t\t\t\t\t<Box sx={ { animation: ! isFirstOverride ? `${ slideUp } 300ms ease-out` : 'none' } }>\n\t\t\t\t\t\t{ overridesCount }\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<ToggleButton\n\t\t\t\t\tvalue=\"overrides\"\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\taria-label={ __( 'View overrides', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t<ComponentPropListIcon fontSize=\"tiny\" />\n\t\t\t\t</ToggleButton>\n\t\t\t</StyledBadge>\n\t\t);\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 * 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 COMPONENT_WIDGET_TYPE = 'e-component';\n\nconst updateGroups = ( groups: ContextMenuGroup[], config: ContextMenuGroupConfig ): ContextMenuGroup[] => {\n\tconst disableMap = new Map( Object.entries( config.disable ?? {} ) );\n\tconst addMap = new Map( Object.entries( config.add ?? {} ) );\n\n\treturn groups.map( ( group ) => {\n\t\tconst disabledActions = disableMap.get( group.name ) ?? [];\n\t\tconst addConfig = addMap.get( group.name );\n\n\t\t// Update disabled actions\n\t\tconst updatedActions = group.actions.map( ( action ) =>\n\t\t\tdisabledActions.includes( action.name ) ? { ...action, isEnabled: () => false } : action\n\t\t);\n\n\t\t// Insert additional action if needed\n\t\tif ( addConfig ) {\n\t\t\tupdatedActions.splice( addConfig.index, 0, addConfig.action );\n\t\t}\n\n\t\treturn { ...group, actions: updatedActions };\n\t} );\n};\n\nexport function createComponentType(\n\toptions: CreateTemplatedElementTypeOptions & { showLockedByModal?: ( lockedBy: string ) => void }\n): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn options.type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createComponentView( { ...options } );\n\t\t}\n\t};\n}\n\nfunction createComponentView(\n\toptions: CreateTemplatedElementTypeOptions & {\n\t\tshowLockedByModal?: ( lockedBy: string ) => void;\n\t}\n): typeof ElementView {\n\treturn class extends createTemplatedElementView( options ) {\n\t\tlegacyWindow = window as unknown as LegacyWindow & ExtendedWindow;\n\t\teventsManagerConfig = this.legacyWindow.elementorCommon.eventsManager.config;\n\n\t\tisComponentCurrentlyEdited() {\n\t\t\tconst currentDocument = getCurrentDocument();\n\n\t\t\treturn currentDocument?.id === this.getComponentId();\n\t\t}\n\n\t\tafterSettingsResolve( settings: { [ key: string ]: unknown } ) {\n\t\t\tconst componentInstance = settings.component_instance as\n\t\t\t\t| {\n\t\t\t\t\t\toverrides?: Record< string, unknown >;\n\t\t\t\t\t\telements?: unknown[];\n\t\t\t\t }\n\t\t\t\t| undefined;\n\n\t\t\tif ( componentInstance ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection(\n\t\t\t\t\tcomponentInstance.elements\n\t\t\t\t);\n\n\t\t\t\tthis.collection.models.forEach( setInactiveRecursively );\n\n\t\t\t\tsettings.component_instance = '<template data-children-placeholder></template>';\n\t\t\t}\n\n\t\t\treturn settings;\n\t\t}\n\n\t\tgetDomElement() {\n\t\t\t// Component does not have a DOM element, so we return the first child's DOM element.\n\t\t\treturn this.children.findByIndex( 0 )?.getDomElement() ?? this.$el;\n\t\t}\n\n\t\tattachBuffer( collectionView: this, buffer: DocumentFragment ): void {\n\t\t\tconst childrenPlaceholder = collectionView.$el.find( '[data-children-placeholder]' ).get( 0 );\n\n\t\t\tif ( ! childrenPlaceholder ) {\n\t\t\t\tsuper.attachBuffer( collectionView, buffer );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tchildrenPlaceholder.replaceWith( buffer );\n\t\t}\n\n\t\tgetComponentId() {\n\t\t\tconst componentInstance = (\n\t\t\t\tthis.options?.model?.get( 'settings' )?.get( 'component_instance' ) as ComponentInstancePropValue\n\t\t\t )?.value;\n\n\t\t\treturn componentInstance.component_id.value;\n\t\t}\n\n\t\tgetContextMenuGroups() {\n\t\t\tconst filteredGroups = super.getContextMenuGroups().filter( ( group ) => group.name !== 'save' );\n\t\t\tconst componentId = this.getComponentId();\n\t\t\tif ( ! componentId ) {\n\t\t\t\treturn filteredGroups;\n\t\t\t}\n\n\t\t\tconst newGroups = updateGroups(\n\t\t\t\tfilteredGroups as ContextMenuGroup[],\n\t\t\t\tthis._getContextMenuConfig() as unknown as ContextMenuGroupConfig\n\t\t\t);\n\t\t\treturn newGroups;\n\t\t}\n\n\t\t_getContextMenuConfig() {\n\t\t\tconst legacyWindow = this.legacyWindow || ( window as unknown as LegacyWindow & ExtendedWindow );\n\t\t\tconst elementorWithConfig = legacyWindow.elementor as typeof legacyWindow.elementor & {\n\t\t\t\tconfig?: { user?: { is_administrator?: boolean } };\n\t\t\t};\n\t\t\tconst isAdministrator = elementorWithConfig.config?.user?.is_administrator ?? false;\n\n\t\t\tconst addedGroup = {\n\t\t\t\tgeneral: {\n\t\t\t\t\tindex: 1,\n\t\t\t\t\taction: {\n\t\t\t\t\t\tname: 'edit component',\n\t\t\t\t\t\ticon: 'eicon-edit',\n\t\t\t\t\t\ttitle: () => __( 'Edit Component', 'elementor' ),\n\t\t\t\t\t\tisEnabled: () => true,\n\t\t\t\t\t\tcallback: ( _: unknown, eventData: ContextMenuEventData ) => this.editComponent( eventData ),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tconst disabledGroup = {\n\t\t\t\tclipboard: [ 'pasteStyle', 'resetStyle' ],\n\t\t\t};\n\n\t\t\treturn { add: isAdministrator ? addedGroup : {}, disable: disabledGroup };\n\t\t}\n\n\t\tasync switchDocument() {\n\t\t\t//todo: handle unpublished\n\t\t\tconst { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(\n\t\t\t\tthis.getComponentId() as number\n\t\t\t);\n\n\t\t\tif ( ! isAllowedToSwitchDocument ) {\n\t\t\t\toptions.showLockedByModal?.( lockedBy || '' );\n\t\t\t} else {\n\t\t\t\tswitchToComponent( this.getComponentId(), this.model.get( 'id' ) );\n\t\t\t}\n\t\t}\n\n\t\teditComponent( { trigger, location, secondaryLocation }: ContextMenuEventData ) {\n\t\t\tif ( this.isComponentCurrentlyEdited() ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.switchDocument();\n\n\t\t\tconst editorSettings = this.model.get( 'editor_settings' );\n\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'edited',\n\t\t\t\tcomponent_uid: editorSettings?.component_uid,\n\t\t\t\tcomponent_name: editorSettings?.title,\n\t\t\t\tlocation,\n\t\t\t\tsecondary_location: secondaryLocation,\n\t\t\t\ttrigger,\n\t\t\t} );\n\t\t}\n\n\t\thandleDblClick( e: MouseEvent ) {\n\t\t\te.stopPropagation();\n\n\t\t\tconst { triggers, locations, secondaryLocations } = this.eventsManagerConfig;\n\n\t\t\tthis.editComponent( {\n\t\t\t\ttrigger: triggers.doubleClick,\n\t\t\t\tlocation: locations.canvas,\n\t\t\t\tsecondaryLocation: secondaryLocations.canvasElement,\n\t\t\t} );\n\t\t}\n\n\t\tevents() {\n\t\t\treturn {\n\t\t\t\t...super.events(),\n\t\t\t\tdblclick: this.handleDblClick,\n\t\t\t};\n\t\t}\n\n\t\tattributes() {\n\t\t\treturn {\n\t\t\t\t...super.attributes(),\n\t\t\t\t'data-elementor-id': this.getComponentId(),\n\t\t\t};\n\t\t}\n\t};\n}\n\nfunction setInactiveRecursively( model: BackboneModel< ElementModel > ) {\n\tconst editSettings = model.get( 'editSettings' );\n\n\tif ( editSettings ) {\n\t\teditSettings.set( 'inactive', true );\n\t}\n\n\tconst elements = model.get( 'elements' );\n\n\tif ( elements ) {\n\t\telements.forEach( ( childModel ) => {\n\t\t\tsetInactiveRecursively( childModel );\n\t\t} );\n\t}\n}\n","import { type V1Element } from '@elementor/editor-elements';\nimport { getMixpanel } from '@elementor/mixpanel';\nimport { __getState as getState } from '@elementor/store';\n\nimport { selectCreatedThisSession } from '../store/store';\nimport { type ExtendedWindow } from '../types';\n\ntype ComponentEventData = Record< string, unknown > & {\n\taction: 'createClicked' | 'created' | 'createCancelled' | 'instanceAdded' | 'edited';\n};\n\nexport const trackComponentEvent = ( { action, ...data }: ComponentEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.components?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.components[ action ];\n\tdispatchEvent?.( name, data );\n};\n\nexport const onElementDrop = ( _args: unknown, element: V1Element ) => {\n\tif ( ! ( element.model.get( 'widgetType' ) === 'e-component' ) ) {\n\t\treturn;\n\t}\n\n\tconst editorSettings = element.model.get( 'editor_settings' );\n\tconst componentName = editorSettings?.title;\n\tconst componentUID = editorSettings?.component_uid;\n\tconst instanceId = element.id;\n\n\tconst createdThisSession = selectCreatedThisSession( getState() );\n\tconst isSameSessionReuse = componentUID && createdThisSession.includes( componentUID );\n\n\tconst eventsManagerConfig = ( window as unknown as ExtendedWindow ).elementorCommon.eventsManager.config;\n\tconst { locations, secondaryLocations } = eventsManagerConfig;\n\n\ttrackComponentEvent( {\n\t\taction: 'instanceAdded',\n\t\tinstance_id: instanceId,\n\t\tcomponent_uid: componentUID,\n\t\tcomponent_name: componentName,\n\t\tis_same_session_reuse: isSameSessionReuse,\n\t\tlocation: locations.widgetPanel,\n\t\tsecondary_location: secondaryLocations.componentsTab,\n\t} );\n};\n","import { type V1ElementModelProps } from '@elementor/editor-elements';\n\nimport { COMPONENT_WIDGET_TYPE } from '../create-component-type';\n\nexport function isComponentInstance( elementModel: Partial< V1ElementModelProps > ) {\n\treturn [ elementModel.widgetType, elementModel.elType ].includes( COMPONENT_WIDGET_TYPE );\n}\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nimport { type ComponentInstancePropValue } from '../types';\nimport { getComponentDocumentData } from './component-document-data';\nimport { isComponentInstance } from './is-component-instance';\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 = isComponentInstance( { widgetType, elType } );\n\n\t\tif ( isComponent ) {\n\t\t\tconst componentId = ( settings?.component_instance as ComponentInstancePropValue< number > )?.value\n\t\t\t\t?.component_id.value;\n\n\t\t\tconst document = await getComponentDocumentData( componentId );\n\n\t\t\tchildElements = document?.elements;\n\n\t\t\tif ( Boolean( componentId ) ) {\n\t\t\t\tids.push( componentId );\n\t\t\t}\n\t\t}\n\n\t\tif ( !! childElements?.length ) {\n\t\t\tids.push( ...( await getComponentIds( childElements ) ) );\n\t\t}\n\n\t\treturn ids;\n\t} );\n\n\tconst result = ( await Promise.all( components ) ).flat();\n\n\treturn Array.from( new Set( result ) );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { selectIsOverridablePropsLoaded, slice } from '../store';\n\nexport function loadComponentsOverridableProps( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tcomponentIds.forEach( loadComponentOverrides );\n}\n\nasync function loadComponentOverrides( componentId: number ) {\n\tconst isOverridablePropsLoaded = selectIsOverridablePropsLoaded( getState(), componentId );\n\n\tif ( isOverridablePropsLoaded ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = await apiClient.getOverridableProps( componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps,\n\t\t} )\n\t);\n}\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { type ComponentId } from '../../types';\nimport { selectStyles, slice } from '../store';\n\nexport async function loadComponentsStyles( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tconst knownComponents = selectStyles( getState() );\n\tconst unknownComponentIds = componentIds.filter( ( id ) => ! knownComponents[ id ] );\n\n\tif ( ! unknownComponentIds.length ) {\n\t\treturn;\n\t}\n\n\taddComponentStyles( unknownComponentIds );\n}\n\nasync function addComponentStyles( ids: ComponentId[] ) {\n\tconst newComponents = await loadStyles( ids );\n\n\taddStyles( newComponents );\n}\n\nasync function loadStyles( ids: number[] ): Promise< [ number, V1ElementData ][] > {\n\treturn Promise.all( ids.map( async ( id ) => [ id, await apiClient.getComponentConfig( id ) ] ) );\n}\n\nfunction addStyles( data: ( readonly [ ComponentId, V1ElementData ] )[] ) {\n\tconst styles = Object.fromEntries(\n\t\tdata.map( ( [ componentId, componentData ] ) => [ componentId, extractStyles( componentData ) ] )\n\t);\n\n\tdispatch( slice.actions.addStyles( styles ) );\n}\n\nfunction extractStyles( element: V1ElementData ): Array< StyleDefinition > {\n\treturn [ ...Object.values( element.styles ?? {} ), ...( element.elements ?? [] ).flatMap( extractStyles ) ];\n}\n","import {\n\tgetContainer,\n\tgetCurrentDocumentContainer,\n\tgetSelectedElements,\n\ttype V1Element,\n} from '@elementor/editor-elements';\n\nexport const getContainerForNewElement = (): { container: V1Element | null; options?: { at: number } } => {\n\tconst currentDocumentContainer = getCurrentDocumentContainer();\n\tconst selectedElement = getSelectedElementContainer();\n\n\tlet container, options;\n\n\tif ( selectedElement ) {\n\t\tswitch ( selectedElement.model.get( 'elType' ) ) {\n\t\t\tcase 'widget': {\n\t\t\t\tcontainer = selectedElement?.parent;\n\n\t\t\t\tconst selectedElIndex = selectedElement.view?._index ?? -1;\n\n\t\t\t\tif ( selectedElIndex > -1 ) {\n\t\t\t\t\toptions = { at: selectedElIndex + 1 };\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'section': {\n\t\t\t\tcontainer = selectedElement?.children?.[ 0 ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tcontainer = selectedElement;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { container: container ?? currentDocumentContainer, options };\n};\n\nfunction getSelectedElementContainer() {\n\tconst selectedElements = getSelectedElements();\n\n\tif ( selectedElements.length !== 1 ) {\n\t\treturn undefined;\n\t}\n\n\treturn getContainer( selectedElements[ 0 ].id );\n}\n","import { replaceElement, type V1ElementData, type V1ElementModelProps } from '@elementor/editor-elements';\n\nimport { type OverridableProps } from '../../../types';\n\ntype ComponentInstanceParams = {\n\tid?: number;\n\tname: string;\n\tuid: string;\n\toverridableProps?: OverridableProps;\n};\n\nexport const replaceElementWithComponent = ( element: V1ElementData, component: ComponentInstanceParams ) => {\n\treplaceElement( {\n\t\tcurrentElement: element,\n\t\tnewElement: createComponentModel( component ),\n\t\twithHistory: false,\n\t} );\n};\n\nexport const createComponentModel = ( component: ComponentInstanceParams ): Omit< V1ElementModelProps, 'id' > => {\n\treturn {\n\t\telType: 'widget',\n\t\twidgetType: 'e-component',\n\t\tsettings: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: {\n\t\t\t\t\t\t$$type: 'number',\n\t\t\t\t\t\tvalue: component.id ?? component.uid,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\toverridable_props: component.overridableProps,\n\t\t},\n\t\teditor_settings: {\n\t\t\ttitle: component.name,\n\t\t\tcomponent_uid: component.uid,\n\t\t},\n\t};\n};\n","import * as React from 'react';\nimport { Box, ListItemButton, Skeleton, Stack } from '@elementor/ui';\nconst ROWS_COUNT = 6;\n\nconst rows = Array.from( { length: ROWS_COUNT }, ( _, index ) => index );\n\nexport const LoadingComponents = () => {\n\treturn (\n\t\t<Stack\n\t\t\taria-label=\"Loading components\"\n\t\t\tgap={ 1 }\n\t\t\tsx={ {\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tposition: 'relative',\n\t\t\t\tmaxHeight: '300px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t'&:after': {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tcontent: '\"\"',\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '300px',\n\t\t\t\t\tbackground: 'linear-gradient(to top, white, transparent)',\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ rows.map( ( row ) => (\n\t\t\t\t<ListItemButton\n\t\t\t\t\tkey={ row }\n\t\t\t\t\tsx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t>\n\t\t\t\t\t<Box display=\"flex\" gap={ 1 } width=\"100%\">\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '24px' } height={ '36px' } />\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '100%' } height={ '36px' } />\n\t\t\t\t\t</Box>\n\t\t\t\t</ListItemButton>\n\t\t\t) ) }\n\t\t</Stack>\n\t);\n};\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n","import * as React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getElementLabel, type V1ElementData } from '@elementor/editor-elements';\nimport { Form as FormElement, ThemeProvider } from '@elementor/editor-ui';\nimport { StarIcon } from '@elementor/icons';\nimport { Alert, Button, FormLabel, Grid, Popover, Snackbar, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { createUnpublishedComponent } from '../../store/actions/create-unpublished-component';\nimport { type ComponentFormValues } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { useForm } from './hooks/use-form';\nimport { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';\nimport {\n\ttype ComponentEventData,\n\ttype ContextMenuEventOptions,\n\tgetComponentEventData,\n} from './utils/get-component-event-data';\n\ntype SaveAsComponentEventData = {\n\telement: V1ElementData;\n\tanchorPosition: { top: number; left: number };\n\toptions?: ContextMenuEventOptions;\n};\n\ntype ResultNotification = {\n\tshow: boolean;\n\tmessage: string;\n\ttype: 'success' | 'error';\n};\n\nexport function CreateComponentForm() {\n\tconst [ element, setElement ] = useState< {\n\t\telement: V1ElementData;\n\t\telementLabel: string;\n\t} | null >( null );\n\n\tconst [ anchorPosition, setAnchorPosition ] = useState< { top: number; left: number } >();\n\n\tconst [ resultNotification, setResultNotification ] = useState< ResultNotification | null >( null );\n\n\tconst eventData = useRef< ComponentEventData | null >( null );\n\n\tuseEffect( () => {\n\t\tconst OPEN_SAVE_AS_COMPONENT_FORM_EVENT = 'elementor/editor/open-save-as-component-form';\n\n\t\tconst openPopup = ( event: CustomEvent< SaveAsComponentEventData > ) => {\n\t\t\tsetElement( { element: event.detail.element, elementLabel: getElementLabel( event.detail.element.id ) } );\n\t\t\tsetAnchorPosition( event.detail.anchorPosition );\n\n\t\t\teventData.current = getComponentEventData( event.detail.element, event.detail.options );\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'createClicked',\n\t\t\t\t...eventData.current,\n\t\t\t} );\n\t\t};\n\n\t\twindow.addEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\t\t};\n\t}, [] );\n\n\tconst handleSave = ( values: ComponentFormValues ) => {\n\t\ttry {\n\t\t\tif ( ! element ) {\n\t\t\t\tthrow new Error( `Can't save element as component: element not found` );\n\t\t\t}\n\n\t\t\tconst uid = createUnpublishedComponent( values.componentName, element.element, eventData.current );\n\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\t// Translators: %1$s: Component name, %2$s: Component UID\n\t\t\t\tmessage: __( 'Component saved successfully as: %1$s (UID: %2$s)', 'elementor' )\n\t\t\t\t\t.replace( '%1$s', values.componentName )\n\t\t\t\t\t.replace( '%2$s', uid ),\n\t\t\t\ttype: 'success',\n\t\t\t} );\n\n\t\t\tresetAndClosePopup();\n\t\t} catch {\n\t\t\tconst errorMessage = __( 'Failed to save component. Please try again.', 'elementor' );\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t\ttype: 'error',\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst resetAndClosePopup = () => {\n\t\tsetElement( null );\n\t\tsetAnchorPosition( undefined );\n\t};\n\n\tconst cancelSave = () => {\n\t\tresetAndClosePopup();\n\n\t\ttrackComponentEvent( {\n\t\t\taction: 'createCancelled',\n\t\t\t...eventData.current,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Popover\n\t\t\t\topen={ element !== null }\n\t\t\t\tonClose={ cancelSave }\n\t\t\t\tanchorReference=\"anchorPosition\"\n\t\t\t\tanchorPosition={ anchorPosition }\n\t\t\t>\n\t\t\t\t{ element !== null && (\n\t\t\t\t\t<Form\n\t\t\t\t\t\tinitialValues={ { componentName: element.elementLabel } }\n\t\t\t\t\t\thandleSave={ handleSave }\n\t\t\t\t\t\tclosePopup={ cancelSave }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</Popover>\n\t\t\t<Snackbar open={ resultNotification?.show } onClose={ () => setResultNotification( null ) }>\n\t\t\t\t<Alert\n\t\t\t\t\tonClose={ () => setResultNotification( null ) }\n\t\t\t\t\tseverity={ resultNotification?.type }\n\t\t\t\t\tsx={ { width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t{ resultNotification?.message }\n\t\t\t\t</Alert>\n\t\t\t</Snackbar>\n\t\t</ThemeProvider>\n\t);\n}\n\nconst FONT_SIZE = 'tiny';\n\nconst Form = ( {\n\tinitialValues,\n\thandleSave,\n\tclosePopup,\n}: {\n\tinitialValues: ComponentFormValues;\n\thandleSave: ( values: ComponentFormValues ) => void;\n\tclosePopup: () => void;\n} ) => {\n\tconst { values, errors, isValid, handleChange, validateForm } = useForm< ComponentFormValues >( initialValues );\n\n\tconst { components } = useComponents();\n\n\tconst existingComponentNames = useMemo( () => {\n\t\treturn components?.map( ( component ) => component.name ) ?? [];\n\t}, [ components ] );\n\n\tconst changeValidationSchema = useMemo(\n\t\t() => createBaseComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\tconst submitValidationSchema = useMemo(\n\t\t() => createSubmitComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\n\tconst handleSubmit = () => {\n\t\tconst { success, parsedValues } = validateForm( submitValidationSchema );\n\n\t\tif ( success ) {\n\t\t\thandleSave( parsedValues );\n\t\t}\n\t};\n\n\tconst texts = {\n\t\theading: __( 'Save as a component', 'elementor' ),\n\t\tname: __( 'Name', 'elementor' ),\n\t\tcancel: __( 'Cancel', 'elementor' ),\n\t\tcreate: __( 'Create', 'elementor' ),\n\t};\n\n\tconst nameInputId = 'component-name';\n\n\treturn (\n\t\t<FormElement onSubmit={ handleSubmit }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t<StarIcon fontSize={ FONT_SIZE } />\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ texts.heading }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" p={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel htmlFor={ nameInputId } size=\"tiny\">\n\t\t\t\t\t\t\t{ texts.name }\n\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tid={ nameInputId }\n\t\t\t\t\t\t\tsize={ FONT_SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ values.componentName }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\t\thandleChange( e, 'componentName', changeValidationSchema )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinputProps={ { style: { color: 'text.primary', fontWeight: '600' } } }\n\t\t\t\t\t\t\terror={ Boolean( errors.componentName ) }\n\t\t\t\t\t\t\thelperText={ errors.componentName }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button onClick={ closePopup } color=\"secondary\" variant=\"text\" size=\"small\">\n\t\t\t\t\t\t{ texts.cancel }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! isValid } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ texts.create }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</FormElement>\n\t);\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { type ComponentEventData } from '../../components/create-component-form/utils/get-component-event-data';\nimport { replaceElementWithComponent } from '../../components/create-component-form/utils/replace-element-with-component';\nimport { type OverridableProps } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { slice } from '../store';\n\nexport function createUnpublishedComponent(\n\tname: string,\n\telement: V1ElementData,\n\teventData: ComponentEventData | null,\n\toverridableProps?: OverridableProps,\n\tuid?: string | null\n) {\n\tconst generatedUid = uid ?? generateUniqueId( 'component' );\n\tconst componentBase = { uid: generatedUid, name, overridableProps };\n\n\tdispatch(\n\t\tslice.actions.addUnpublished( {\n\t\t\t...componentBase,\n\t\t\telements: [ element ],\n\t\t} )\n\t);\n\n\tdispatch( slice.actions.addCreatedThisSession( generatedUid ) );\n\n\treplaceElementWithComponent( element, componentBase );\n\n\ttrackComponentEvent( {\n\t\taction: 'created',\n\t\tcomponent_uid: generatedUid,\n\t\tcomponent_name: name,\n\t\t...eventData,\n\t} );\n\n\trunCommand( 'document/save/auto' );\n\n\treturn generatedUid;\n}\n","import { useMemo, useState } from 'react';\nimport { type z } from '@elementor/schema';\n\nexport const useForm = < TValues extends Record< string, unknown > >( initialValues: TValues ) => {\n\tconst [ values, setValues ] = useState< TValues >( initialValues );\n\tconst [ errors, setErrors ] = useState< Partial< Record< keyof TValues, string > > >( {} );\n\n\tconst isValid = useMemo( () => {\n\t\treturn ! Object.values( errors ).some( ( error ) => error );\n\t}, [ errors ] );\n\n\tconst handleChange = (\n\t\te: React.ChangeEvent< HTMLInputElement >,\n\t\tfield: keyof TValues,\n\t\tvalidationSchema: z.ZodType< TValues >\n\t) => {\n\t\tconst updated = { ...values, [ field ]: e.target.value };\n\t\tsetValues( updated );\n\n\t\tconst { success, errors: validationErrors } = validateForm( updated, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t} else {\n\t\t\tsetErrors( {} );\n\t\t}\n\t};\n\n\tconst validate = (\n\t\tvalidationSchema: z.ZodType< TValues >\n\t): { success: true; parsedValues: TValues } | { success: false; parsedValues?: never } => {\n\t\tconst { success, errors: validationErrors, parsedValues } = validateForm( values, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t\treturn { success };\n\t\t}\n\t\tsetErrors( {} );\n\t\treturn { success, parsedValues };\n\t};\n\n\treturn {\n\t\tvalues,\n\t\terrors,\n\t\tisValid,\n\t\thandleChange,\n\t\tvalidateForm: validate,\n\t};\n};\n\nconst validateForm = < TValues extends Record< string, unknown > >(\n\tvalues: TValues,\n\tschema: z.ZodType< TValues >\n):\n\t| { success: false; parsedValues?: never; errors: Partial< Record< keyof TValues, string > > }\n\t| { success: true; parsedValues: TValues; errors?: never } => {\n\tconst result = schema.safeParse( values );\n\n\tif ( result.success ) {\n\t\treturn { success: true, parsedValues: result.data };\n\t}\n\n\tconst errors = {} as Partial< Record< keyof TValues, string > >;\n\n\t( Object.entries( result.error.formErrors.fieldErrors ) as Array< [ keyof TValues, string[] ] > ).forEach(\n\t\t( [ field, error ] ) => {\n\t\t\terrors[ field ] = error[ 0 ];\n\t\t}\n\t);\n\n\treturn { success: false, errors };\n};\n","import { z } from '@elementor/schema';\nimport { __ } from '@wordpress/i18n';\n\nconst MIN_NAME_LENGTH = 2;\nconst MAX_NAME_LENGTH = 50;\n\nexport const createBaseComponentSchema = ( existingNames: string[] ) => {\n\treturn z.object( {\n\t\tcomponentName: z\n\t\t\t.string()\n\t\t\t.trim()\n\t\t\t.max(\n\t\t\t\tMAX_NAME_LENGTH,\n\t\t\t\t__( 'Component name is too long. Please keep it under 50 characters.', 'elementor' )\n\t\t\t)\n\t\t\t.refine( ( value ) => ! existingNames.includes( value ), {\n\t\t\t\tmessage: __( 'Component name already exists', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n\nexport const createSubmitComponentSchema = ( existingNames: string[] ) => {\n\tconst baseSchema = createBaseComponentSchema( existingNames );\n\n\treturn baseSchema.extend( {\n\t\tcomponentName: baseSchema.shape.componentName\n\t\t\t.refine( ( value ) => value.length > 0, {\n\t\t\t\tmessage: __( 'Component name is required.', 'elementor' ),\n\t\t\t} )\n\t\t\t.refine( ( value ) => value.length >= MIN_NAME_LENGTH, {\n\t\t\t\tmessage: __( 'Component name is too short. Please enter at least 2 characters.', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nexport type ComponentEventData = {\n\tnested_elements_count: number;\n\tnested_components_count: number;\n\ttop_element_type: string;\n\tlocation?: string;\n\tsecondary_location?: string;\n\ttrigger?: string;\n};\n\nexport type ContextMenuEventOptions = Record< string, unknown > & {\n\tlocation: string;\n\tsecondaryLocation: string;\n\ttrigger: string;\n};\n\nexport const getComponentEventData = (\n\tcontainerElement: V1ElementData,\n\toptions?: ContextMenuEventOptions\n): ComponentEventData => {\n\tconst { elementsCount, componentsCount } = countNestedElements( containerElement );\n\n\treturn {\n\t\tnested_elements_count: elementsCount,\n\t\tnested_components_count: componentsCount,\n\t\ttop_element_type: containerElement.elType,\n\t\tlocation: options?.location,\n\t\tsecondary_location: options?.secondaryLocation,\n\t\ttrigger: options?.trigger,\n\t};\n};\n\nfunction countNestedElements( container: V1ElementData ): { elementsCount: number; componentsCount: number } {\n\tif ( ! container.elements || container.elements.length === 0 ) {\n\t\treturn { elementsCount: 0, componentsCount: 0 };\n\t}\n\n\tlet elementsCount = container.elements.length;\n\tlet componentsCount = 0;\n\n\tfor ( const element of container.elements ) {\n\t\tif ( element.widgetType === 'e-component' ) {\n\t\t\tcomponentsCount++;\n\t\t}\n\n\t\tconst { elementsCount: nestedElementsCount, componentsCount: nestedComponentsCount } =\n\t\t\tcountNestedElements( element );\n\t\telementsCount += nestedElementsCount;\n\t\tcomponentsCount += nestedComponentsCount;\n\t}\n\n\treturn { elementsCount, componentsCount };\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { getV1DocumentsManager, type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { __useSelector as useSelector } from '@elementor/store';\nimport { throttle } from '@elementor/utils';\n\nimport { apiClient } from '../../api';\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { updateCurrentComponent } from '../../store/actions/update-current-component';\nimport { type ComponentsPathItem, selectPath, useCurrentComponentId } from '../../store/store';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { ComponentModal } from './component-modal';\n\nexport function EditComponent() {\n\tconst currentComponentId = useCurrentComponentId();\n\n\tuseHandleDocumentSwitches();\n\n\tconst navigateBack = useNavigateBack();\n\n\tconst onClose = throttle( navigateBack, 100 );\n\n\tconst elementDom = getComponentDOMElement( currentComponentId ?? undefined );\n\n\tif ( ! elementDom ) {\n\t\treturn null;\n\t}\n\n\treturn <ComponentModal element={ elementDom } onClose={ onClose } />;\n}\n\nfunction useHandleDocumentSwitches() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentComponentId = useCurrentComponentId();\n\tconst path = useSelector( selectPath );\n\n\tuseEffect( () => {\n\t\treturn listenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\t\tconst nextDocument = documentsManager.getCurrent();\n\n\t\t\tif ( nextDocument.id === currentComponentId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( currentComponentId ) {\n\t\t\t\tapiClient.unlockComponent( currentComponentId );\n\t\t\t}\n\n\t\t\tconst isComponent = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;\n\n\t\t\tif ( ! isComponent ) {\n\t\t\t\tupdateCurrentComponent( { path: [], currentComponentId: null } );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateCurrentComponent( {\n\t\t\t\tpath: getUpdatedComponentPath( path, nextDocument ),\n\t\t\t\tcurrentComponentId: nextDocument.id,\n\t\t\t} );\n\t\t} );\n\t}, [ path, documentsManager, currentComponentId ] );\n}\n\nfunction getUpdatedComponentPath( path: ComponentsPathItem[], nextDocument: V1Document ): ComponentsPathItem[] {\n\tconst componentIndex = path.findIndex( ( { componentId } ) => componentId === nextDocument.id );\n\n\tif ( componentIndex >= 0 ) {\n\t\t// When exiting the editing of a nested component - we in fact go back a step\n\t\t// so we need to make sure the path is cleaned up of any newer items\n\t\t// By doing it with the slice and not a simple pop() - we could jump to any component in the path and make sure it becomes the current one\n\t\treturn path.slice( 0, componentIndex + 1 );\n\t}\n\n\treturn [\n\t\t...path,\n\t\t{\n\t\t\tinstanceId: nextDocument?.container.view?.el?.dataset.id,\n\t\t\tcomponentId: nextDocument.id,\n\t\t},\n\t];\n}\n\nfunction getComponentDOMElement( id: V1Document[ 'id' ] | undefined ) {\n\tif ( ! id ) {\n\t\treturn null;\n\t}\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\tconst currentComponent = documentsManager.get( id );\n\n\tconst widget = currentComponent?.container as V1Element;\n\tconst container = ( widget?.view?.el?.children?.[ 0 ] ?? null ) as HTMLElement | null;\n\tconst elementDom = container?.children[ 0 ] as HTMLElement | null;\n\n\treturn elementDom ?? null;\n}\n","import { setDocumentModifiedStatus, type V1Document } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { type ComponentsPathItem, slice } from '../store';\n\nexport function updateCurrentComponent( {\n\tpath,\n\tcurrentComponentId,\n}: {\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n} ) {\n\tconst dispatch = getStore()?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.setPath( path ) );\n\tdispatch( slice.actions.setCurrentComponentId( currentComponentId ) );\n}\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import * as React from 'react';\nimport { type CSSProperties, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCanvasDocument } from '../../hooks/use-canvas-document';\nimport { useElementRect } from '../../hooks/use-element-rect';\n\ntype ModalProps = {\n\telement: HTMLElement;\n\tonClose: () => void;\n};\n\nexport function ComponentModal( { element, onClose }: ModalProps ) {\n\tconst canvasDocument = useCanvasDocument();\n\n\tuseEffect( () => {\n\t\tconst handleEsc = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tcanvasDocument?.body.addEventListener( 'keydown', handleEsc );\n\n\t\treturn () => {\n\t\t\tcanvasDocument?.body.removeEventListener( 'keydown', handleEsc );\n\t\t};\n\t}, [ canvasDocument, onClose ] );\n\n\tif ( ! canvasDocument?.body ) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<>\n\t\t\t<BlockEditPage />\n\t\t\t<Backdrop canvas={ canvasDocument } element={ element } onClose={ onClose } />\n\t\t</>,\n\t\tcanvasDocument.body\n\t);\n}\n\nfunction Backdrop( { canvas, element, onClose }: { canvas: HTMLDocument; element: HTMLElement; onClose: () => void } ) {\n\tconst rect = useElementRect( element );\n\tconst backdropStyle: CSSProperties = {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\twidth: '100vw',\n\t\theight: '100vh',\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\t\tzIndex: 999,\n\t\tpointerEvents: 'painted',\n\t\tcursor: 'pointer',\n\t\tclipPath: getRoundedRectPath( rect, canvas.defaultView as Window, 5 ),\n\t};\n\n\tconst handleKeyDown = ( event: React.KeyboardEvent ) => {\n\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\tevent.preventDefault();\n\t\t\tonClose();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tstyle={ backdropStyle }\n\t\t\tonClick={ onClose }\n\t\t\tonKeyDown={ handleKeyDown }\n\t\t\trole=\"button\"\n\t\t\ttabIndex={ 0 }\n\t\t\taria-label={ __( 'Exit component editing mode', 'elementor' ) }\n\t\t/>\n\t);\n}\n\nfunction getRoundedRectPath( rect: DOMRect, viewport: Window, borderRadius: number ) {\n\tconst padding = borderRadius / 2;\n\tconst { x: originalX, y: originalY, width: originalWidth, height: originalHeight } = rect;\n\tconst x = originalX - padding;\n\tconst y = originalY - padding;\n\tconst width = originalWidth + 2 * padding;\n\tconst height = originalHeight + 2 * padding;\n\tconst radius = Math.min( borderRadius, width / 2, height / 2 );\n\n\tconst { innerWidth: vw, innerHeight: vh } = viewport;\n\n\tconst path = `path(evenodd, 'M 0 0 \n\t\tL ${ vw } 0\n\t\tL ${ vw } ${ vh }\n\t\tL 0 ${ vh }\n\t\tZ\n\t\tM ${ x + radius } ${ y }\n\t\tL ${ x + width - radius } ${ y }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width } ${ y + radius }\n\t\tL ${ x + width } ${ y + height - radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width - radius } ${ y + height }\n\t\tL ${ x + radius } ${ y + height }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x } ${ y + height - radius }\n\t\tL ${ x } ${ y + radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + radius } ${ y }\n \tZ'\n\t)`;\n\n\treturn path.replace( /\\s{2,}/g, ' ' );\n}\n\n/**\n * when switching to another document id, we get a document handler when hovering\n * this functionality originates in Pro, and is intended for editing templates, e.g. header/footer\n * in components we don't want that, so the easy way out is to prevent it of being displayed via a CSS rule\n */\nfunction BlockEditPage() {\n\tconst blockV3DocumentHandlesStyles = `\n\t.elementor-editor-active {\n\t\t& .elementor-section-wrap.ui-sortable {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\t& *[data-editable-elementor-document]:not(.elementor-edit-mode):hover {\n\t\t\t& .elementor-document-handle:not(.elementor-document-save-back-handle) {\n\t\t\t\tdisplay: none;\n\n\t\t\t\t&::before,\n\t\t\t\t& .elementor-document-handle__inner {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t`;\n\n\treturn <style data-e-style-id=\"e-block-v3-document-handles-styles\">{ blockV3DocumentHandlesStyles }</style>;\n}\n","import { getCanvasIframeDocument } from '@elementor/editor-canvas';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\n\nexport function useCanvasDocument() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument() );\n}\n","import { useEffect, useState } from 'react';\nimport { throttle } from '@elementor/utils';\n\nexport function useElementRect( element: HTMLElement | null ) {\n\tconst [ rect, setRect ] = useState< DOMRect >( new DOMRect( 0, 0, 0, 0 ) );\n\n\tconst onChange = throttle(\n\t\t() => {\n\t\t\tsetRect( element?.getBoundingClientRect() ?? new DOMRect( 0, 0, 0, 0 ) );\n\t\t},\n\t\t20,\n\t\ttrue\n\t);\n\n\tuseScrollListener( { element, onChange } );\n\tuseResizeListener( { element, onChange } );\n\tuseMutationsListener( { element, onChange } );\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tonChange.cancel();\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\treturn rect;\n}\n\ntype ListenerProps = {\n\telement: HTMLElement | null;\n\tonChange: () => void;\n};\n\nfunction useScrollListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'scroll', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\twin?.removeEventListener( 'scroll', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useResizeListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeObserver = new ResizeObserver( onChange );\n\t\tresizeObserver.observe( element );\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'resize', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\twin?.removeEventListener( 'resize', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useMutationsListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mutationObserver = new MutationObserver( onChange );\n\t\tmutationObserver.observe( element, { childList: true, subtree: true } );\n\n\t\treturn () => {\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, [ element, onChange ] );\n}\n","import * as React from 'react';\nimport { closeDialog, openDialog } from '@elementor/editor-ui';\nimport { InfoCircleFilledIcon } from '@elementor/icons';\nimport { Box, Button, DialogActions, DialogContent, DialogHeader, Icon, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const openEditModeDialog = ( lockedBy: string ) => {\n\topenDialog( {\n\t\tcomponent: <EditModeDialog lockedBy={ lockedBy } />,\n\t} );\n};\n\nconst EditModeDialog = ( { lockedBy }: { lockedBy: string } ) => {\n\t/* translators: %s is the name of the user who is currently editing the document */\n\tconst content = __( '%s is currently editing this document', 'elementor' ).replace( '%s', lockedBy );\n\treturn (\n\t\t<>\n\t\t\t<DialogHeader logo={ false }>\n\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t\t<Icon color=\"secondary\">\n\t\t\t\t\t\t<InfoCircleFilledIcon fontSize=\"medium\" />\n\t\t\t\t\t</Icon>\n\t\t\t\t\t<Typography variant=\"subtitle1\">{ content }</Typography>\n\t\t\t\t</Box>\n\t\t\t</DialogHeader>\n\t\t\t<DialogContent>\n\t\t\t\t<Stack spacing={ 2 } direction=\"column\">\n\t\t\t\t\t<Typography variant=\"body2\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'You can wait for them to finish or reach out to coordinate your changes together.',\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<DialogActions>\n\t\t\t\t\t\t<Button color=\"secondary\" variant=\"contained\" onClick={ closeDialog }>\n\t\t\t\t\t\t\t{ __( 'Close', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</DialogActions>\n\t\t\t\t</Stack>\n\t\t\t</DialogContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { useElementSetting, useSelectedElement } from '@elementor/editor-elements';\nimport { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { type NumberPropValue } from '@elementor/editor-props';\nimport { ComponentsIcon, PencilIcon } from '@elementor/icons';\nimport { __getState as getState } from '@elementor/store';\nimport { IconButton, Stack, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstancePropTypeUtil } from '../../prop-types/component-instance-prop-type';\nimport { selectComponent, selectOverridableProps } from '../../store/store';\nimport { type OverridablePropsGroup } from '../../types';\nimport { switchToComponent } from '../../utils/switch-to-component';\nimport { EmptyState } from './empty-state';\nimport { OverridePropsGroup } from './override-props-group';\n\nexport function InstanceEditingPanel() {\n\tconst { element } = useElement();\n\tconst settings = useElementSetting( element.id, 'component_instance' );\n\tconst componentId = ( componentInstancePropTypeUtil.extract( settings )?.component_id as NumberPropValue )?.value;\n\n\tconst component = componentId ? selectComponent( getState(), componentId ) : null;\n\tconst overridableProps = componentId ? selectOverridableProps( getState(), componentId ) : null;\n\n\tconst componentInstanceId = useSelectedElement()?.element?.id ?? null;\n\n\tif ( ! componentId || ! overridableProps || ! component ) {\n\t\treturn null;\n\t}\n\n\t/* translators: %s: component name. */\n\tconst panelTitle = __( 'Edit %s', 'elementor' ).replace( '%s', component.name );\n\n\tconst handleEditComponent = () => switchToComponent( componentId, componentInstanceId );\n\n\tconst groups = overridableProps.groups.order\n\t\t.map( ( groupId ) =>\n\t\t\toverridableProps.groups.items[ groupId ] ? overridableProps.groups.items[ groupId ] : null\n\t\t)\n\t\t.filter( Boolean ) as OverridablePropsGroup[];\n\n\tconst isEmpty = groups.length === 0 || Object.keys( overridableProps.props ).length === 0;\n\n\treturn (\n\t\t<>\n\t\t\t<PanelHeader sx={ { justifyContent: 'start', px: 2 } }>\n\t\t\t\t<Stack direction=\"row\" alignContent=\"space-between\" flexGrow={ 1 }>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"start\" gap={ 1 } flexGrow={ 1 }>\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"small\" sx={ { color: 'text.tertiary' } } />\n\t\t\t\t\t\t<PanelHeaderTitle>{ component.name }</PanelHeaderTitle>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Tooltip title={ panelTitle }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ handleEditComponent } aria-label={ panelTitle }>\n\t\t\t\t\t\t\t<PencilIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</Stack>\n\t\t\t</PanelHeader>\n\t\t\t<PanelBody>\n\t\t\t\t{ isEmpty ? (\n\t\t\t\t\t<EmptyState onEditComponent={ handleEditComponent } />\n\t\t\t\t) : (\n\t\t\t\t\t<Stack direction=\"column\" alignItems=\"stretch\">\n\t\t\t\t\t\t{ groups.map( ( group ) => (\n\t\t\t\t\t\t\t<OverridePropsGroup key={ group.id } group={ group } props={ overridableProps.props } />\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</Stack>\n\t\t\t\t) }\n\t\t\t</PanelBody>\n\t\t</>\n\t);\n}\n","import { createPropUtils, numberPropTypeUtil } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridesPropTypeUtil } from './component-instance-overrides-prop-type';\n\nexport const componentInstancePropTypeUtil = createPropUtils(\n\t'component-instance',\n\tz.object( {\n\t\tcomponent_id: numberPropTypeUtil.schema,\n\t\toverrides: z.optional( componentInstanceOverridesPropTypeUtil.schema ),\n\t} )\n);\n\nexport type ComponentInstancePropValue = z.infer< typeof componentInstancePropTypeUtil.schema >[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridePropTypeUtil } from './component-instance-override-prop-type';\n\nexport const componentInstanceOverridesPropTypeUtil = createPropUtils(\n\t'overrides',\n\tz.array( componentInstanceOverridePropTypeUtil.schema ).optional().default( [] )\n);\n\nexport type ComponentInstanceOverridesPropValue = z.infer<\n\ttypeof componentInstanceOverridesPropTypeUtil.schema\n>[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentInstanceOverridePropTypeUtil = createPropUtils(\n\t'override',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\toverride_value: z.unknown(),\n\t\tschema_source: z.object( {\n\t\t\ttype: z.literal( 'component' ),\n\t\t\tid: z.number(),\n\t\t} ),\n\t} )\n);\n\nexport type ComponentInstanceOverrideProp = z.infer< typeof componentInstanceOverridePropTypeUtil.schema >;\n\nexport type ComponentInstanceOverridePropValue = ComponentInstanceOverrideProp[ 'value' ];\n","import * as React from 'react';\nimport { ComponentPropListIcon, PencilIcon } from '@elementor/icons';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EmptyState = ( { onEditComponent }: { onEditComponent: () => void } ) => {\n\treturn (\n\t\t<Stack\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"start\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5, mt: 1 } }\n\t\t\tgap={ 1.5 }\n\t\t>\n\t\t\t<ComponentPropListIcon fontSize=\"large\" />\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'No properties yet', 'elementor' ) }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"170px\">\n\t\t\t\t{ __(\n\t\t\t\t\t'Edit the component to add properties, manage them or update the design across all instances.',\n\t\t\t\t\t'elementor'\n\t\t\t\t) }\n\t\t\t</Typography>\n\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" sx={ { mt: 1 } } onClick={ onEditComponent }>\n\t\t\t\t<PencilIcon fontSize=\"small\" />\n\t\t\t\t{ __( 'Edit component', 'elementor' ) }\n\t\t\t</Button>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { useId } from 'react';\nimport { useStateByElement } from '@elementor/editor-editing-panel';\nimport { CollapseIcon } from '@elementor/editor-ui';\nimport { Collapse, ListItemButton, ListItemText, Stack } from '@elementor/ui';\n\nimport { type OverridableProp, type OverridablePropsGroup } from '../../types';\n\ntype Props = {\n\tgroup: OverridablePropsGroup;\n\tprops: Record< string, OverridableProp >;\n};\n\nexport function OverridePropsGroup( { group, props }: Props ) {\n\tconst [ isOpen, setIsOpen ] = useStateByElement( group.id, true );\n\n\tconst handleClick = () => {\n\t\tsetIsOpen( ! isOpen );\n\t};\n\n\tconst id = useId();\n\tconst labelId = `label-${ id }`;\n\tconst contentId = `content-${ id }`;\n\n\tconst title = group.label;\n\n\treturn (\n\t\t<>\n\t\t\t<ListItemButton\n\t\t\t\tid={ labelId }\n\t\t\t\taria-controls={ contentId }\n\t\t\t\taria-label={ `${ title } section` }\n\t\t\t\tonClick={ handleClick }\n\t\t\t\tp={ 0 }\n\t\t\t\tsx={ { '&:hover': { backgroundColor: 'transparent' } } }\n\t\t\t>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyItems=\"start\" flexGrow={ 1 } gap={ 0.5 }>\n\t\t\t\t\t<ListItemText\n\t\t\t\t\t\tsecondary={ title }\n\t\t\t\t\t\tsecondaryTypographyProps={ { color: 'text.primary', variant: 'caption', fontWeight: 'bold' } }\n\t\t\t\t\t\tsx={ { flexGrow: 0, flexShrink: 1, marginInlineEnd: 1 } }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t\t<CollapseIcon open={ isOpen } color=\"secondary\" fontSize=\"tiny\" />\n\t\t\t</ListItemButton>\n\t\t\t<Collapse id={ contentId } aria-labelledby={ labelId } in={ isOpen } timeout=\"auto\">\n\t\t\t\t<Stack direction=\"column\" gap={ 1 } p={ 2 }>\n\t\t\t\t\t{ group.props.map( ( propId ) => (\n\t\t\t\t\t\t// TODO: Render actual controls\n\t\t\t\t\t\t<pre key={ propId }>{ JSON.stringify( props[ propId ], null, 2 ) }</pre>\n\t\t\t\t\t) ) }\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { type ComponentType } from 'react';\nimport { ControlReplacementsProvider, PropKeyProvider, PropProvider, useBoundProp } from '@elementor/editor-controls';\nimport { createTopLevelObjectType, useElement } from '@elementor/editor-editing-panel';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport {\n\tcomponentOverridablePropTypeUtil,\n\ttype ComponentOverridablePropValue,\n} from '../../prop-types/component-overridable-prop-type';\nimport { OverridablePropProvider } from '../../provider/overridable-prop-context';\nimport { updateOverridablePropOriginValue } from '../../store/actions/update-overridable-prop-origin-value';\nimport { useCurrentComponentId } from '../../store/store';\n\nexport function OverridablePropControl< T extends object >( {\n\tOriginalControl,\n\t...props\n}: T & { OriginalControl: ComponentType< T > } ) {\n\tconst { elementType } = useElement();\n\n\tconst { value, bind, setValue, placeholder, ...propContext } = useBoundProp( componentOverridablePropTypeUtil );\n\tconst componentId = useCurrentComponentId();\n\n\tif ( ! componentId ) {\n\t\treturn null;\n\t}\n\n\tif ( ! value?.override_key ) {\n\t\tthrow new Error( 'Override key is required' );\n\t}\n\n\tconst setOverridableValue = ( newValue: Record< typeof bind, PropValue | null > ) => {\n\t\tconst propValue = {\n\t\t\t...value,\n\t\t\torigin_value: newValue[ bind ],\n\t\t} as ComponentOverridablePropValue;\n\n\t\tsetValue( propValue );\n\t\tupdateOverridablePropOriginValue( componentId, propValue );\n\t};\n\n\tconst propType = createTopLevelObjectType( {\n\t\tschema: {\n\t\t\t[ bind ]: elementType.propsSchema[ bind ],\n\t\t},\n\t} );\n\n\tconst objectPlaceholder: Record< string, PropValue > | undefined = placeholder\n\t\t? { [ bind ]: placeholder }\n\t\t: undefined;\n\n\treturn (\n\t\t<OverridablePropProvider value={ value }>\n\t\t\t<PropProvider\n\t\t\t\t{ ...propContext }\n\t\t\t\tpropType={ propType }\n\t\t\t\tsetValue={ setOverridableValue }\n\t\t\t\tvalue={ { [ bind ]: value.origin_value } }\n\t\t\t\tplaceholder={ objectPlaceholder }\n\t\t\t>\n\t\t\t\t<PropKeyProvider bind={ bind }>\n\t\t\t\t\t<ControlReplacementsProvider replacements={ [] }>\n\t\t\t\t\t\t<OriginalControl { ...( props as T ) } />\n\t\t\t\t\t</ControlReplacementsProvider>\n\t\t\t\t</PropKeyProvider>\n\t\t\t</PropProvider>\n\t\t</OverridablePropProvider>\n\t);\n}\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const componentOverridablePropTypeUtil = createPropUtils(\n\t'overridable',\n\tz.object( {\n\t\toverride_key: z.string(),\n\t\torigin_value: z\n\t\t\t.object( {\n\t\t\t\t$$type: z.string(),\n\t\t\t\tvalue: z.unknown(),\n\t\t\t} )\n\t\t\t.nullable(),\n\t} )\n);\n\nexport type ComponentOverridablePropValue = z.infer< typeof componentOverridablePropTypeUtil.schema >[ 'value' ];\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\nimport { type ComponentOverridablePropValue } from '../prop-types/component-overridable-prop-type';\n\ntype OverridablePropData = {\n\tvalue: ComponentOverridablePropValue;\n};\n\nconst OverridablePropContext = createContext< OverridablePropData | null >( null );\n\nexport function OverridablePropProvider( { children, ...props }: PropsWithChildren< OverridablePropData > ) {\n\treturn <OverridablePropContext.Provider value={ props }>{ children }</OverridablePropContext.Provider>;\n}\n\nexport const useOverridablePropValue = () => useContext( OverridablePropContext )?.value;\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentOverridablePropValue } from '../../prop-types/component-overridable-prop-type';\nimport { type OverridableProps } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\nexport function updateOverridablePropOriginValue( componentId: number, propValue: ComponentOverridablePropValue ) {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst existingOverridableProp = overridableProps.props[ propValue.override_key ];\n\n\tif ( ! existingOverridableProp ) {\n\t\treturn;\n\t}\n\n\tconst newOverridableProps = {\n\t\t...overridableProps,\n\t\tprops: {\n\t\t\t...overridableProps.props,\n\t\t\t[ existingOverridableProp.overrideKey ]: {\n\t\t\t\t...existingOverridableProp,\n\t\t\t\toriginValue: propValue.origin_value,\n\t\t\t},\n\t\t},\n\t} satisfies OverridableProps;\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: newOverridableProps,\n\t\t} )\n\t);\n}\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { useElement } from '@elementor/editor-editing-panel';\nimport { getWidgetsCache } from '@elementor/editor-elements';\nimport { type TransformablePropValue } from '@elementor/editor-props';\nimport { __getState as getState } from '@elementor/store';\nimport { bindPopover, bindTrigger, Popover, Tooltip, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentOverridablePropTypeUtil } from '../../prop-types/component-overridable-prop-type';\nimport { useOverridablePropValue } from '../../provider/overridable-prop-context';\nimport { setOverridableProp } from '../../store/actions/set-overridable-prop';\nimport { selectOverridableProps, useCurrentComponentId } from '../../store/store';\nimport { type OverridableProps } from '../../types';\nimport { Indicator } from './indicator';\nimport { OverridablePropForm } from './overridable-prop-form';\nimport { getOverridableProp } from './utils/get-overridable-prop';\n\nconst FORBIDDEN_KEYS = [ '_cssid', 'attributes' ];\n\nexport function OverridablePropIndicator() {\n\tconst { bind } = useBoundProp();\n\tconst componentId = useCurrentComponentId();\n\n\tif ( ! isPropAllowed( bind ) || ! componentId ) {\n\t\treturn null;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\treturn <Content componentId={ componentId } overridableProps={ overridableProps } />;\n}\n\ntype Props = {\n\tcomponentId: number;\n\toverridableProps?: OverridableProps;\n};\nexport function Content( { componentId, overridableProps }: Props ) {\n\tconst {\n\t\telement: { id: elementId },\n\t\telementType,\n\t} = useElement();\n\tconst { value, bind, propType } = useBoundProp();\n\n\tconst contextOverridableValue = useOverridablePropValue();\n\tconst { value: boundPropOverridableValue, setValue: setOverridableValue } = useBoundProp(\n\t\tcomponentOverridablePropTypeUtil\n\t);\n\n\t/**\n\t * This is intended to handle custom layout controls, such as <LinkControl />, which has <ControlLabel /> nested within it\n\t * i.e. its bound prop value would be the one manipulated by the new <PropProvider /> thus won't be considered overridable\n\t */\n\tconst overridableValue = boundPropOverridableValue ?? contextOverridableValue;\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\tconst triggerProps = bindTrigger( popupState );\n\tconst popoverProps = bindPopover( popupState );\n\n\tconst { elType } = getWidgetsCache()?.[ elementType.key ] ?? { elType: 'widget' };\n\n\tconst handleSubmit = ( { label, group }: { label: string; group: string | null } ) => {\n\t\tconst originValue = ! overridableValue ? value ?? propType.default : overridableValue?.origin_value ?? {};\n\n\t\tconst overridablePropConfig = setOverridableProp( {\n\t\t\tcomponentId,\n\t\t\toverrideKey: overridableValue?.override_key ?? null,\n\t\t\telementId,\n\t\t\tlabel,\n\t\t\tgroupId: group,\n\t\t\tpropKey: bind,\n\t\t\telType: elType ?? 'widget',\n\t\t\twidgetType: elementType.key,\n\t\t\toriginValue,\n\t\t} );\n\n\t\tif ( ! overridableValue && overridablePropConfig ) {\n\t\t\tsetOverridableValue( {\n\t\t\t\toverride_key: overridablePropConfig.overrideKey,\n\t\t\t\torigin_value: originValue as TransformablePropValue< string, unknown >,\n\t\t\t} );\n\t\t}\n\n\t\tpopupState.close();\n\t};\n\n\tconst overridableConfig = overridableValue\n\t\t? getOverridableProp( { componentId, overrideKey: overridableValue.override_key } )\n\t\t: undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<Tooltip placement=\"top\" title={ __( 'Override Property', 'elementor' ) }>\n\t\t\t\t<Indicator { ...triggerProps } isOpen={ !! popoverProps.open } isOverridable={ !! overridableValue } />\n\t\t\t</Tooltip>\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\tsx: { my: 2.5 },\n\t\t\t\t} }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<OverridablePropForm\n\t\t\t\t\tonSubmit={ handleSubmit }\n\t\t\t\t\tgroups={ overridableProps?.groups.order.map( ( groupId ) => ( {\n\t\t\t\t\t\tvalue: groupId,\n\t\t\t\t\t\tlabel: overridableProps.groups.items[ groupId ].label,\n\t\t\t\t\t} ) ) }\n\t\t\t\t\tcurrentValue={ overridableConfig }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nfunction isPropAllowed( bind: string ) {\n\treturn ! FORBIDDEN_KEYS.includes( bind );\n}\n","import { type PropValue } from '@elementor/editor-props';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { type OverridableProp } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport {\n\taddPropToGroup,\n\tensureGroupInOrder,\n\tremovePropFromGroup,\n\tremovePropsFromState,\n\tresolveOrCreateGroup,\n} from '../utils/groups-transformers';\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};\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 { groups: groupsAfterResolve, groupId: currentGroupId } = resolveOrCreateGroup(\n\t\toverridableProps.groups,\n\t\tgroupId || existingOverridableProp?.groupId || undefined\n\t);\n\n\tconst overridableProp: 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 stateAfterRemovingDuplicates = removePropsFromState(\n\t\t{ ...overridableProps, groups: groupsAfterResolve },\n\t\tduplicatedTargetProps\n\t);\n\n\tconst props = {\n\t\t...stateAfterRemovingDuplicates.props,\n\t\t[ overridableProp.overrideKey ]: overridableProp,\n\t};\n\n\tlet groups = addPropToGroup( stateAfterRemovingDuplicates.groups, currentGroupId, overridableProp.overrideKey );\n\tgroups = ensureGroupInOrder( groups, currentGroupId );\n\n\tconst isChangingGroups = existingOverridableProp && existingOverridableProp.groupId !== currentGroupId;\n\n\tif ( isChangingGroups ) {\n\t\tgroups = removePropFromGroup( groups, existingOverridableProp.groupId, overridableProp.overrideKey );\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","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 { __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 { getContainer, updateElementSettings, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { componentInstanceOverridePropTypeUtil } from '../prop-types/component-instance-override-prop-type';\nimport { componentInstanceOverridesPropTypeUtil } from '../prop-types/component-instance-overrides-prop-type';\nimport {\n\tcomponentInstancePropTypeUtil,\n\ttype ComponentInstancePropValue,\n} from '../prop-types/component-instance-prop-type';\nimport { type ComponentOverride } from '../types';\nimport { isComponentInstance } from '../utils/is-component-instance';\n\nexport function initRegenerateOverrideKeys() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tregenerateOverrideKeysForContainers( result );\n\t} );\n\n\tregisterDataHook( 'after', 'document/elements/paste', ( _args, result: V1Element | V1Element[] ) => {\n\t\tregenerateOverrideKeysForContainers( result );\n\t} );\n\n\tregisterDataHook( 'after', 'document/elements/import', ( _args, result: V1Element | V1Element[] ) => {\n\t\tregenerateOverrideKeysForContainers( result );\n\t} );\n}\n\nexport function regenerateOverrideKeysForContainers( result: V1Element | V1Element[] ) {\n\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\tcontainers.forEach( ( container ) => {\n\t\tregenerateOverrideKeysRecursive( container.id );\n\t} );\n}\n\nfunction regenerateOverrideKeysRecursive( elementId: string ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllElements( container ).forEach( regenerateOverrideKeys );\n}\n\nfunction getAllElements( container: V1Element ): V1Element[] {\n\tconst children = ( container.children ?? [] ).flatMap( getAllElements ) ?? [];\n\n\treturn [ container, ...children ];\n}\n\nfunction regenerateOverrideKeys( element: V1Element ) {\n\tif ( ! isComponentInstance( element.model.toJSON() ) ) {\n\t\treturn;\n\t}\n\n\tconst settings = element.settings?.toJSON() ?? {};\n\n\tif ( ! hasOverrides( settings ) ) {\n\t\treturn;\n\t}\n\n\tconst componentInstance = settings.component_instance;\n\tconst overrides = componentInstance.value.overrides;\n\n\tconst newOverrides = overrides.value.map( ( override: ComponentOverride ) => {\n\t\tif ( ! componentInstanceOverridePropTypeUtil.isValid( override ) ) {\n\t\t\treturn override;\n\t\t}\n\n\t\treturn {\n\t\t\t...override,\n\t\t\tvalue: {\n\t\t\t\t...override.value,\n\t\t\t\toverride_key: generateUniqueId( 'prop' ),\n\t\t\t},\n\t\t};\n\t} );\n\n\tconst newComponentInstance = {\n\t\t...componentInstance,\n\t\tvalue: {\n\t\t\t...componentInstance.value,\n\t\t\toverrides: {\n\t\t\t\t...overrides,\n\t\t\t\tvalue: newOverrides,\n\t\t\t},\n\t\t},\n\t};\n\n\tupdateElementSettings( {\n\t\tid: element.id,\n\t\tprops: { component_instance: newComponentInstance },\n\t\twithHistory: false,\n\t} );\n}\n\nfunction hasOverrides( settings: Record< string, unknown > ): settings is {\n\tcomponent_instance: NonNullable< ComponentInstancePropValue > & {\n\t\tvalue: { overrides: { $$type: string; value: ComponentOverride[] } };\n\t};\n} {\n\tif ( ! componentInstancePropTypeUtil.isValid( settings?.component_instance ) ) {\n\t\treturn false;\n\t}\n\n\tconst componentInstance = componentInstancePropTypeUtil.extract( settings?.component_instance );\n\n\tconst overrides = componentInstance?.overrides;\n\n\tif ( ! componentInstanceOverridesPropTypeUtil.isValid( overrides ) ) {\n\t\treturn false;\n\t}\n\n\tconst overridesValue = overrides?.value;\n\n\treturn !! overridesValue?.length;\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { initSaveAsComponentTool } from './save-as-component-tool';\n\nexport function initMcp() {\n\tconst { setMCPDescription } = getMCPByDomain( 'components' );\n\n\tsetMCPDescription(\n\t\t`Elementor Editor Components MCP - Tools for creating and managing reusable components. \n Components are reusable blocks of content that can be used multiple times across the pages, its a widget which contains a set of elements and styles.`\n\t);\n\n\tinitSaveAsComponentTool();\n}\n","import { DOCUMENT_STRUCTURE_URI, WIDGET_SCHEMA_URI } from '@elementor/editor-canvas';\nimport { getContainer, getElementType, getWidgetsCache, type V1ElementData } from '@elementor/editor-elements';\nimport { getMCPByDomain, toolPrompts } from '@elementor/editor-mcp';\nimport { type PropValue } from '@elementor/editor-props';\nimport { AxiosError } from '@elementor/http-client';\nimport { z } from '@elementor/schema';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { apiClient } from '../api';\nimport { createUnpublishedComponent } from '../store/actions/create-unpublished-component';\nimport { type OverridableProps } from '../types';\n\nconst InputSchema = {\n\telement_id: z\n\t\t.string()\n\t\t.describe(\n\t\t\t'The unique identifier of the element to save as a component. ' +\n\t\t\t\t'Use the \"list-elements\" tool to find available element IDs in the current document.'\n\t\t),\n\tcomponent_name: z\n\t\t.string()\n\t\t.describe( 'The name for the new component. Should be descriptive and unique among existing components.' ),\n\toverridable_props: z\n\t\t.object( {\n\t\t\tprops: z.record(\n\t\t\t\tz.object( {\n\t\t\t\t\telementId: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe( 'The id of the child element that you want to override its settings' ),\n\t\t\t\t\tpropKey: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe(\n\t\t\t\t\t\t\t'The property key of the child element that you want to override its settings (e.g., \"text\", \"url\", \"tag\"). To get the available propKeys for an element, use the \"get-element-type-config\" tool.'\n\t\t\t\t\t\t),\n\t\t\t\t} )\n\t\t\t),\n\t\t} )\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Overridable properties configuration. Specify which CHILD element properties can be customized. ' +\n\t\t\t\t'Only elementId and propKey are required; To get the available propKeys for a child element you must use the \"get-element-type-config\" tool.'\n\t\t),\n};\n\nconst OutputSchema = {\n\tmessage: z.string().optional().describe( 'Additional information about the operation result' ),\n\tcomponent_uid: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe( 'The unique identifier of the newly created component (only present on success)' ),\n};\n\nexport const ERROR_MESSAGES = {\n\tELEMENT_NOT_FOUND: \"Element not found. Use 'list-elements' to get valid element IDs.\",\n\tELEMENT_NOT_ONE_OF_TYPES: ( validTypes: string[] ) =>\n\t\t`Element is not one of the following types: ${ validTypes.join( ', ' ) }`,\n\tELEMENT_IS_LOCKED: 'Cannot save a locked element as a component.',\n};\n\nexport const handleSaveAsComponent = async ( params: z.infer< z.ZodObject< typeof InputSchema > > ) => {\n\tconst { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;\n\tconst validElementTypes = getValidElementTypes();\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_FOUND );\n\t}\n\n\tconst elType = container.model.get( 'elType' );\n\n\tif ( ! validElementTypes.includes( elType ) ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_ONE_OF_TYPES( validElementTypes ) );\n\t}\n\n\tconst element = container.model.toJSON( { remove: [ 'default' ] } ) as V1ElementData;\n\n\tif ( element?.isLocked ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_IS_LOCKED );\n\t}\n\n\tconst overridableProps = overridablePropsInput\n\t\t? enrichOverridableProps( overridablePropsInput, element )\n\t\t: undefined;\n\n\tif ( overridableProps ) {\n\t\tupdateElementDataWithOverridableProps( element, overridableProps );\n\t}\n\n\tconst uid = generateUniqueId( 'component' );\n\n\ttry {\n\t\tawait apiClient.validate( {\n\t\t\titems: [\n\t\t\t\t{ uid, title: componentName, elements: [ element ], settings: { overridable_props: overridableProps } },\n\t\t\t],\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\tif ( error instanceof AxiosError ) {\n\t\t\tthrow new Error( error.response?.data.messge );\n\t\t}\n\t\tthrow new Error( 'Unknown error' );\n\t}\n\n\tcreateUnpublishedComponent( componentName, element, null, overridableProps, uid );\n\n\treturn {\n\t\tstatus: 'ok' as const,\n\t\tmessage: `Component \"${ componentName }\" created successfully.`,\n\t\tcomponent_uid: uid,\n\t};\n};\n\nfunction enrichOverridableProps(\n\tinput: { props: Record< string, { elementId: string; propKey: string } > },\n\trootElement: V1ElementData\n): OverridableProps {\n\tconst enrichedProps: OverridableProps[ 'props' ] = {};\n\tconst defaultGroupId = generateUniqueId( 'group' );\n\n\tObject.entries( input.props ).forEach( ( [ , prop ] ) => {\n\t\tconst { elementId, propKey } = prop;\n\t\tconst element = findElementById( rootElement, elementId );\n\n\t\tif ( ! element ) {\n\t\t\tthrow new Error( `Element with ID \"${ elementId }\" not found in component` );\n\t\t}\n\n\t\tconst elType = element.elType;\n\t\tconst widgetType = element.widgetType || element.elType;\n\n\t\t// Validate that the propKey exists in the element's schema\n\t\tconst elementType = getElementType( widgetType );\n\n\t\tif ( ! elementType ) {\n\t\t\tthrow new Error(\n\t\t\t\t`Element type \"${ widgetType }\" is not atomic or does not have a settings schema. ` +\n\t\t\t\t\t`Cannot expose property \"${ propKey }\" for element \"${ elementId }\".`\n\t\t\t);\n\t\t}\n\n\t\tif ( ! elementType.propsSchema[ propKey ] ) {\n\t\t\tconst availableProps = Object.keys( elementType.propsSchema ).join( ', ' );\n\t\t\tthrow new Error(\n\t\t\t\t`Property \"${ propKey }\" does not exist in element \"${ elementId }\" (type: ${ widgetType }). ` +\n\t\t\t\t\t`Available properties: ${ availableProps }`\n\t\t\t);\n\t\t}\n\n\t\tconst overrideKey = generateUniqueId( 'prop' );\n\t\tconst originValue = element.settings?.[ propKey ]\n\t\t\t? ( element.settings[ propKey ] as PropValue )\n\t\t\t: elementType.propsSchema[ propKey ].default ?? null;\n\n\t\tconst label = generateLabel( propKey );\n\n\t\tenrichedProps[ overrideKey ] = {\n\t\t\toverrideKey,\n\t\t\tlabel,\n\t\t\telementId,\n\t\t\tpropKey,\n\t\t\telType,\n\t\t\twidgetType,\n\t\t\toriginValue,\n\t\t\tgroupId: defaultGroupId,\n\t\t};\n\t} );\n\n\treturn {\n\t\tprops: enrichedProps,\n\t\tgroups: {\n\t\t\titems: {\n\t\t\t\t[ defaultGroupId ]: {\n\t\t\t\t\tid: defaultGroupId,\n\t\t\t\t\tlabel: 'Default',\n\t\t\t\t\tprops: Object.keys( enrichedProps ),\n\t\t\t\t},\n\t\t\t},\n\t\t\torder: [ defaultGroupId ],\n\t\t},\n\t};\n}\n\nfunction updateElementDataWithOverridableProps( rootElement: V1ElementData, overridableProps: OverridableProps ) {\n\tObject.values( overridableProps.props ).forEach( ( prop ) => {\n\t\tconst element = findElementById( rootElement, prop.elementId );\n\n\t\tif ( ! element || ! element.settings ) {\n\t\t\treturn;\n\t\t}\n\n\t\telement.settings[ prop.propKey ] = {\n\t\t\t$$type: 'overridable',\n\t\t\tvalue: {\n\t\t\t\toverride_key: prop.overrideKey,\n\t\t\t\torigin_value: prop.originValue,\n\t\t\t},\n\t\t};\n\t} );\n}\n\nfunction findElementById( root: V1ElementData, targetId: string ): V1ElementData | null {\n\tif ( root.id === targetId ) {\n\t\treturn root;\n\t}\n\n\tif ( root.elements ) {\n\t\tfor ( const child of root.elements ) {\n\t\t\tconst found = findElementById( child, targetId );\n\t\t\tif ( found ) {\n\t\t\t\treturn found;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction generateLabel( propKey: string ): string {\n\tconst uniqueId = generateUniqueId( 'prop' );\n\treturn `${ uniqueId } - ${ propKey }`;\n}\n\nfunction getValidElementTypes(): string[] {\n\tconst types = getWidgetsCache();\n\n\tif ( ! types ) {\n\t\treturn [];\n\t}\n\n\treturn Object.entries( types ).reduce( ( acc, [ type, value ] ) => {\n\t\tif ( ! value.atomic_props_schema || ! value.show_in_panel || value.elType === 'widget' ) {\n\t\t\treturn acc;\n\t\t}\n\n\t\tacc.push( type );\n\t\treturn acc;\n\t}, [] as string[] );\n}\n\nconst generatePrompt = () => {\n\tconst saveAsComponentPrompt = toolPrompts( 'save-as-component' );\n\n\tsaveAsComponentPrompt.description( `\nSave an existing element as a reusable component in the Elementor editor.\n\n# When to use this tool\nUse this tool when the user wants to:\n- Create a reusable component from an existing element structure\n- Make specific child element properties customizable in component instances\n- Build a library of reusable design patterns\n\n# When NOT to use this tool\n- Element is already a component (widgetType: 'e-component')\n- Element is locked\n- Element is not an atomic element (atomic_props_schema is not defined)\n- Element elType is a 'widget'\n\n# **CRITICAL - REQUIRED RESOURCES (Must read before using this tool)**\n1. [${ DOCUMENT_STRUCTURE_URI }]\n **MANDATORY** - Required to understand the document structure and identify child elements for overridable properties.\n Use this resource to find element IDs and understand the element hierarchy.\n\n2. [${ WIDGET_SCHEMA_URI }]\n **MANDATORY** - Required to understand which properties are available for each widget type.\n Use this to identify available propKeys in the atomic_props_schema for child elements.\n\n# Instructions - MUST FOLLOW IN ORDER\n## Step 1: Identify the Target Element\n1. Read the [${ DOCUMENT_STRUCTURE_URI }] resource to understand the document structure\n2. Locate the element you want to save as a component by its element_id\n3. Verify the element type is a valid element type\n4. Ensure the element is not locked and is not already a component\n\n## Step 2: Define Overridable Properties\nDo this step to make child element properties customizable.\nSkip that step ONLY if the user explicitly requests to not make any properties customizable.\n\n1. **Identify Child Elements**\n - Use the [${ DOCUMENT_STRUCTURE_URI }] resource to find all child elements\n - Note the elementId and widgetType/elType of each child element you want to customize\n\n2. **Find Available Properties**\n - Use the [${ WIDGET_SCHEMA_URI }] resource to find the child element's widget type schema\n - Review the atomic_props_schema to find available propKeys (ONLY use top-level props)\n - Common propKeys include: \"text\", \"url\", \"tag\", \"size\", etc.\n - Use only the top level properties, do not use nested properties.\n\n3. **Build the overridable_props Object**\n - For each property you want to make overridable, add an entry:\n \\`{ \"elementId\": \"<child-element-id>\", \"propKey\": \"<property-key>\" }\\`\n - Group all entries under the \"props\" object\n\n## Step 3: Execute the Tool\nCall the tool with:\n- element_id: The ID of the parent element to save as component\n- component_name: A descriptive name for the component\n- overridable_props: (Optional) The properties configuration from Step 2\n\n# CONSTRAINTS\n- NEVER try to override properties of the parent element itself - ONLY child elements\n- NEVER use invalid propKeys - always verify against the widget's atomic_props_schema in [${ WIDGET_SCHEMA_URI }]\n- Property keys must exist in the child element's atomic_props_schema\n- Element IDs must exist within the target element's children\n- When tool execution fails, read the error message and adjust accordingly\n- The element being saved must not be inside another component\n` );\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'element_id',\n\t\t`**MANDATORY** The unique identifier of the element to save as a component.\nUse the [${ DOCUMENT_STRUCTURE_URI }] resource to find available element IDs.`\n\t);\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'component_name',\n\t\t`**MANDATORY** A descriptive name for the new component.\nShould be unique and clearly describe the component's purpose (e.g., \"Hero Section\", \"Feature Card\").`\n\t);\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'overridable_props',\n\t\t`**OPTIONAL** Configuration for which child element properties can be customized in component instances.\n\nStructure:\n\\`\\`\\`json\n{\n \"props\": {\n \"<unique-key>\": {\n \"elementId\": \"<child-element-id>\",\n \"propKey\": \"<property-key>\"\n }\n }\n}\n\\`\\`\\`\n\nTo populate this correctly:\n1. Use [${ DOCUMENT_STRUCTURE_URI }] to find child element IDs and their widgetType\n2. Use [${ WIDGET_SCHEMA_URI }] to find the atomic_props_schema for each child element's widgetType\n3. Only include properties you want to be customizable in component instances\n4. Common propKeys: \"text\", \"url\", \"tag\", \"size\", \"align\", etc.`\n\t);\n\n\tsaveAsComponentPrompt.example( `\nBasic component without overridable properties:\n\\`\\`\\`json\n{\n \"element_id\": \"abc123\",\n \"component_name\": \"Hero Section\"\n}\n\\`\\`\\`\n\nComponent with overridable properties:\n\\`\\`\\`json\n{\n \"element_id\": \"abc123\",\n \"component_name\": \"Feature Card\",\n \"overridable_props\": {\n \"props\": {\n \"heading-text\": {\n \"elementId\": \"heading-123\",\n \"propKey\": \"text\"\n },\n \"button-text\": {\n \"elementId\": \"button-456\",\n \"propKey\": \"text\"\n },\n \"button-link\": {\n \"elementId\": \"button-456\",\n \"propKey\": \"url\"\n }\n }\n }\n}\n\\`\\`\\`\n` );\n\n\tsaveAsComponentPrompt.instruction(\n\t\t`After successful creation, the component will be available in the components library and can be inserted into any page or template.`\n\t);\n\n\tsaveAsComponentPrompt.instruction(\n\t\t`When overridable properties are defined, component instances will show customization controls for those specific properties in the editing panel.`\n\t);\n\n\treturn saveAsComponentPrompt.prompt();\n};\n\nexport const initSaveAsComponentTool = () => {\n\treturn getMCPByDomain( 'components' ).addTool( {\n\t\tname: 'save-as-component',\n\t\tschema: InputSchema,\n\t\toutputSchema: OutputSchema,\n\t\tdescription: generatePrompt(),\n\t\thandler: handleSaveAsComponent,\n\t} );\n};\n","import { useEffect } from 'react';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { loadComponents } from './store/thunks';\n\nexport function PopulateStore() {\n\tuseEffect( () => {\n\t\tdispatch( loadComponents() );\n\t}, [] );\n\n\treturn null;\n}\n","import { __dispatch as dispatch } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { slice } from '../store';\n\nexport function removeComponentStyles( id: number ) {\n\tapiClient.invalidateComponentConfigCache( id );\n\tdispatch( slice.actions.removeStyles( { id } ) );\n}\n","import { createStylesProvider } from '@elementor/editor-styles-repository';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { selectFlatStyles, SLICE_NAME } from './store';\n\nexport const componentsStylesProvider = createStylesProvider( {\n\tkey: 'components-styles',\n\tpriority: 100,\n\tsubscribe: ( cb ) =>\n\t\tsubscribeWithSelector(\n\t\t\t( state ) => state[ SLICE_NAME ],\n\t\t\t() => {\n\t\t\t\tcb();\n\t\t\t}\n\t\t),\n\tactions: {\n\t\tall: () => {\n\t\t\treturn selectFlatStyles( getState() );\n\t\t},\n\t\tget: ( id ) => {\n\t\t\treturn selectFlatStyles( getState() ).find( ( style ) => style.id === id ) ?? null;\n\t\t},\n\t},\n} );\n","import { updateElementSettings, type V1ElementData } from '@elementor/editor-elements';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectUnpublishedComponents, slice } from '../store/store';\nimport { type ComponentInstancePropValue, type DocumentSaveStatus, type UnpublishedComponent } from '../types';\n\nexport async function createComponentsBeforeSave( {\n\telements,\n\tstatus,\n}: {\n\telements: V1ElementData[];\n\tstatus: DocumentSaveStatus;\n} ) {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tif ( ! unpublishedComponents.length ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst uidToComponentId = await createComponents( unpublishedComponents, status );\n\n\t\tupdateComponentInstances( elements, uidToComponentId );\n\n\t\tdispatch(\n\t\t\tslice.actions.add(\n\t\t\t\tunpublishedComponents.map( ( component ) => ( {\n\t\t\t\t\tid: uidToComponentId.get( component.uid ) as number,\n\t\t\t\t\tname: component.name,\n\t\t\t\t\tuid: component.uid,\n\t\t\t\t\toverridableProps: component.overridableProps ? component.overridableProps : undefined,\n\t\t\t\t} ) )\n\t\t\t)\n\t\t);\n\t\tdispatch( slice.actions.resetUnpublished() );\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to publish components and update component instances: ${ error }` );\n\t}\n}\n\nasync function createComponents(\n\tcomponents: UnpublishedComponent[],\n\tstatus: DocumentSaveStatus\n): Promise< Map< string, number > > {\n\tconst response = await apiClient.create( {\n\t\tstatus,\n\t\titems: components.map( ( component ) => ( {\n\t\t\tuid: component.uid,\n\t\t\ttitle: component.name,\n\t\t\telements: component.elements,\n\t\t\tsettings: component.overridableProps ? { overridable_props: component.overridableProps } : undefined,\n\t\t} ) ),\n\t} );\n\n\tconst map = new Map< string, number >();\n\n\tObject.entries( response ).forEach( ( [ key, value ] ) => {\n\t\tmap.set( key, value );\n\t} );\n\n\treturn map;\n}\n\nfunction updateComponentInstances( elements: V1ElementData[], uidToComponentId: Map< string, number > ): void {\n\telements.forEach( ( element ) => {\n\t\tconst { shouldUpdate, newComponentId } = shouldUpdateElement( element, uidToComponentId );\n\t\tif ( shouldUpdate ) {\n\t\t\tupdateElementComponentId( element.id, newComponentId );\n\t\t}\n\n\t\tif ( element.elements ) {\n\t\t\tupdateComponentInstances( element.elements, uidToComponentId );\n\t\t}\n\t} );\n}\n\nfunction shouldUpdateElement(\n\telement: V1ElementData,\n\tuidToComponentId: Map< string, number >\n): { shouldUpdate: true; newComponentId: number } | { shouldUpdate: false; newComponentId: null } {\n\tif ( element.widgetType === 'e-component' ) {\n\t\tconst currentComponentId = ( element.settings?.component_instance as ComponentInstancePropValue< string > )\n\t\t\t?.value?.component_id.value;\n\n\t\tif ( currentComponentId && uidToComponentId.has( currentComponentId ) ) {\n\t\t\treturn { shouldUpdate: true, newComponentId: uidToComponentId.get( currentComponentId ) as number };\n\t\t}\n\t}\n\treturn { shouldUpdate: false, newComponentId: null };\n}\n\nfunction updateElementComponentId( elementId: string, componentId: number ): void {\n\tupdateElementSettings( {\n\t\tid: elementId,\n\t\tprops: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: { $$type: 'number', value: componentId },\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\twithHistory: false,\n\t} );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __getState as getState } from '@elementor/store';\n\nimport { COMPONENT_DOCUMENT_TYPE } from '../components/consts';\nimport { selectOverridableProps } from '../store/store';\n\nexport const setComponentOverridablePropsSettingsBeforeSave = ( {\n\tcontainer,\n}: {\n\tcontainer: V1Element & { document: V1Document };\n} ) => {\n\tconst currentDocument = container.document;\n\n\tif ( ! currentDocument || currentDocument.config.type !== COMPONENT_DOCUMENT_TYPE ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = selectOverridableProps( getState(), currentDocument.id );\n\tif ( overridableProps ) {\n\t\tcontainer.settings.set( 'overridable_props', overridableProps );\n\t}\n};\n","import { type NotificationData, notify } from '@elementor/editor-notifications';\nimport { __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { selectArchivedComponents } from '../store/store';\n\nconst failedNotification = ( message: string ): NotificationData => ( {\n\ttype: 'error',\n\tmessage: `Failed to archive components: ${ message }`,\n\tid: 'failed-archived-components-notification',\n} );\n\nconst successNotification = ( message: string ): NotificationData => ( {\n\ttype: 'success',\n\tmessage: `Successfully archived components: ${ message }`,\n\tid: 'success-archived-components-notification',\n} );\n\nexport const updateArchivedComponentBeforeSave = async () => {\n\ttry {\n\t\tconst archivedComponents = selectArchivedComponents( getState() );\n\n\t\tif ( ! archivedComponents.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst result = await apiClient.updateArchivedComponents(\n\t\t\tarchivedComponents.map( ( component ) => component.id )\n\t\t);\n\n\t\tconst failedIds = result.failedIds.join( ', ' );\n\t\tconst successIds = result.successIds.join( ', ' );\n\n\t\tif ( failedIds ) {\n\t\t\tnotify( failedNotification( failedIds ) );\n\t\t}\n\n\t\tif ( successIds ) {\n\t\t\tnotify( successNotification( successIds ) );\n\t\t}\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to update archived components: ${ error }` );\n\t}\n};\n","import { isDocumentDirty } from '@elementor/editor-documents';\nimport { type V1ElementData } from '@elementor/editor-elements';\n\nimport { apiClient } from '../api';\nimport { type DocumentSaveStatus } from '../types';\nimport { getComponentDocumentData, invalidateComponentDocumentData } from '../utils/component-document-data';\nimport { getComponentIds } from '../utils/get-component-ids';\n\ntype Options = {\n\tstatus: DocumentSaveStatus;\n\telements: V1ElementData[];\n};\n\nexport async function updateComponentsBeforeSave( { status, elements }: Options ) {\n\tif ( status !== 'publish' ) {\n\t\treturn;\n\t}\n\n\tconst componentIds = await getComponentIds( elements );\n\n\tconst componentDocumentData = await Promise.all( componentIds.map( getComponentDocumentData ) );\n\n\tconst draftIds = componentDocumentData\n\t\t.filter( ( document ) => !! document )\n\t\t.filter( isDocumentDirty )\n\t\t.map( ( document ) => document.id );\n\n\tif ( draftIds.length === 0 ) {\n\t\treturn;\n\t}\n\n\tawait apiClient.updateStatuses( draftIds, 'publish' );\n\n\tdraftIds.forEach( ( id ) => invalidateComponentDocumentData( id ) );\n}\n","import { type V1Document } from '@elementor/editor-documents';\nimport { type V1Element, type V1ElementData } from '@elementor/editor-elements';\n\nimport { type DocumentSaveStatus } from '../types';\nimport { createComponentsBeforeSave } from './create-components-before-save';\nimport { setComponentOverridablePropsSettingsBeforeSave } from './set-component-overridable-props-settings-before-save';\nimport { updateArchivedComponentBeforeSave } from './update-archived-component-before-save';\nimport { updateComponentsBeforeSave } from './update-components-before-save';\n\ntype Options = {\n\tcontainer: V1Element & {\n\t\tdocument: V1Document;\n\t\tmodel: {\n\t\t\tget: ( key: 'elements' ) => {\n\t\t\t\ttoJSON: () => V1ElementData[];\n\t\t\t};\n\t\t};\n\t};\n\tstatus: DocumentSaveStatus;\n};\n\nexport const beforeSave = ( { container, status }: Options ) => {\n\tconst elements = container?.model.get( 'elements' ).toJSON?.() ?? [];\n\n\treturn Promise.all( [\n\t\tupdateArchivedComponentBeforeSave(),\n\t\tcreateComponentsBeforeSave( { elements, status } ),\n\t\tupdateComponentsBeforeSave( { elements, status } ),\n\t\tsetComponentOverridablePropsSettingsBeforeSave( { container } ),\n\t] );\n};\n"],"mappings":"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","names":["import_editor_canvas","import_editor_documents","import_editor_editing_panel","import_editor_panels","import_editor_styles_repository","import_editor_v1_adapters","import_store","import_i18n","import_store","import_store","id","createAsyncThunk","createSlice","createSelector","useSelector","id","id","getState","import_editor_canvas","import_editor_canvas","React","import_editor_documents","import_icons","import_ui","import_i18n","import_editor_documents","import_store","import_editor_v1_adapters","runCommand","useSelector","React","import_editor_elements","import_editor_panels","import_editor_ui","import_ui","import_i18n","React","import_react","import_editor_documents","import_icons","import_ui","import_utils","import_i18n","import_store","getState","dispatch","import_store","id","getState","dispatch","import_store","getState","dispatch","import_store","getState","dispatch","import_store","getState","dispatch","import_store","getState","dispatch","import_store","useSelector","React","import_react","import_ui","import_i18n","import_i18n","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_elements","import_icons","import_ui","React","import_react","import_editor_ui","import_ui","import_i18n","React","import_icons","import_ui","id","import_react","import_editor_documents","import_editor_ui","import_i18n","import_store","getState","dispatch","import_i18n","id","createPanel","useEditingPanelActions","React","import_react","import_icons","import_ui","import_i18n","React","import_editor_ui","React","import_icons","import_ui","import_i18n","React","import_react","import_utils","React","import_icons","import_ui","import_i18n","import_store","useSelector","React","import_editor_canvas","import_editor_elements","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_documents","import_store","getStore","dispatch","import_editor_documents","import_editor_canvas","import_editor_documents","import_i18n","import_store","getState","import_store","getState","dispatch","import_store","getState","id","dispatch","import_editor_elements","import_editor_elements","React","import_ui","React","import_react","import_editor_elements","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_v1_adapters","import_store","import_utils","dispatch","runCommand","import_react","import_i18n","Form","validateForm","FormElement","React","import_react","import_editor_documents","import_editor_v1_adapters","import_store","import_utils","import_editor_documents","import_store","dispatch","getStore","React","import_react","import_i18n","import_editor_canvas","import_editor_v1_adapters","useListenTo","import_react","import_utils","useSelector","listenTo","id","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_editing_panel","import_editor_elements","import_editor_panels","import_icons","import_store","import_ui","import_i18n","import_editor_props","import_schema","import_editor_props","import_schema","import_schema","React","import_icons","import_ui","import_i18n","EmptyState","React","import_react","import_editor_editing_panel","import_editor_ui","import_ui","id","getState","EmptyState","React","import_editor_controls","import_editor_editing_panel","import_editor_props","import_schema","React","import_react","import_store","getState","dispatch","React","import_editor_controls","import_editor_editing_panel","import_editor_elements","import_store","import_ui","import_i18n","import_store","import_utils","getState","dispatch","React","import_react","import_icons","import_ui","import_i18n","SIZE","import_store","getState","getState","Content","import_editor_elements","import_editor_v1_adapters","import_utils","import_editor_mcp","import_editor_canvas","import_editor_elements","import_http_client","import_schema","import_utils","ERROR_MESSAGES","import_react","import_store","dispatch","import_store","id","dispatch","import_store","subscribeWithSelector","getState","id","import_editor_elements","import_store","getState","dispatch","import_store","getState","import_store","getState","import_editor_documents","id","registerSlice","registerPanel","id"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/component-instance-transformer.ts","../src/store/store.ts","../src/store/thunks.ts","../src/api.ts","../src/utils/component-document-data.ts","../src/component-overridable-transformer.ts","../src/component-override-transformer.ts","../src/components/component-panel-header/component-panel-header.tsx","../src/hooks/use-navigate-back.ts","../src/utils/switch-to-component.ts","../src/components/component-properties-panel/component-properties-panel.tsx","../src/components/component-properties-panel/component-properties-panel-content.tsx","../src/store/actions/add-overridable-group.ts","../src/store/actions/delete-overridable-group.ts","../src/store/utils/groups-transformers.ts","../src/store/actions/delete-overridable-prop.ts","../src/store/actions/reorder-group-props.ts","../src/store/actions/reorder-overridable-groups.ts","../src/store/actions/update-overridable-prop-params.ts","../src/components/component-panel-header/use-overridable-props.ts","../src/components/component-properties-panel/properties-empty-state.tsx","../src/components/components-tab/component-introduction.tsx","../src/components/component-properties-panel/properties-group.tsx","../src/components/component-properties-panel/property-item.tsx","../src/components/overridable-props/overridable-prop-form.tsx","../src/components/component-properties-panel/sortable.tsx","../src/components/component-properties-panel/use-current-editable-item.ts","../src/store/actions/rename-overridable-group.ts","../src/components/component-properties-panel/utils/validate-group-label.ts","../src/components/component-properties-panel/utils/generate-unique-label.ts","../src/components/component-panel-header/component-badge.tsx","../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/is-component-instance.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/hooks/use-component-instance-settings.ts","../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/prop-types/component-overridable-prop-type.ts","../src/components/instance-editing-panel/empty-state.tsx","../src/components/instance-editing-panel/override-props-group.tsx","../src/components/instance-editing-panel/override-prop-control.tsx","../src/hooks/use-controls-by-widget-type.ts","../src/store/actions/update-overridable-prop.ts","../src/utils/get-prop-type-for-component-override.ts","../src/components/control-label.tsx","../src/components/overridable-props/overridable-prop-control.tsx","../src/provider/overridable-prop-context.tsx","../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/utils/get-overridable-prop.ts","../src/hooks/regenerate-override-keys.ts","../src/mcp/index.ts","../src/mcp/save-as-component-tool.ts","../src/populate-store.ts","../src/store/actions/remove-component-styles.ts","../src/store/components-styles-provider.ts","../src/sync/create-components-before-save.ts","../src/sync/set-component-overridable-props-settings-before-save.ts","../src/sync/update-archived-component-before-save.ts","../src/sync/update-components-before-save.ts","../src/sync/before-save.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoLogic, injectIntoTop } from '@elementor/editor';\nimport {\n\ttype CreateTemplatedElementTypeOptions,\n\tregisterElementType,\n\tsettingsTransformersRegistry,\n} from '@elementor/editor-canvas';\nimport { getV1CurrentDocument } from '@elementor/editor-documents';\nimport {\n\tFIELD_TYPE,\n\tinjectIntoPanelHeaderTop,\n\tregisterControlReplacement,\n\tregisterEditingPanelReplacement,\n\tregisterFieldIndicator,\n} from '@elementor/editor-editing-panel';\nimport { type V1ElementData } from '@elementor/editor-elements';\nimport { injectTab } from '@elementor/editor-elements-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { __registerSlice as registerSlice } from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { componentInstanceTransformer } from './component-instance-transformer';\nimport { componentOverridableTransformer } from './component-overridable-transformer';\nimport { componentOverrideTransformer } from './component-override-transformer';\nimport { ComponentPanelHeader } from './components/component-panel-header/component-panel-header';\nimport { panel as componentPropertiesPanel } from './components/component-properties-panel/component-properties-panel';\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 { COMPONENT_WIDGET_TYPE, createComponentType } from './create-component-type';\nimport { initRegenerateOverrideKeys } from './hooks/regenerate-override-keys';\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\tregisterPanel( componentPropertiesPanel );\n\n\tregisterElementType( COMPONENT_WIDGET_TYPE, ( options: CreateTemplatedElementTypeOptions ) =>\n\t\tcreateComponentType( { ...options, showLockedByModal: openEditModeDialog } )\n\t);\n\n\tregisterDataHook( 'dependency', 'editor/documents/close', ( args ) => {\n\t\tconst document = getV1CurrentDocument();\n\t\tif ( document.config.type === COMPONENT_DOCUMENT_TYPE ) {\n\t\t\targs.mode = 'autosave';\n\t\t}\n\t\treturn true;\n\t} );\n\n\tregisterDataHook( 'after', 'preview/drop', onElementDrop );\n\n\t( window as unknown as ExtendedWindow ).elementorCommon.__beforeSave = beforeSave;\n\n\tinjectTab( {\n\t\tid: 'components',\n\t\tlabel: __( 'Components', 'elementor' ),\n\t\tcomponent: Components,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'create-component-popup',\n\t\tcomponent: CreateComponentForm,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'components-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'edit-component',\n\t\tcomponent: EditComponent,\n\t} );\n\n\tinjectIntoPanelHeaderTop( {\n\t\tid: 'component-panel-header',\n\t\tcomponent: ComponentPanelHeader,\n\t} );\n\n\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\tconst { id, config } = getV1CurrentDocument();\n\n\t\tif ( id ) {\n\t\t\tremoveComponentStyles( id );\n\t\t}\n\n\t\tawait loadComponentsAssets( ( config?.elements as V1ElementData[] ) ?? [] );\n\t} );\n\n\tregisterFieldIndicator( {\n\t\tfieldType: FIELD_TYPE.SETTINGS,\n\t\tid: 'component-overridable-prop',\n\t\tpriority: 1,\n\t\tindicator: OverridablePropIndicator,\n\t} );\n\n\tregisterControlReplacement( {\n\t\tcomponent: OverridablePropControl,\n\t\tcondition: ( { value } ) => componentOverridablePropTypeUtil.isValid( value ),\n\t} );\n\n\tregisterEditingPanelReplacement( {\n\t\tid: 'component-instance-edit-panel',\n\t\tcondition: ( _, elementType ) => elementType.key === 'e-component',\n\t\tcomponent: InstanceEditingPanel,\n\t} );\n\n\tsettingsTransformersRegistry.register( 'component-instance', componentInstanceTransformer );\n\tsettingsTransformersRegistry.register( 'overridable', componentOverridableTransformer );\n\tsettingsTransformersRegistry.register( 'override', componentOverrideTransformer );\n\n\tinitRegenerateOverrideKeys();\n\n\tinitMcp();\n}\n","import { createTransformer, RenderContext } from '@elementor/editor-canvas';\nimport { __getState as getState } from '@elementor/store';\n\nimport { type ComponentInstanceOverrideProp } from './prop-types/component-instance-override-prop-type';\nimport { selectUnpublishedComponents } from './store/store';\nimport { getComponentDocumentData } from './utils/component-document-data';\n\ntype ComponentInstanceContext = {\n\toverrides?: Record< string, unknown >;\n};\n\nexport const componentInstanceContext = new RenderContext< ComponentInstanceContext >( 'component-instance', {\n\toverrides: {},\n} );\n\nexport const componentInstanceTransformer = createTransformer(\n\tasync ( {\n\t\tcomponent_id: id,\n\t\toverrides: overridesValue,\n\t}: {\n\t\tcomponent_id: number | string;\n\t\toverrides?: ComponentInstanceOverrideProp[];\n\t} ) => {\n\t\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\t\tconst unpublishedComponent = unpublishedComponents.find( ( { uid } ) => uid === id );\n\n\t\tconst overrides = overridesValue?.reduce( ( acc, override ) => ( { ...acc, ...override } ), {} );\n\n\t\tif ( unpublishedComponent ) {\n\t\t\treturn {\n\t\t\t\telements: structuredClone( unpublishedComponent.elements ),\n\t\t\t\toverrides,\n\t\t\t};\n\t\t}\n\n\t\tif ( typeof id !== 'number' ) {\n\t\t\tthrow new Error( `Component ID \"${ id }\" not valid.` );\n\t\t}\n\n\t\tconst data = await getComponentDocumentData( id );\n\n\t\treturn {\n\t\t\telements: data?.elements ?? [],\n\t\t\toverrides,\n\t\t};\n\t}\n);\n","import { type V1Document } from '@elementor/editor-documents';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\t__useSelector as useSelector,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\nimport {\n\ttype Component,\n\ttype ComponentId,\n\ttype OverridableProps,\n\ttype PublishedComponent,\n\ttype StylesDefinition,\n\ttype UnpublishedComponent,\n} from '../types';\nimport { loadComponents } from './thunks';\n\ntype GetComponentResponse = PublishedComponent[];\n\ntype Status = 'idle' | 'pending' | 'error';\n\ntype ComponentsState = {\n\tdata: PublishedComponent[];\n\tunpublishedData: UnpublishedComponent[];\n\tloadStatus: Status;\n\tstyles: StylesDefinition;\n\tcreatedThisSession: Component[ 'uid' ][];\n\tarchivedData: PublishedComponent[];\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n};\n\nexport type ComponentsSlice = SliceState< typeof slice >;\n\nexport type ComponentsPathItem = {\n\tinstanceId?: string;\n\tcomponentId: V1Document[ 'id' ];\n};\n\nexport const initialState: ComponentsState = {\n\tdata: [],\n\tunpublishedData: [],\n\tloadStatus: 'idle',\n\tstyles: {},\n\tcreatedThisSession: [],\n\tarchivedData: [],\n\tpath: [],\n\tcurrentComponentId: null,\n};\n\nexport const SLICE_NAME = 'components';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tadd: ( state, { payload }: PayloadAction< PublishedComponent | PublishedComponent[] > ) => {\n\t\t\tif ( Array.isArray( payload ) ) {\n\t\t\t\tstate.data = [ ...state.data, ...payload ];\n\t\t\t} else {\n\t\t\t\tstate.data.unshift( payload );\n\t\t\t}\n\t\t},\n\t\tload: ( state, { payload }: PayloadAction< PublishedComponent[] > ) => {\n\t\t\tstate.data = payload;\n\t\t},\n\t\taddUnpublished: ( state, { payload }: PayloadAction< UnpublishedComponent > ) => {\n\t\t\tstate.unpublishedData.unshift( payload );\n\t\t},\n\t\tresetUnpublished: ( state ) => {\n\t\t\tstate.unpublishedData = [];\n\t\t},\n\t\tremoveStyles( state, { payload }: PayloadAction< { id: ComponentId } > ) {\n\t\t\tconst { [ payload.id ]: _, ...rest } = state.styles;\n\n\t\t\tstate.styles = rest;\n\t\t},\n\t\taddStyles: ( state, { payload } ) => {\n\t\t\tstate.styles = { ...state.styles, ...payload };\n\t\t},\n\t\taddCreatedThisSession: ( state, { payload }: PayloadAction< string > ) => {\n\t\t\tstate.createdThisSession.push( payload );\n\t\t},\n\t\tarchive: ( state, { payload }: PayloadAction< number > ) => {\n\t\t\tstate.data = state.data.filter( ( component ) => {\n\t\t\t\tconst isArchived = component.id === payload;\n\t\t\t\tif ( isArchived ) {\n\t\t\t\t\tstate.archivedData.push( component );\n\t\t\t\t}\n\n\t\t\t\treturn ! isArchived;\n\t\t\t} );\n\t\t},\n\t\tsetCurrentComponentId: ( state, { payload }: PayloadAction< V1Document[ 'id' ] | null > ) => {\n\t\t\tstate.currentComponentId = payload;\n\t\t},\n\t\tsetPath: ( state, { payload }: PayloadAction< ComponentsPathItem[] > ) => {\n\t\t\tstate.path = payload;\n\t\t},\n\t\tsetOverridableProps: (\n\t\t\tstate,\n\t\t\t{ payload }: PayloadAction< { componentId: ComponentId; overridableProps: OverridableProps } >\n\t\t) => {\n\t\t\tconst component = state.data.find( ( comp ) => comp.id === payload.componentId );\n\n\t\t\tif ( ! component ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcomponent.overridableProps = payload.overridableProps;\n\t\t},\n\t},\n\textraReducers: ( builder ) => {\n\t\tbuilder.addCase( loadComponents.fulfilled, ( state, { payload }: PayloadAction< GetComponentResponse > ) => {\n\t\t\tstate.data = payload;\n\t\t\tstate.loadStatus = 'idle';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.pending, ( state ) => {\n\t\t\tstate.loadStatus = 'pending';\n\t\t} );\n\t\tbuilder.addCase( loadComponents.rejected, ( state ) => {\n\t\t\tstate.loadStatus = 'error';\n\t\t} );\n\t},\n} );\n\nconst selectData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].data;\nconst selectArchivedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].archivedData;\nconst selectLoadStatus = ( state: ComponentsSlice ) => state[ SLICE_NAME ].loadStatus;\nconst selectStylesDefinitions = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nconst selectUnpublishedData = ( state: ComponentsSlice ) => state[ SLICE_NAME ].unpublishedData;\nconst getCreatedThisSession = ( state: ComponentsSlice ) => state[ SLICE_NAME ].createdThisSession;\nconst getPath = ( state: ComponentsSlice ) => state[ SLICE_NAME ].path;\nconst getCurrentComponentId = ( state: ComponentsSlice ) => state[ SLICE_NAME ].currentComponentId;\nexport const selectComponent = ( state: ComponentsSlice, componentId: ComponentId ) =>\n\tstate[ SLICE_NAME ].data.find( ( component ) => component.id === componentId );\nexport const useComponent = ( componentId: ComponentId | null ) => {\n\treturn useSelector( ( state: ComponentsSlice ) => ( componentId ? selectComponent( state, componentId ) : null ) );\n};\n\nexport const selectComponents = createSelector(\n\tselectData,\n\tselectUnpublishedData,\n\t( data: PublishedComponent[], unpublishedData: UnpublishedComponent[] ) => [\n\t\t...unpublishedData.map( ( item ) => ( {\n\t\t\tuid: item.uid,\n\t\t\tname: item.name,\n\t\t\toverridableProps: item.overridableProps,\n\t\t} ) ),\n\t\t...data,\n\t]\n);\nexport const selectUnpublishedComponents = createSelector(\n\tselectUnpublishedData,\n\t( unpublishedData: UnpublishedComponent[] ) => unpublishedData\n);\nexport const selectLoadIsPending = createSelector( selectLoadStatus, ( status ) => status === 'pending' );\nexport const selectLoadIsError = createSelector( selectLoadStatus, ( status ) => status === 'error' );\nexport const selectStyles = ( state: ComponentsSlice ) => state[ SLICE_NAME ].styles ?? {};\nexport const selectFlatStyles = createSelector( selectStylesDefinitions, ( data ) => Object.values( data ).flat() );\nexport const selectCreatedThisSession = createSelector(\n\tgetCreatedThisSession,\n\t( createdThisSession ) => createdThisSession\n);\n\nconst DEFAULT_OVERRIDABLE_PROPS: OverridableProps = {\n\tprops: {},\n\tgroups: {\n\t\titems: {},\n\t\torder: [],\n\t},\n};\n\nexport const selectOverridableProps = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\tif ( ! component ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;\n\t}\n);\nexport const useOverridableProps = ( componentId: ComponentId | null ) => {\n\treturn useSelector( ( state: ComponentsSlice ) =>\n\t\tcomponentId ? selectOverridableProps( state, componentId ) : null\n\t);\n};\nexport const selectIsOverridablePropsLoaded = createSelector(\n\tselectComponent,\n\t( component: PublishedComponent | undefined ) => {\n\t\treturn !! component?.overridableProps;\n\t}\n);\nexport const selectPath = createSelector( getPath, ( path ) => path );\n\nexport const selectCurrentComponentId = createSelector(\n\tgetCurrentComponentId,\n\t( currentComponentId ) => currentComponentId\n);\n\nexport const useCurrentComponentId = () => {\n\treturn useSelector( selectCurrentComponentId );\n};\n\nexport const selectArchivedComponents = createSelector(\n\tselectArchivedData,\n\t( archivedData: PublishedComponent[] ) => archivedData\n);\n","import { __createAsyncThunk as createAsyncThunk } from '@elementor/store';\n\nimport { apiClient } from '../api';\n\nconst loadComponents = createAsyncThunk( 'components/load', async () => {\n\tconst response = await apiClient.get();\n\treturn response;\n} );\n\nexport { loadComponents };\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { ajax } from '@elementor/editor-v1-adapters';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type DocumentSaveStatus, type OverridableProps, type PublishedComponent } from './types';\n\nconst BASE_URL = 'elementor/v1/components';\n\nexport type ComponentItems = Array< {\n\tuid: string;\n\ttitle: string;\n\telements: V1ElementData[];\n\tsettings?: {\n\t\toverridable_props?: OverridableProps;\n\t};\n} >;\n\nexport type CreateComponentPayload = {\n\tstatus: DocumentSaveStatus;\n\titems: ComponentItems;\n};\n\ntype ComponentLockStatusResponse = {\n\tis_current_user_allow_to_edit: boolean;\n\tlocked_by: string;\n};\n\ntype GetComponentResponse = Array< PublishedComponent >;\n\nexport type CreateComponentResponse = Record< string, number >;\n\nexport type ValidateComponentsPayload = {\n\titems: ComponentItems;\n};\n\nexport type ValidateComponentsResponse = {\n\tcode: string;\n\tmessage: string;\n\tdata: {\n\t\tstatus: number;\n\t\tmeta: Record< string, unknown >;\n\t};\n};\n\nexport const getParams = ( id: number ) => ( {\n\taction: 'get_document_config',\n\tunique_id: `document-config-${ id }`,\n\tdata: { id },\n} );\n\nexport const apiClient = {\n\tget: () =>\n\t\thttpService()\n\t\t\t.get< HttpResponse< GetComponentResponse > >( `${ BASE_URL }` )\n\t\t\t.then( ( res ) => res.data.data ),\n\tcreate: ( payload: CreateComponentPayload ) =>\n\t\thttpService()\n\t\t\t.post< HttpResponse< CreateComponentResponse > >( `${ BASE_URL }`, payload )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateStatuses: ( ids: number[], status: DocumentSaveStatus ) =>\n\t\thttpService().put( `${ BASE_URL }/status`, {\n\t\t\tids,\n\t\t\tstatus,\n\t\t} ),\n\tgetComponentConfig: ( id: number ) => ajax.load< { id: number }, V1ElementData >( getParams( id ) ),\n\tinvalidateComponentConfigCache: ( id: number ) => ajax.invalidateCache< { id: number } >( getParams( id ) ),\n\tgetComponentLockStatus: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< { data: ComponentLockStatusResponse } >( `${ BASE_URL }/lock-status`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId,\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => {\n\t\t\t\tconst { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data;\n\t\t\t\treturn { isAllowedToSwitchDocument, lockedBy: lockedBy || '' };\n\t\t\t} ),\n\tlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/lock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tunlockComponent: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.post< { success: boolean } >( `${ BASE_URL }/unlock`, {\n\t\t\t\tcomponentId,\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data ),\n\tgetOverridableProps: async ( componentId: number ) =>\n\t\tawait httpService()\n\t\t\t.get< HttpResponse< OverridableProps > >( `${ BASE_URL }/overridable-props`, {\n\t\t\t\tparams: {\n\t\t\t\t\tcomponentId: componentId.toString(),\n\t\t\t\t},\n\t\t\t} )\n\t\t\t.then( ( res ) => res.data.data ),\n\tupdateArchivedComponents: async ( componentIds: number[] ) =>\n\t\tawait httpService()\n\t\t\t.post< { data: { failedIds: number[]; successIds: number[]; success: boolean } } >(\n\t\t\t\t`${ BASE_URL }/archive`,\n\t\t\t\t{\n\t\t\t\t\tcomponentIds,\n\t\t\t\t}\n\t\t\t)\n\t\t\t.then( ( res ) => res.data.data ),\n\tvalidate: async ( payload: ValidateComponentsPayload ) =>\n\t\tawait httpService()\n\t\t\t.post< HttpResponse< ValidateComponentsResponse > >( `${ BASE_URL }/create-validate`, payload )\n\t\t\t.then( ( res ) => res.data ),\n};\n","import { type Document, getV1DocumentsManager } from '@elementor/editor-documents';\n\ntype ComponentDocumentData = Document;\n\nexport const getComponentDocumentData = async ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\ttry {\n\t\treturn await documentManager.request< ComponentDocumentData >( id );\n\t} catch {\n\t\treturn null;\n\t}\n};\n\nexport const invalidateComponentDocumentData = ( id: number ) => {\n\tconst documentManager = getV1DocumentsManager();\n\n\tdocumentManager.invalidateCache( id );\n};\n","import { createTransformer, settingsTransformersRegistry } from '@elementor/editor-canvas';\nimport { type PropValue, type TransformablePropValue } from '@elementor/editor-props';\n\nimport { componentInstanceContext } from './component-instance-transformer';\nimport { type ComponentOverridable } from './types';\n\nexport const componentOverridableTransformer = createTransformer(\n\t( value: ComponentOverridable, options: { key: string } ) => {\n\t\tconst { overrides } = componentInstanceContext.get();\n\n\t\tconst overrideValue = overrides?.[ value.override_key ];\n\n\t\tif ( overrideValue ) {\n\t\t\tconst isOverride = isOriginValueOverride( value.origin_value );\n\n\t\t\tif ( isOverride ) {\n\t\t\t\treturn transformOverride( value, options, overrideValue );\n\t\t\t}\n\n\t\t\treturn overrideValue;\n\t\t}\n\n\t\treturn value.origin_value;\n\t}\n);\n\nfunction transformOverride(\n\tvalue: ComponentOverridable,\n\toptions: {\n\t\tkey: string;\n\t},\n\toverrideValue: PropValue\n) {\n\tconst transformer = settingsTransformersRegistry.get( 'override' );\n\n\tif ( ! transformer ) {\n\t\treturn null;\n\t}\n\n\tconst transformedValue = transformer( value.origin_value.value, options );\n\n\tif ( ! transformedValue ) {\n\t\treturn null;\n\t}\n\n\tconst [ key ] = Object.keys( transformedValue as Record< string, unknown > );\n\n\treturn {\n\t\t[ key ]: overrideValue,\n\t};\n}\n\nfunction isOriginValueOverride( originValue: TransformablePropValue< string > ): boolean {\n\treturn originValue.$$type === 'override';\n}\n","import { createTransformer } from '@elementor/editor-canvas';\n\nimport { type ComponentInstanceOverridePropValue } from './prop-types/component-instance-override-prop-type';\n\nexport const componentOverrideTransformer = createTransformer( ( override: ComponentInstanceOverridePropValue ) => {\n\tconst { override_key: key, override_value: overrideValue } = override;\n\n\treturn { [ key ]: overrideValue };\n} );\n","import * as React from 'react';\nimport { useSuppressedMessage } from '@elementor/editor-current-user';\nimport { getV1DocumentsManager } from '@elementor/editor-documents';\nimport { ArrowLeftIcon, ComponentsFilledIcon } from '@elementor/icons';\nimport { Box, Divider, IconButton, Stack, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { useCurrentComponentId } from '../../store/store';\nimport { usePanelActions } from '../component-properties-panel/component-properties-panel';\nimport { ComponentIntroduction } from '../components-tab/component-introduction';\nimport { ComponentsBadge } from './component-badge';\nimport { useOverridableProps } from './use-overridable-props';\n\nconst MESSAGE_KEY = 'components-properties-introduction';\n\nexport const ComponentPanelHeader = () => {\n\tconst currentComponentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\tconst onBack = useNavigateBack();\n\tconst componentName = getComponentName();\n\tconst [ isMessageSuppressed, suppressMessage ] = useSuppressedMessage( MESSAGE_KEY );\n\tconst [ shouldShowIntroduction, setShouldShowIntroduction ] = React.useState( ! isMessageSuppressed );\n\n\tconst { open: openPropertiesPanel } = usePanelActions();\n\n\tconst overridesCount = overridableProps ? Object.keys( overridableProps.props ).length : 0;\n\tconst anchorRef = React.useRef< HTMLDivElement >( null );\n\n\tif ( ! currentComponentId ) {\n\t\treturn null;\n\t}\n\n\tconst handleCloseIntroduction = () => {\n\t\tsuppressMessage();\n\t\tsetShouldShowIntroduction( false );\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 } ref={ anchorRef } onClick={ openPropertiesPanel } />\n\t\t\t</Stack>\n\t\t\t<Divider />\n\t\t\t<ComponentIntroduction\n\t\t\t\tanchorRef={ anchorRef }\n\t\t\t\tshouldShowIntroduction={ shouldShowIntroduction }\n\t\t\t\tonClose={ handleCloseIntroduction }\n\t\t\t/>\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 { ElementProvider, usePanelActions as useEditingPanelActions } from '@elementor/editor-editing-panel';\nimport { useSelectedElement } from '@elementor/editor-elements';\nimport { __createPanel as createPanel, Panel } from '@elementor/editor-panels';\nimport { ThemeProvider } from '@elementor/editor-ui';\nimport { Alert, Box, ErrorBoundary } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { ComponentPropertiesPanelContent } from './component-properties-panel-content';\n\nconst id = 'component-properties-panel';\n\nexport const { panel, usePanelActions } = createPanel( {\n\tid,\n\tcomponent: ComponentPropertiesPanel,\n} );\n\nfunction ComponentPropertiesPanel() {\n\tconst { element, elementType } = useSelectedElement();\n\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openEditingPanel } = useEditingPanelActions();\n\n\tif ( ! element || ! elementType ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<ErrorBoundary fallback={ <ErrorBoundaryFallback /> }>\n\t\t\t\t<ElementProvider element={ element } elementType={ elementType }>\n\t\t\t\t\t<Panel>\n\t\t\t\t\t\t<ComponentPropertiesPanelContent\n\t\t\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\topenEditingPanel();\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Panel>\n\t\t\t\t</ElementProvider>\n\t\t\t</ErrorBoundary>\n\t\t</ThemeProvider>\n\t);\n}\n\nconst ErrorBoundaryFallback = () => (\n\t<Box role=\"alert\" sx={ { minHeight: '100%', p: 2 } }>\n\t\t<Alert severity=\"error\" sx={ { mb: 2, maxWidth: 400, textAlign: 'center' } }>\n\t\t\t<strong>{ __( 'Something went wrong', 'elementor' ) }</strong>\n\t\t</Alert>\n\t</Box>\n);\n","import * as React from 'react';\nimport { useMemo, useRef, useState } from 'react';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { ComponentPropListIcon, FolderPlusIcon, XIcon } from '@elementor/icons';\nimport { Divider, IconButton, List, Stack, Tooltip } from '@elementor/ui';\nimport { generateUniqueId } from '@elementor/utils';\nimport { __ } from '@wordpress/i18n';\n\nimport { addOverridableGroup } from '../../store/actions/add-overridable-group';\nimport { deleteOverridableGroup } from '../../store/actions/delete-overridable-group';\nimport { deleteOverridableProp } from '../../store/actions/delete-overridable-prop';\nimport { reorderGroupProps } from '../../store/actions/reorder-group-props';\nimport { reorderOverridableGroups } from '../../store/actions/reorder-overridable-groups';\nimport { updateOverridablePropParams } from '../../store/actions/update-overridable-prop-params';\nimport { useCurrentComponentId } from '../../store/store';\nimport { useOverridableProps } from '../component-panel-header/use-overridable-props';\nimport { PropertiesEmptyState } from './properties-empty-state';\nimport { PropertiesGroup } from './properties-group';\nimport { SortableItem, SortableProvider } from './sortable';\nimport { useCurrentEditableItem } from './use-current-editable-item';\nimport { generateUniqueLabel } from './utils/generate-unique-label';\n\ntype Props = {\n\tonClose: () => void;\n};\n\nexport function ComponentPropertiesPanelContent( { onClose }: Props ) {\n\tconst currentComponentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\tconst [ isAddingGroup, setIsAddingGroup ] = useState( false );\n\tconst introductionRef = useRef< HTMLButtonElement >( null );\n\tconst groupLabelEditable = useCurrentEditableItem();\n\n\tconst groups = useMemo( () => {\n\t\tif ( ! overridableProps ) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn overridableProps.groups.order\n\t\t\t.map( ( groupId ) => overridableProps.groups.items[ groupId ] ?? null )\n\t\t\t.filter( Boolean );\n\t}, [ overridableProps ] );\n\n\tconst allGroupsForSelect = useMemo(\n\t\t() => groups.map( ( group ) => ( { value: group.id, label: group.label } ) ),\n\t\t[ groups ]\n\t);\n\n\tif ( ! currentComponentId || ! overridableProps ) {\n\t\treturn null;\n\t}\n\n\tconst hasGroups = groups.length > 0;\n\tconst showEmptyState = ! hasGroups && ! isAddingGroup;\n\tconst groupIds = overridableProps.groups.order;\n\n\tconst handleAddGroupClick = () => {\n\t\tif ( isAddingGroup ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst newGroupId = generateUniqueId( 'group' );\n\t\tconst newLabel = generateUniqueLabel( groups );\n\n\t\taddOverridableGroup( { componentId: currentComponentId, groupId: newGroupId, label: newLabel } );\n\t\tsetDocumentModifiedStatus( true );\n\t\tsetIsAddingGroup( false );\n\n\t\tgroupLabelEditable.setEditingGroupId( newGroupId );\n\t};\n\n\tconst handleGroupsReorder = ( newOrder: string[] ) => {\n\t\treorderOverridableGroups( { componentId: currentComponentId, newOrder } );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst handlePropsReorder = ( groupId: string, newPropsOrder: string[] ) => {\n\t\treorderGroupProps( { componentId: currentComponentId, groupId, newPropsOrder } );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst handlePropertyDelete = ( propKey: string ) => {\n\t\tdeleteOverridableProp( { componentId: currentComponentId, propKey } );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst handlePropertyUpdate = ( overrideKey: string, data: { label: string; group: string | null } ) => {\n\t\tupdateOverridablePropParams( {\n\t\t\tcomponentId: currentComponentId,\n\t\t\toverrideKey,\n\t\t\tlabel: data.label,\n\t\t\tgroupId: data.group,\n\t\t} );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst handleGroupDelete = ( groupId: string ) => {\n\t\tdeleteOverridableGroup( { componentId: currentComponentId, groupId } );\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PanelHeader sx={ { justifyContent: 'start', pl: 1.5, pr: 1, py: 1 } }>\n\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 0.5 } flexGrow={ 1 }>\n\t\t\t\t\t<ComponentPropListIcon fontSize=\"tiny\" />\n\t\t\t\t\t<PanelHeaderTitle variant=\"subtitle2\">\n\t\t\t\t\t\t{ __( 'Component properties', 'elementor' ) }\n\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t</Stack>\n\n\t\t\t\t{ ! showEmptyState && (\n\t\t\t\t\t<Tooltip title={ __( 'Add new group', 'elementor' ) }>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\taria-label={ __( 'Add new group', 'elementor' ) }\n\t\t\t\t\t\t\tonClick={ handleAddGroupClick }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<FolderPlusIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) }\n\n\t\t\t\t<Tooltip title={ __( 'Close panel', 'elementor' ) }>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tref={ introductionRef }\n\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\taria-label={ __( 'Close panel', 'elementor' ) }\n\t\t\t\t\t\tonClick={ onClose }\n\t\t\t\t\t>\n\t\t\t\t\t\t<XIcon fontSize=\"tiny\" />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t</PanelHeader>\n\n\t\t\t<Divider />\n\n\t\t\t<PanelBody>\n\t\t\t\t{ showEmptyState ? (\n\t\t\t\t\t<PropertiesEmptyState introductionRef={ introductionRef } />\n\t\t\t\t) : (\n\t\t\t\t\t<List sx={ { p: 2, display: 'flex', flexDirection: 'column', gap: 2 } }>\n\t\t\t\t\t\t<SortableProvider value={ groupIds } onChange={ handleGroupsReorder }>\n\t\t\t\t\t\t\t{ groups.map( ( group ) => (\n\t\t\t\t\t\t\t\t<SortableItem key={ group.id } id={ group.id }>\n\t\t\t\t\t\t\t\t\t{ ( { triggerProps, triggerStyle, isDragPlaceholder } ) => (\n\t\t\t\t\t\t\t\t\t\t<PropertiesGroup\n\t\t\t\t\t\t\t\t\t\t\tgroup={ group }\n\t\t\t\t\t\t\t\t\t\t\tprops={ overridableProps.props }\n\t\t\t\t\t\t\t\t\t\t\tallGroups={ allGroupsForSelect }\n\t\t\t\t\t\t\t\t\t\t\tallGroupsRecord={ overridableProps.groups.items }\n\t\t\t\t\t\t\t\t\t\t\tsortableTriggerProps={ { ...triggerProps, style: triggerStyle } }\n\t\t\t\t\t\t\t\t\t\t\tisDragPlaceholder={ isDragPlaceholder }\n\t\t\t\t\t\t\t\t\t\t\tsetIsAddingGroup={ setIsAddingGroup }\n\t\t\t\t\t\t\t\t\t\t\tonPropsReorder={ ( newOrder ) => handlePropsReorder( group.id, newOrder ) }\n\t\t\t\t\t\t\t\t\t\t\tonPropertyDelete={ handlePropertyDelete }\n\t\t\t\t\t\t\t\t\t\t\tonPropertyUpdate={ handlePropertyUpdate }\n\t\t\t\t\t\t\t\t\t\t\teditableLabelProps={ groupLabelEditable }\n\t\t\t\t\t\t\t\t\t\t\tonGroupDelete={ handleGroupDelete }\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</SortableProvider>\n\t\t\t\t\t</List>\n\t\t\t\t) }\n\t\t\t</PanelBody>\n\t\t</>\n\t);\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId, type OverridablePropsGroup } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype AddGroupParams = {\n\tcomponentId: ComponentId;\n\tgroupId: string;\n\tlabel: string;\n};\n\nexport function addOverridableGroup( {\n\tcomponentId,\n\tgroupId,\n\tlabel,\n}: AddGroupParams ): OverridablePropsGroup | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst newGroup: OverridablePropsGroup = {\n\t\tid: groupId,\n\t\tlabel,\n\t\tprops: [],\n\t};\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tgroups: {\n\t\t\t\t\t...overridableProps.groups,\n\t\t\t\t\titems: {\n\t\t\t\t\t\t...overridableProps.groups.items,\n\t\t\t\t\t\t[ groupId ]: newGroup,\n\t\t\t\t\t},\n\t\t\t\t\torder: [ groupId, ...overridableProps.groups.order ],\n\t\t\t\t},\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn newGroup;\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport { deleteGroup } from '../utils/groups-transformers';\n\ntype DeleteGroupParams = {\n\tcomponentId: ComponentId;\n\tgroupId: string;\n};\n\nexport function deleteOverridableGroup( { componentId, groupId }: DeleteGroupParams ): boolean {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn false;\n\t}\n\n\tconst group = overridableProps.groups.items[ groupId ];\n\n\tif ( ! group || group.props.length > 0 ) {\n\t\treturn false;\n\t}\n\n\tconst updatedGroups = deleteGroup( overridableProps.groups, groupId );\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tgroups: updatedGroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn true;\n}\n","import { generateUniqueId } from '@elementor/utils';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp, type OverridableProps, type OverridablePropsGroup } from '../../types';\n\ntype Groups = OverridableProps[ 'groups' ];\n\nexport function removePropFromAllGroups( groups: Groups, propKey: string ): Groups {\n\treturn {\n\t\t...groups,\n\t\titems: Object.fromEntries(\n\t\t\tObject.entries( groups.items ).map( ( [ groupId, group ] ) => [\n\t\t\t\tgroupId,\n\t\t\t\t{\n\t\t\t\t\t...group,\n\t\t\t\t\tprops: group.props.filter( ( p ) => p !== propKey ),\n\t\t\t\t},\n\t\t\t] )\n\t\t),\n\t};\n}\n\nexport function addPropToGroup( groups: Groups, groupId: string, propKey: string ): Groups {\n\tconst group = groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn groups;\n\t}\n\n\tif ( group.props.includes( propKey ) ) {\n\t\treturn groups;\n\t}\n\n\treturn {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ groupId ]: {\n\t\t\t\t...group,\n\t\t\t\tprops: [ ...group.props, propKey ],\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function movePropBetweenGroups(\n\tgroups: Groups,\n\tpropKey: string,\n\tfromGroupId: string,\n\ttoGroupId: string\n): Groups {\n\tif ( fromGroupId === toGroupId ) {\n\t\treturn groups;\n\t}\n\n\tconst withoutProp = removePropFromGroup( groups, fromGroupId, propKey );\n\treturn addPropToGroup( withoutProp, toGroupId, propKey );\n}\n\nexport function removePropFromGroup( groups: Groups, groupId: string, propKey: string ): Groups {\n\tconst group = groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn groups;\n\t}\n\n\treturn {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ groupId ]: {\n\t\t\t\t...group,\n\t\t\t\tprops: group.props.filter( ( p ) => p !== propKey ),\n\t\t\t},\n\t\t},\n\t};\n}\n\ntype ResolvedGroup = {\n\tgroups: Groups;\n\tgroupId: string;\n};\n\nexport function resolveOrCreateGroup( groups: Groups, requestedGroupId?: string ): ResolvedGroup {\n\tif ( requestedGroupId && groups.items[ requestedGroupId ] ) {\n\t\treturn { groups, groupId: requestedGroupId };\n\t}\n\n\tif ( ! requestedGroupId && groups.order.length > 0 ) {\n\t\treturn { groups, groupId: groups.order[ 0 ] };\n\t}\n\n\treturn createGroup( groups, requestedGroupId );\n}\n\nexport function createGroup( groups: Groups, groupId?: string, label?: string ): ResolvedGroup {\n\tconst newGroupId = groupId || generateUniqueId( 'group' );\n\tconst newLabel = label || __( 'Default', 'elementor' );\n\n\treturn {\n\t\tgroups: {\n\t\t\t...groups,\n\t\t\titems: {\n\t\t\t\t...groups.items,\n\t\t\t\t[ newGroupId ]: {\n\t\t\t\t\tid: newGroupId,\n\t\t\t\t\tlabel: newLabel,\n\t\t\t\t\tprops: [],\n\t\t\t\t},\n\t\t\t},\n\t\t\torder: [ ...groups.order, newGroupId ],\n\t\t},\n\t\tgroupId: newGroupId,\n\t};\n}\n\nexport function removePropsFromState(\n\toverridableProps: OverridableProps,\n\tpropsToRemove: OverridableProp[]\n): OverridableProps {\n\tconst overrideKeysToRemove = propsToRemove.map( ( prop ) => prop.overrideKey );\n\n\tconst remainingProps = Object.fromEntries(\n\t\tObject.entries( overridableProps.props ).filter( ( [ , prop ] ) => ! propsToRemove.includes( prop ) )\n\t);\n\n\tconst updatedGroupItems = Object.fromEntries(\n\t\tObject.entries( overridableProps.groups.items ).map(\n\t\t\t( [ groupId, group ]: [ string, OverridablePropsGroup ] ) => [\n\t\t\t\tgroupId,\n\t\t\t\t{\n\t\t\t\t\t...group,\n\t\t\t\t\tprops: group.props.filter( ( prop ) => ! overrideKeysToRemove.includes( prop ) ),\n\t\t\t\t},\n\t\t\t]\n\t\t)\n\t);\n\n\treturn {\n\t\tprops: remainingProps,\n\t\tgroups: {\n\t\t\titems: updatedGroupItems,\n\t\t\torder: overridableProps.groups.order.filter( ( groupId ) => ! overrideKeysToRemove.includes( groupId ) ),\n\t\t},\n\t};\n}\n\nexport function ensureGroupInOrder( groups: Groups, groupId: string ): Groups {\n\tif ( groups.order.includes( groupId ) ) {\n\t\treturn groups;\n\t}\n\n\treturn {\n\t\t...groups,\n\t\torder: [ ...groups.order, groupId ],\n\t};\n}\n\nexport function deleteGroup( groups: Groups, groupId: string ): Groups {\n\tconst { [ groupId ]: removed, ...remainingItems } = groups.items;\n\n\treturn {\n\t\titems: remainingItems,\n\t\torder: groups.order.filter( ( id ) => id !== groupId ),\n\t};\n}\n\nexport function renameGroup( groups: Groups, groupId: string, newLabel: string ): Groups {\n\tconst group = groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn groups;\n\t}\n\n\treturn {\n\t\t...groups,\n\t\titems: {\n\t\t\t...groups.items,\n\t\t\t[ groupId ]: {\n\t\t\t\t...group,\n\t\t\t\tlabel: newLabel,\n\t\t\t},\n\t\t},\n\t};\n}\n","import { getContainer, updateElementSettings } from '@elementor/editor-elements';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport { removePropFromAllGroups } from '../utils/groups-transformers';\n\ntype DeletePropParams = {\n\tcomponentId: ComponentId;\n\tpropKey: string;\n};\n\nexport function deleteOverridableProp( { componentId, propKey }: DeletePropParams ): void {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst prop = overridableProps.props[ propKey ];\n\n\tif ( ! prop ) {\n\t\treturn;\n\t}\n\n\trevertElementSetting( prop.elementId, prop.propKey, prop.originValue );\n\n\tconst { [ propKey ]: removedProp, ...remainingProps } = overridableProps.props;\n\n\tconst updatedGroups = removePropFromAllGroups( overridableProps.groups, propKey );\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tprops: remainingProps,\n\t\t\t\tgroups: updatedGroups,\n\t\t\t},\n\t\t} )\n\t);\n}\n\nfunction revertElementSetting( elementId: string, settingKey: string, originValue: unknown ): void {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tupdateElementSettings( {\n\t\tid: elementId,\n\t\tprops: { [ settingKey ]: originValue ?? null },\n\t\twithHistory: false,\n\t} );\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype ReorderGroupPropsParams = {\n\tcomponentId: ComponentId;\n\tgroupId: string;\n\tnewPropsOrder: string[];\n};\n\nexport function reorderGroupProps( { componentId, groupId, newPropsOrder }: ReorderGroupPropsParams ): void {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst group = overridableProps.groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn;\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tgroups: {\n\t\t\t\t\t...overridableProps.groups,\n\t\t\t\t\titems: {\n\t\t\t\t\t\t...overridableProps.groups.items,\n\t\t\t\t\t\t[ groupId ]: {\n\t\t\t\t\t\t\t...group,\n\t\t\t\t\t\t\tprops: newPropsOrder,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t} )\n\t);\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\ntype ReorderGroupsParams = {\n\tcomponentId: ComponentId;\n\tnewOrder: string[];\n};\n\nexport function reorderOverridableGroups( { componentId, newOrder }: ReorderGroupsParams ): void {\n\tconst overridableProps = selectOverridableProps( getState(), 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\t\t...overridableProps,\n\t\t\t\tgroups: {\n\t\t\t\t\t...overridableProps.groups,\n\t\t\t\t\torder: newOrder,\n\t\t\t\t},\n\t\t\t},\n\t\t} )\n\t);\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId, type OverridableProp } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport { movePropBetweenGroups } from '../utils/groups-transformers';\n\ntype UpdatePropParams = {\n\tcomponentId: ComponentId;\n\toverrideKey: string;\n\tlabel: string;\n\tgroupId: string | null;\n};\n\nexport function updateOverridablePropParams( {\n\tcomponentId,\n\toverrideKey,\n\tlabel,\n\tgroupId,\n}: UpdatePropParams ): OverridableProp | undefined {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tconst prop = overridableProps.props[ overrideKey ];\n\n\tif ( ! prop ) {\n\t\treturn;\n\t}\n\n\tconst oldGroupId = prop.groupId;\n\tconst newGroupId = groupId ?? oldGroupId;\n\n\tconst updatedProp: OverridableProp = {\n\t\t...prop,\n\t\tlabel,\n\t\tgroupId: newGroupId,\n\t};\n\n\tconst updatedGroups = movePropBetweenGroups( overridableProps.groups, overrideKey, oldGroupId, newGroupId );\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tprops: {\n\t\t\t\t\t...overridableProps.props,\n\t\t\t\t\t[ overrideKey ]: updatedProp,\n\t\t\t\t},\n\t\t\t\tgroups: updatedGroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn updatedProp;\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 { useState } from 'react';\nimport { ComponentPropListIcon } from '@elementor/icons';\nimport { Link, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { ComponentIntroduction } from '../components-tab/component-introduction';\n\nexport function PropertiesEmptyState( { introductionRef }: { introductionRef: React.RefObject< HTMLButtonElement > } ) {\n\tconst [ isOpen, setIsOpen ] = useState( false );\n\treturn (\n\t\t<>\n\t\t\t<Stack\n\t\t\t\talignItems=\"center\"\n\t\t\t\tjustifyContent=\"flex-start\"\n\t\t\t\theight=\"100%\"\n\t\t\t\tcolor=\"text.secondary\"\n\t\t\t\tsx={ { px: 2.5, pt: 10, pb: 5.5 } }\n\t\t\t\tgap={ 1 }\n\t\t\t>\n\t\t\t\t<ComponentPropListIcon fontSize=\"large\" />\n\n\t\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t\t{ __( 'Add your first property', 'elementor' ) }\n\t\t\t\t</Typography>\n\n\t\t\t\t<Typography align=\"center\" variant=\"caption\">\n\t\t\t\t\t{ __( 'Make instances flexible while keeping design synced.', 'elementor' ) }\n\t\t\t\t</Typography>\n\n\t\t\t\t<Typography align=\"center\" variant=\"caption\">\n\t\t\t\t\t{ __( 'Select any element, then click + next to a setting to expose it.', 'elementor' ) }\n\t\t\t\t</Typography>\n\n\t\t\t\t<Link\n\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\tcolor=\"secondary\"\n\t\t\t\t\tsx={ { textDecorationLine: 'underline' } }\n\t\t\t\t\tonClick={ () => setIsOpen( true ) }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Learn more', 'elementor' ) }\n\t\t\t\t</Link>\n\t\t\t</Stack>\n\t\t\t<ComponentIntroduction\n\t\t\t\tanchorRef={ introductionRef }\n\t\t\t\tshouldShowIntroduction={ isOpen }\n\t\t\t\tonClose={ () => setIsOpen( false ) }\n\t\t\t/>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { PopoverContent } from '@elementor/editor-controls';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { Box, Button, Image, Popover, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const ComponentIntroduction = ( {\n\tanchorRef,\n\tshouldShowIntroduction,\n\tonClose,\n}: {\n\tanchorRef: React.RefObject< HTMLElement >;\n\tshouldShowIntroduction: boolean;\n\tonClose: () => void;\n} ) => {\n\tif ( ! anchorRef.current || ! shouldShowIntroduction ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Popover\n\t\t\tanchorEl={ anchorRef.current }\n\t\t\topen={ shouldShowIntroduction }\n\t\t\tanchorOrigin={ {\n\t\t\t\tvertical: 'top',\n\t\t\t\thorizontal: 'right',\n\t\t\t} }\n\t\t\ttransformOrigin={ {\n\t\t\t\tvertical: 'top',\n\t\t\t\thorizontal: -30,\n\t\t\t} }\n\t\t\tonClose={ onClose }\n\t\t>\n\t\t\t<Box sx={ { width: '296px' } }>\n\t\t\t\t<PopoverHeader title={ __( 'Add your first property', 'elementor' ) } onClose={ onClose } />\n\t\t\t\t<Image\n\t\t\t\t\tsx={ { width: '296px', height: '160px' } }\n\t\t\t\t\tsrc={ 'https://assets.elementor.com/packages/v1/images/components-properties-intro.png' }\n\t\t\t\t\talt={ '' }\n\t\t\t\t/>\n\t\t\t\t<PopoverContent>\n\t\t\t\t\t<Stack gap={ 1 } sx={ { p: 2 } }>\n\t\t\t\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t\t\t\t{ __( 'Properties make instances flexible.', 'elementor' ) }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Click next to any setting you want users to customize - like text, images, or links.',\n\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography variant={ 'body2' }>\n\t\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\t'Your properties will appear in the Properties panel, where you can organize and manage them anytime.',\n\t\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"flex-end\">\n\t\t\t\t\t\t\t<Button size=\"medium\" variant=\"contained\" onClick={ onClose }>\n\t\t\t\t\t\t\t\t{ __( 'Got it', 'elementor' ) }\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Stack>\n\t\t\t\t</PopoverContent>\n\t\t\t</Box>\n\t\t</Popover>\n\t);\n};\n","import * as React from 'react';\nimport { EditableField, MenuListItem } from '@elementor/editor-ui';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport {\n\tbindMenu,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tList,\n\tMenu,\n\tStack,\n\tTooltip,\n\tTypography,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type OverridableProp, type OverridablePropsGroup } from '../../types';\nimport { PropertyItem } from './property-item';\nimport { SortableItem, SortableProvider, SortableTrigger, type SortableTriggerProps } from './sortable';\nimport { type GroupLabelEditableState } from './use-current-editable-item';\n\ntype Props = {\n\tgroup: OverridablePropsGroup;\n\tprops: Record< string, OverridableProp >;\n\tallGroups: { value: string; label: string }[];\n\tallGroupsRecord: Record< string, OverridablePropsGroup >;\n\tsortableTriggerProps: SortableTriggerProps;\n\tisDragPlaceholder?: boolean;\n\tsetIsAddingGroup: ( isAddingGroup: boolean ) => void;\n\tonPropsReorder: ( newOrder: string[] ) => void;\n\tonPropertyDelete: ( propKey: string ) => void;\n\tonPropertyUpdate: ( propKey: string, data: { label: string; group: string | null } ) => void;\n\tonGroupDelete: ( groupId: string ) => void;\n\teditableLabelProps: GroupLabelEditableState;\n};\n\nexport function PropertiesGroup( {\n\tgroup,\n\tprops,\n\tallGroups,\n\tsortableTriggerProps,\n\tisDragPlaceholder,\n\tonPropsReorder,\n\tonPropertyDelete,\n\tonPropertyUpdate,\n\tonGroupDelete,\n\teditableLabelProps,\n}: Props ) {\n\tconst groupProps = group.props\n\t\t.map( ( propId ) => props[ propId ] )\n\t\t.filter( ( prop ): prop is OverridableProp => Boolean( prop ) );\n\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tdisableAutoFocus: true,\n\t} );\n\n\tconst { editableRef, isEditing, error, getEditableProps, setEditingGroupId, editingGroupId } = editableLabelProps;\n\n\tconst hasProperties = group.props.length > 0;\n\tconst isThisGroupEditing = isEditing && editingGroupId === group.id;\n\n\tconst handleRenameClick = () => {\n\t\tpopupState.close();\n\t\tsetEditingGroupId( group.id );\n\t};\n\n\tconst handleDeleteClick = () => {\n\t\tpopupState.close();\n\t\tonGroupDelete( group.id );\n\t};\n\n\treturn (\n\t\t<Box\n\t\t\tsx={ {\n\t\t\t\topacity: isDragPlaceholder ? 0.5 : 1,\n\t\t\t} }\n\t\t>\n\t\t\t<Stack gap={ 1 }>\n\t\t\t\t<Box\n\t\t\t\t\tclassName=\"group-header\"\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\t'&:hover .group-sortable-trigger': {\n\t\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'& .group-sortable-trigger': {\n\t\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'&:hover .group-menu': {\n\t\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'& .group-menu': {\n\t\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t\t},\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<SortableTrigger triggerClassName=\"group-sortable-trigger\" { ...sortableTriggerProps } />\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" gap={ 2 }>\n\t\t\t\t\t\t{ isThisGroupEditing ? (\n\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t\theight: 28,\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\t\t\t\tborder: 2,\n\t\t\t\t\t\t\t\t\tborderColor: 'text.secondary',\n\t\t\t\t\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\t\t\t\t\tpl: 0.5,\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<EditableField\n\t\t\t\t\t\t\t\t\tref={ editableRef }\n\t\t\t\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\terror={ error ?? undefined }\n\t\t\t\t\t\t\t\t\tsx={ { color: 'text.primary', fontWeight: 400, lineHeight: 1.66 } }\n\t\t\t\t\t\t\t\t\t{ ...getEditableProps() }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\tsx={ { color: 'text.primary', fontWeight: 400, lineHeight: 1.66 } }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ group.label }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tclassName=\"group-menu\"\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tsx={ { p: 0.25, visibility: isThisGroupEditing ? 'visible' : undefined } }\n\t\t\t\t\t\t\taria-label={ __( 'Group actions', 'elementor' ) }\n\t\t\t\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Stack>\n\t\t\t\t</Box>\n\t\t\t\t<List sx={ { p: 0, display: 'flex', flexDirection: 'column', gap: 1 } }>\n\t\t\t\t\t<SortableProvider value={ group.props } onChange={ onPropsReorder }>\n\t\t\t\t\t\t{ groupProps.map( ( prop ) => (\n\t\t\t\t\t\t\t<SortableItem key={ prop.overrideKey } id={ prop.overrideKey }>\n\t\t\t\t\t\t\t\t{ ( { triggerProps, triggerStyle, isDragPlaceholder: isItemDragPlaceholder } ) => (\n\t\t\t\t\t\t\t\t\t<PropertyItem\n\t\t\t\t\t\t\t\t\t\tprop={ prop }\n\t\t\t\t\t\t\t\t\t\tsortableTriggerProps={ { ...triggerProps, style: triggerStyle } }\n\t\t\t\t\t\t\t\t\t\tisDragPlaceholder={ isItemDragPlaceholder }\n\t\t\t\t\t\t\t\t\t\tgroups={ allGroups }\n\t\t\t\t\t\t\t\t\t\tonDelete={ onPropertyDelete }\n\t\t\t\t\t\t\t\t\t\tonUpdate={ ( data ) => onPropertyUpdate( prop.overrideKey, data ) }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t</SortableItem>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</SortableProvider>\n\t\t\t\t</List>\n\t\t\t</Stack>\n\t\t\t<Menu\n\t\t\t\t{ ...bindMenu( popupState ) }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'right' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t>\n\t\t\t\t<MenuListItem sx={ { minWidth: '160px' } } onClick={ handleRenameClick }>\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary' } }>\n\t\t\t\t\t\t{ __( 'Rename', 'elementor' ) }\n\t\t\t\t\t</Typography>\n\t\t\t\t</MenuListItem>\n\t\t\t\t<Tooltip\n\t\t\t\t\ttitle={\n\t\t\t\t\t\thasProperties ? __( 'To delete the group, first remove all the properties', 'elementor' ) : ''\n\t\t\t\t\t}\n\t\t\t\t\tplacement=\"right\"\n\t\t\t\t>\n\t\t\t\t\t<span>\n\t\t\t\t\t\t<MenuListItem onClick={ handleDeleteClick } disabled={ hasProperties }>\n\t\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\tsx={ { color: hasProperties ? 'text.disabled' : 'error.light' } }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</MenuListItem>\n\t\t\t\t\t</span>\n\t\t\t\t</Tooltip>\n\t\t\t</Menu>\n\t\t</Box>\n\t);\n}\n","import * as React from 'react';\nimport { getWidgetsCache } from '@elementor/editor-elements';\nimport { XIcon } from '@elementor/icons';\nimport { bindPopover, bindTrigger, Box, IconButton, Popover, Typography, usePopupState } from '@elementor/ui';\n\nimport { type OverridableProp } from '../../types';\nimport { OverridablePropForm } from '../overridable-props/overridable-prop-form';\nimport { SortableTrigger, type SortableTriggerProps } from './sortable';\n\ntype PropertyItemProps = {\n\tprop: OverridableProp;\n\tsortableTriggerProps: SortableTriggerProps;\n\tisDragPlaceholder?: boolean;\n\tgroups: { value: string; label: string }[];\n\tonDelete: ( propKey: string ) => void;\n\tonUpdate: ( data: { label: string; group: string | null } ) => void;\n};\n\nexport function PropertyItem( {\n\tprop,\n\tsortableTriggerProps,\n\tisDragPlaceholder,\n\tgroups,\n\tonDelete,\n\tonUpdate,\n}: PropertyItemProps ) {\n\tconst popoverState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\tconst icon = getElementIcon( prop );\n\tconst popoverProps = bindPopover( popoverState );\n\n\tconst handleSubmit = ( data: { label: string; group: string | null } ) => {\n\t\tonUpdate( data );\n\t\tpopoverState.close();\n\t};\n\n\tconst handleDelete = ( event: React.MouseEvent ) => {\n\t\tevent.stopPropagation();\n\t\tonDelete( prop.overrideKey );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Box\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tsx={ {\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\tpl: 0.5,\n\t\t\t\t\tpr: 1,\n\t\t\t\t\tpy: 0.25,\n\t\t\t\t\tminHeight: 28,\n\t\t\t\t\tborderRadius: 1,\n\t\t\t\t\tborder: '1px solid',\n\t\t\t\t\tborderColor: 'divider',\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 0.5,\n\t\t\t\t\topacity: isDragPlaceholder ? 0.5 : 1,\n\t\t\t\t\tcursor: 'pointer',\n\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\tbackgroundColor: 'action.hover',\n\t\t\t\t\t},\n\t\t\t\t\t'&:hover .sortable-trigger': {\n\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t},\n\t\t\t\t\t'& .sortable-trigger': {\n\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t},\n\t\t\t\t\t'&:hover .delete-button': {\n\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t},\n\t\t\t\t\t'& .delete-button': {\n\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<SortableTrigger { ...sortableTriggerProps } />\n\t\t\t\t<Box\n\t\t\t\t\tsx={ { display: 'flex', alignItems: 'center', color: 'text.primary', fontSize: 12, padding: 0.25 } }\n\t\t\t\t>\n\t\t\t\t\t<i className={ icon } />\n\t\t\t\t</Box>\n\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', flexGrow: 1, fontSize: 10 } }>\n\t\t\t\t\t{ prop.label }\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton size=\"tiny\" onClick={ handleDelete } aria-label=\"Delete property\" sx={ { p: 0.25 } }>\n\t\t\t\t\t<XIcon fontSize=\"tiny\" />\n\t\t\t\t</IconButton>\n\t\t\t</Box>\n\n\t\t\t<Popover\n\t\t\t\t{ ...popoverProps }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'left' } }\n\t\t\t\tPaperProps={ { sx: { width: popoverState.anchorEl?.getBoundingClientRect().width } } }\n\t\t\t>\n\t\t\t\t<OverridablePropForm\n\t\t\t\t\tonSubmit={ handleSubmit }\n\t\t\t\t\tcurrentValue={ prop }\n\t\t\t\t\tgroups={ groups }\n\t\t\t\t\tsx={ { width: '100%' } }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nfunction getElementIcon( prop: OverridableProp ): string {\n\tconst elType = prop.elType === 'widget' ? prop.widgetType : prop.elType;\n\n\tconst widgetsCache = getWidgetsCache();\n\n\tif ( ! widgetsCache ) {\n\t\treturn 'eicon-apps';\n\t}\n\n\tconst widgetConfig = widgetsCache[ elType ];\n\n\treturn widgetConfig?.icon || 'eicon-apps';\n}\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { Form, MenuListItem } from '@elementor/editor-ui';\nimport { Button, FormLabel, Grid, Select, Stack, type SxProps, 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\tsx?: SxProps;\n};\n\nexport function OverridablePropForm( { onSubmit, groups, currentValue, sx }: 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\" sx={ { width: '268px', ...sx } }>\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={ ( e: React.ChangeEvent< HTMLSelectElement > ) =>\n\t\t\t\t\t\t\t\tsetGroup( e.target.value as string | null )\n\t\t\t\t\t\t\t}\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 * as React from 'react';\nimport { GripVerticalIcon } from '@elementor/icons';\nimport {\n\tBox,\n\tstyled,\n\tUnstableSortableItem,\n\ttype UnstableSortableItemProps,\n\ttype UnstableSortableItemRenderProps,\n\tUnstableSortableProvider,\n\ttype UnstableSortableProviderProps,\n} from '@elementor/ui';\n\nexport const SortableProvider = < T extends string >( props: UnstableSortableProviderProps< T > ) => (\n\t<UnstableSortableProvider restrictAxis variant=\"static\" dragPlaceholderStyle={ { opacity: '1' } } { ...props } />\n);\n\nexport type SortableTriggerProps = React.HTMLAttributes< HTMLDivElement > & {\n\ttriggerClassName?: string;\n};\n\nexport const SortableTrigger = ( { triggerClassName, ...props }: SortableTriggerProps ) => (\n\t<StyledSortableTrigger\n\t\t{ ...props }\n\t\trole=\"button\"\n\t\tclassName={ `sortable-trigger ${ triggerClassName ?? '' }`.trim() }\n\t\taria-label=\"sort\"\n\t>\n\t\t<GripVerticalIcon fontSize=\"tiny\" />\n\t</StyledSortableTrigger>\n);\n\ntype SortableItemProps = {\n\tid: UnstableSortableItemProps[ 'id' ];\n\tchildren: ( props: SortableItemRenderData ) => React.ReactNode;\n};\n\nexport type SortableItemRenderData = {\n\tisDragged: boolean;\n\tisDragPlaceholder: boolean;\n\ttriggerProps: React.HTMLAttributes< HTMLElement >;\n\ttriggerStyle: React.CSSProperties;\n};\n\nexport const SortableItem = ( { children, id }: SortableItemProps ) => (\n\t<UnstableSortableItem\n\t\tid={ id }\n\t\trender={ ( {\n\t\t\titemProps,\n\t\t\tisDragged,\n\t\t\ttriggerProps,\n\t\t\titemStyle,\n\t\t\ttriggerStyle,\n\t\t\tdropIndicationStyle,\n\t\t\tshowDropIndication,\n\t\t\tisDragOverlay,\n\t\t\tisDragPlaceholder,\n\t\t}: UnstableSortableItemRenderProps ) => (\n\t\t\t<Box\n\t\t\t\t{ ...itemProps }\n\t\t\t\tstyle={ itemStyle }\n\t\t\t\tcomponent=\"div\"\n\t\t\t\trole=\"listitem\"\n\t\t\t\tsx={ {\n\t\t\t\t\tbackgroundColor: isDragOverlay ? 'background.paper' : undefined,\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ children( {\n\t\t\t\t\tisDragged,\n\t\t\t\t\tisDragPlaceholder,\n\t\t\t\t\ttriggerProps,\n\t\t\t\t\ttriggerStyle,\n\t\t\t\t} ) }\n\t\t\t\t{ showDropIndication && <SortableItemIndicator style={ dropIndicationStyle } /> }\n\t\t\t</Box>\n\t\t) }\n\t/>\n);\n\nconst StyledSortableTrigger = styled( 'div' )( ( { theme } ) => ( {\n\tposition: 'absolute',\n\tleft: '-2px',\n\ttop: '50%',\n\ttransform: `translate( -${ theme.spacing( 1.5 ) }, -50% )`,\n\tcolor: theme.palette.action.active,\n\tcursor: 'grab',\n} ) );\n\nconst SortableItemIndicator = styled( Box )`\n\twidth: 100%;\n\theight: 1px;\n\tbackground-color: ${ ( { theme } ) => theme.palette.text.primary };\n`;\n","import { useState } from 'react';\nimport type * as React from 'react';\nimport { setDocumentModifiedStatus } from '@elementor/editor-documents';\nimport { useEditable } from '@elementor/editor-ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { renameOverridableGroup } from '../../store/actions/rename-overridable-group';\nimport { useCurrentComponentId } from '../../store/store';\nimport { useOverridableProps } from '../component-panel-header/use-overridable-props';\nimport { validateGroupLabel } from './utils/validate-group-label';\n\nexport type GroupLabelEditableState = {\n\teditableRef: React.RefObject< HTMLElement | null >;\n\tisEditing: boolean;\n\terror: string | null;\n\tgetEditableProps: () => { value: string };\n\tsetEditingGroupId: ( groupId: string ) => void;\n\teditingGroupId: string | null;\n};\n\nexport function useCurrentEditableItem(): GroupLabelEditableState {\n\tconst [ editingGroupId, setEditingGroupId ] = useState< string | null >( null );\n\tconst currentComponentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( currentComponentId );\n\n\tconst allGroupsRecord = overridableProps?.groups?.items ?? {};\n\tconst currentGroup = editingGroupId ? allGroupsRecord[ editingGroupId ] : null;\n\n\tconst validateLabel = ( newLabel: string ): string | null => {\n\t\tconst otherGroups = Object.fromEntries(\n\t\t\tObject.entries( allGroupsRecord ).filter( ( [ id ] ) => id !== editingGroupId )\n\t\t);\n\n\t\treturn validateGroupLabel( newLabel, otherGroups ) || null;\n\t};\n\n\tconst handleSubmit = ( newLabel: string ) => {\n\t\tif ( ! editingGroupId || ! currentComponentId ) {\n\t\t\tthrow new Error( __( 'Group ID or component ID is missing', 'elementor' ) );\n\t\t}\n\n\t\trenameOverridableGroup( {\n\t\t\tcomponentId: currentComponentId,\n\t\t\tgroupId: editingGroupId,\n\t\t\tlabel: newLabel,\n\t\t} );\n\n\t\tsetDocumentModifiedStatus( true );\n\t};\n\n\tconst {\n\t\tref: editableRef,\n\t\topenEditMode,\n\t\tisEditing,\n\t\terror,\n\t\tgetProps: getEditableProps,\n\t} = useEditable( {\n\t\tvalue: currentGroup?.label ?? '',\n\t\tonSubmit: handleSubmit,\n\t\tvalidation: validateLabel,\n\t} );\n\n\treturn {\n\t\teditableRef,\n\t\tisEditing,\n\t\terror,\n\t\tgetEditableProps,\n\t\tsetEditingGroupId: ( groupId ) => {\n\t\t\tsetEditingGroupId( groupId );\n\t\t\topenEditMode();\n\t\t},\n\t\teditingGroupId,\n\t};\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentId } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport { renameGroup } from '../utils/groups-transformers';\n\ntype RenameGroupParams = {\n\tcomponentId: ComponentId;\n\tgroupId: string;\n\tlabel: string;\n};\n\nexport function renameOverridableGroup( { componentId, groupId, label }: RenameGroupParams ): boolean {\n\tconst overridableProps = selectOverridableProps( getState(), componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn false;\n\t}\n\n\tconst group = overridableProps.groups.items[ groupId ];\n\n\tif ( ! group ) {\n\t\treturn false;\n\t}\n\n\tconst updatedGroups = renameGroup( overridableProps.groups, groupId, label );\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps: {\n\t\t\t\t...overridableProps,\n\t\t\t\tgroups: updatedGroups,\n\t\t\t},\n\t\t} )\n\t);\n\n\treturn true;\n}\n","import { __ } from '@wordpress/i18n';\n\nimport { type OverridablePropsGroup } from '../../../types';\n\nexport const ERROR_MESSAGES = {\n\tEMPTY_NAME: __( 'Group name is required', 'elementor' ),\n\tDUPLICATE_NAME: __( 'Group name already exists', 'elementor' ),\n} as const;\n\nexport function validateGroupLabel( label: string, existingGroups: Record< string, OverridablePropsGroup > ): string {\n\tconst trimmedLabel = label.trim();\n\n\tif ( ! trimmedLabel ) {\n\t\treturn ERROR_MESSAGES.EMPTY_NAME;\n\t}\n\n\tconst isDuplicate = Object.values( existingGroups ).some( ( group ) => group.label === trimmedLabel );\n\n\tif ( isDuplicate ) {\n\t\treturn ERROR_MESSAGES.DUPLICATE_NAME;\n\t}\n\n\treturn '';\n}\n","import { type OverridablePropsGroup } from '../../../types';\n\nconst DEFAULT_NEW_GROUP_LABEL = 'New group';\n\nexport function generateUniqueLabel( groups: OverridablePropsGroup[] ): string {\n\tconst existingLabels = new Set( groups.map( ( group ) => group.label ) );\n\n\tif ( ! existingLabels.has( DEFAULT_NEW_GROUP_LABEL ) ) {\n\t\treturn DEFAULT_NEW_GROUP_LABEL;\n\t}\n\n\tlet index = 1;\n\tlet newLabel = `${ DEFAULT_NEW_GROUP_LABEL }-${ index }`;\n\n\twhile ( existingLabels.has( newLabel ) ) {\n\t\tindex++;\n\t\tnewLabel = `${ DEFAULT_NEW_GROUP_LABEL }-${ index }`;\n\t}\n\n\treturn newLabel;\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 = React.forwardRef< HTMLDivElement, { overridesCount: number; onClick: () => void } >(\n\t( { overridesCount, onClick }, ref ) => {\n\t\tconst prevCount = usePrevious( overridesCount );\n\n\t\tconst isFirstOverride = prevCount === 0 && overridesCount === 1;\n\n\t\treturn (\n\t\t\t<StyledBadge\n\t\t\t\tref={ ref }\n\t\t\t\tcolor=\"primary\"\n\t\t\t\tkey={ overridesCount }\n\t\t\t\tinvisible={ overridesCount === 0 }\n\t\t\t\tanimate={ isFirstOverride }\n\t\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\tbadgeContent={\n\t\t\t\t\t<Box sx={ { animation: ! isFirstOverride ? `${ slideUp } 300ms ease-out` : 'none' } }>\n\t\t\t\t\t\t{ overridesCount }\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<ToggleButton\n\t\t\t\t\tvalue=\"overrides\"\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tonClick={ onClick }\n\t\t\t\t\taria-label={ __( 'View overrides', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t<ComponentPropListIcon fontSize=\"tiny\" />\n\t\t\t\t</ToggleButton>\n\t\t\t</StyledBadge>\n\t\t);\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 * 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 ComponentInstanceProp } from './prop-types/component-instance-prop-type';\nimport { 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 COMPONENT_WIDGET_TYPE = 'e-component';\n\nconst updateGroups = ( groups: ContextMenuGroup[], config: ContextMenuGroupConfig ): ContextMenuGroup[] => {\n\tconst disableMap = new Map( Object.entries( config.disable ?? {} ) );\n\tconst addMap = new Map( Object.entries( config.add ?? {} ) );\n\n\treturn groups.map( ( group ) => {\n\t\tconst disabledActions = disableMap.get( group.name ) ?? [];\n\t\tconst addConfig = addMap.get( group.name );\n\n\t\t// Update disabled actions\n\t\tconst updatedActions = group.actions.map( ( action ) =>\n\t\t\tdisabledActions.includes( action.name ) ? { ...action, isEnabled: () => false } : action\n\t\t);\n\n\t\t// Insert additional action if needed\n\t\tif ( addConfig ) {\n\t\t\tupdatedActions.splice( addConfig.index, 0, addConfig.action );\n\t\t}\n\n\t\treturn { ...group, actions: updatedActions };\n\t} );\n};\n\nexport function createComponentType(\n\toptions: CreateTemplatedElementTypeOptions & { showLockedByModal?: ( lockedBy: string ) => void }\n): typeof ElementType {\n\tconst legacyWindow = window as unknown as LegacyWindow;\n\n\treturn class extends legacyWindow.elementor.modules.elements.types.Widget {\n\t\tgetType() {\n\t\t\treturn options.type;\n\t\t}\n\n\t\tgetView() {\n\t\t\treturn createComponentView( { ...options } );\n\t\t}\n\t};\n}\n\nfunction createComponentView(\n\toptions: CreateTemplatedElementTypeOptions & {\n\t\tshowLockedByModal?: ( lockedBy: string ) => void;\n\t}\n): typeof ElementView {\n\treturn class extends createTemplatedElementView( options ) {\n\t\tlegacyWindow = window as unknown as LegacyWindow & ExtendedWindow;\n\t\teventsManagerConfig = this.legacyWindow.elementorCommon.eventsManager.config;\n\n\t\tisComponentCurrentlyEdited() {\n\t\t\tconst currentDocument = getCurrentDocument();\n\n\t\t\treturn currentDocument?.id === this.getComponentId();\n\t\t}\n\n\t\tafterSettingsResolve( settings: { [ key: string ]: unknown } ) {\n\t\t\tconst componentInstance = settings.component_instance as\n\t\t\t\t| {\n\t\t\t\t\t\toverrides?: Record< string, unknown >;\n\t\t\t\t\t\telements?: unknown[];\n\t\t\t\t }\n\t\t\t\t| undefined;\n\n\t\t\tif ( componentInstance ) {\n\t\t\t\tthis.collection = this.legacyWindow.elementor.createBackboneElementsCollection(\n\t\t\t\t\tcomponentInstance.elements\n\t\t\t\t);\n\n\t\t\t\tthis.collection.models.forEach( setInactiveRecursively );\n\n\t\t\t\tsettings.component_instance = '<template data-children-placeholder></template>';\n\t\t\t}\n\n\t\t\treturn settings;\n\t\t}\n\n\t\tgetDomElement() {\n\t\t\t// Component does not have a DOM element, so we return the first child's DOM element.\n\t\t\treturn this.children.findByIndex( 0 )?.getDomElement() ?? this.$el;\n\t\t}\n\n\t\tattachBuffer( collectionView: this, buffer: DocumentFragment ): void {\n\t\t\tconst childrenPlaceholder = collectionView.$el.find( '[data-children-placeholder]' ).get( 0 );\n\n\t\t\tif ( ! childrenPlaceholder ) {\n\t\t\t\tsuper.attachBuffer( collectionView, buffer );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tchildrenPlaceholder.replaceWith( buffer );\n\t\t}\n\n\t\tgetComponentId() {\n\t\t\tconst componentInstance = (\n\t\t\t\tthis.options?.model?.get( 'settings' )?.get( 'component_instance' ) as ComponentInstanceProp\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() as number, 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 V1ElementModelProps } from '@elementor/editor-elements';\n\nimport { COMPONENT_WIDGET_TYPE } from '../create-component-type';\n\nexport function isComponentInstance( elementModel: Partial< V1ElementModelProps > ) {\n\treturn [ elementModel.widgetType, elementModel.elType ].includes( COMPONENT_WIDGET_TYPE );\n}\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nimport { type ComponentInstanceProp } from '../prop-types/component-instance-prop-type';\nimport { getComponentDocumentData } from './component-document-data';\nimport { isComponentInstance } from './is-component-instance';\n\nexport const getComponentIds = async ( elements: V1ElementData[] ): Promise< number[] > => {\n\tconst components = elements.map( async ( { widgetType, elType, elements: childElements, settings } ) => {\n\t\tconst ids: number[] = [];\n\n\t\tconst isComponent = isComponentInstance( { widgetType, elType } );\n\n\t\tif ( isComponent ) {\n\t\t\tconst componentId = ( settings?.component_instance as ComponentInstanceProp )?.value?.component_id.value;\n\n\t\t\tif ( ! componentId ) {\n\t\t\t\treturn;\n\t\t\t}\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\tconst newIds = await getComponentIds( childElements );\n\n\t\t\tids.push( ...Array.from( new Set( newIds ) ) );\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 ) ).filter( ( value ) => value !== undefined );\n};\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { selectIsOverridablePropsLoaded, slice } from '../store';\n\nexport function loadComponentsOverridableProps( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tcomponentIds.forEach( loadComponentOverrides );\n}\n\nasync function loadComponentOverrides( componentId: number ) {\n\tconst isOverridablePropsLoaded = selectIsOverridablePropsLoaded( getState(), componentId );\n\n\tif ( isOverridablePropsLoaded ) {\n\t\treturn;\n\t}\n\n\tconst overridableProps = await apiClient.getOverridableProps( componentId );\n\n\tif ( ! overridableProps ) {\n\t\treturn;\n\t}\n\n\tdispatch(\n\t\tslice.actions.setOverridableProps( {\n\t\t\tcomponentId,\n\t\t\toverridableProps,\n\t\t} )\n\t);\n}\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { type StyleDefinition } from '@elementor/editor-styles';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { type ComponentId } from '../../types';\nimport { selectStyles, slice } from '../store';\n\nexport async function loadComponentsStyles( componentIds: number[] ) {\n\tif ( ! componentIds.length ) {\n\t\treturn;\n\t}\n\n\tconst knownComponents = selectStyles( getState() );\n\tconst unknownComponentIds = componentIds.filter( ( id ) => ! knownComponents[ id ] );\n\n\tif ( ! unknownComponentIds.length ) {\n\t\treturn;\n\t}\n\n\taddComponentStyles( unknownComponentIds );\n}\n\nasync function addComponentStyles( ids: ComponentId[] ) {\n\tconst newComponents = await loadStyles( ids );\n\n\taddStyles( newComponents );\n}\n\nasync function loadStyles( ids: number[] ): Promise< [ number, V1ElementData ][] > {\n\treturn Promise.all( ids.map( async ( id ) => [ id, await apiClient.getComponentConfig( id ) ] ) );\n}\n\nfunction addStyles( data: ( readonly [ ComponentId, V1ElementData ] )[] ) {\n\tconst styles = Object.fromEntries(\n\t\tdata.map( ( [ componentId, componentData ] ) => [ componentId, extractStyles( componentData ) ] )\n\t);\n\n\tdispatch( slice.actions.addStyles( styles ) );\n}\n\nfunction extractStyles( element: V1ElementData ): Array< StyleDefinition > {\n\treturn [ ...Object.values( element.styles ?? {} ), ...( element.elements ?? [] ).flatMap( extractStyles ) ];\n}\n","import {\n\tgetContainer,\n\tgetCurrentDocumentContainer,\n\tgetSelectedElements,\n\ttype V1Element,\n} from '@elementor/editor-elements';\n\nexport const getContainerForNewElement = (): { container: V1Element | null; options?: { at: number } } => {\n\tconst currentDocumentContainer = getCurrentDocumentContainer();\n\tconst selectedElement = getSelectedElementContainer();\n\n\tlet container, options;\n\n\tif ( selectedElement ) {\n\t\tswitch ( selectedElement.model.get( 'elType' ) ) {\n\t\t\tcase 'widget': {\n\t\t\t\tcontainer = selectedElement?.parent;\n\n\t\t\t\tconst selectedElIndex = selectedElement.view?._index ?? -1;\n\n\t\t\t\tif ( selectedElIndex > -1 ) {\n\t\t\t\t\toptions = { at: selectedElIndex + 1 };\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 'section': {\n\t\t\t\tcontainer = selectedElement?.children?.[ 0 ];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tcontainer = selectedElement;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { container: container ?? currentDocumentContainer, options };\n};\n\nfunction getSelectedElementContainer() {\n\tconst selectedElements = getSelectedElements();\n\n\tif ( selectedElements.length !== 1 ) {\n\t\treturn undefined;\n\t}\n\n\treturn getContainer( selectedElements[ 0 ].id );\n}\n","import { replaceElement, type V1ElementData, type V1ElementModelProps } from '@elementor/editor-elements';\n\nimport { type OverridableProps } from '../../../types';\n\ntype ComponentInstanceParams = {\n\tid?: number;\n\tname: string;\n\tuid: string;\n\toverridableProps?: OverridableProps;\n};\n\nexport const replaceElementWithComponent = ( element: V1ElementData, component: ComponentInstanceParams ) => {\n\treplaceElement( {\n\t\tcurrentElement: element,\n\t\tnewElement: createComponentModel( component ),\n\t\twithHistory: false,\n\t} );\n};\n\nexport const createComponentModel = ( component: ComponentInstanceParams ): Omit< V1ElementModelProps, 'id' > => {\n\treturn {\n\t\telType: 'widget',\n\t\twidgetType: 'e-component',\n\t\tsettings: {\n\t\t\tcomponent_instance: {\n\t\t\t\t$$type: 'component-instance',\n\t\t\t\tvalue: {\n\t\t\t\t\tcomponent_id: {\n\t\t\t\t\t\t$$type: 'number',\n\t\t\t\t\t\tvalue: component.id ?? component.uid,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\toverridable_props: component.overridableProps,\n\t\t},\n\t\teditor_settings: {\n\t\t\ttitle: component.name,\n\t\t\tcomponent_uid: component.uid,\n\t\t},\n\t};\n};\n","import * as React from 'react';\nimport { Box, ListItemButton, Skeleton, Stack } from '@elementor/ui';\nconst ROWS_COUNT = 6;\n\nconst rows = Array.from( { length: ROWS_COUNT }, ( _, index ) => index );\n\nexport const LoadingComponents = () => {\n\treturn (\n\t\t<Stack\n\t\t\taria-label=\"Loading components\"\n\t\t\tgap={ 1 }\n\t\t\tsx={ {\n\t\t\t\tpointerEvents: 'none',\n\t\t\t\tposition: 'relative',\n\t\t\t\tmaxHeight: '300px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t'&:after': {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tcontent: '\"\"',\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: '100%',\n\t\t\t\t\theight: '300px',\n\t\t\t\t\tbackground: 'linear-gradient(to top, white, transparent)',\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t},\n\t\t\t} }\n\t\t>\n\t\t\t{ rows.map( ( row ) => (\n\t\t\t\t<ListItemButton\n\t\t\t\t\tkey={ row }\n\t\t\t\t\tsx={ { border: 'solid 1px', borderColor: 'divider', py: 0.5, px: 1 } }\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t>\n\t\t\t\t\t<Box display=\"flex\" gap={ 1 } width=\"100%\">\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '24px' } height={ '36px' } />\n\t\t\t\t\t\t<Skeleton variant=\"text\" width={ '100%' } height={ '36px' } />\n\t\t\t\t\t</Box>\n\t\t\t\t</ListItemButton>\n\t\t\t) ) }\n\t\t</Stack>\n\t);\n};\n","export const COMPONENT_DOCUMENT_TYPE = 'elementor_component';\n","import * as React from 'react';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport { getElementLabel, type V1ElementData } from '@elementor/editor-elements';\nimport { Form as FormElement, ThemeProvider } from '@elementor/editor-ui';\nimport { StarIcon } from '@elementor/icons';\nimport { Alert, Button, FormLabel, Grid, Popover, Snackbar, Stack, TextField, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponents } from '../../hooks/use-components';\nimport { createUnpublishedComponent } from '../../store/actions/create-unpublished-component';\nimport { type ComponentFormValues } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { useForm } from './hooks/use-form';\nimport { createBaseComponentSchema, createSubmitComponentSchema } from './utils/component-form-schema';\nimport {\n\ttype ComponentEventData,\n\ttype ContextMenuEventOptions,\n\tgetComponentEventData,\n} from './utils/get-component-event-data';\n\ntype SaveAsComponentEventData = {\n\telement: V1ElementData;\n\tanchorPosition: { top: number; left: number };\n\toptions?: ContextMenuEventOptions;\n};\n\ntype ResultNotification = {\n\tshow: boolean;\n\tmessage: string;\n\ttype: 'success' | 'error';\n};\n\nexport function CreateComponentForm() {\n\tconst [ element, setElement ] = useState< {\n\t\telement: V1ElementData;\n\t\telementLabel: string;\n\t} | null >( null );\n\n\tconst [ anchorPosition, setAnchorPosition ] = useState< { top: number; left: number } >();\n\n\tconst [ resultNotification, setResultNotification ] = useState< ResultNotification | null >( null );\n\n\tconst eventData = useRef< ComponentEventData | null >( null );\n\n\tuseEffect( () => {\n\t\tconst OPEN_SAVE_AS_COMPONENT_FORM_EVENT = 'elementor/editor/open-save-as-component-form';\n\n\t\tconst openPopup = ( event: CustomEvent< SaveAsComponentEventData > ) => {\n\t\t\tsetElement( { element: event.detail.element, elementLabel: getElementLabel( event.detail.element.id ) } );\n\t\t\tsetAnchorPosition( event.detail.anchorPosition );\n\n\t\t\teventData.current = getComponentEventData( event.detail.element, event.detail.options );\n\t\t\ttrackComponentEvent( {\n\t\t\t\taction: 'createClicked',\n\t\t\t\t...eventData.current,\n\t\t\t} );\n\t\t};\n\n\t\twindow.addEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup as EventListener );\n\t\t};\n\t}, [] );\n\n\tconst handleSave = ( values: ComponentFormValues ) => {\n\t\ttry {\n\t\t\tif ( ! element ) {\n\t\t\t\tthrow new Error( `Can't save element as component: element not found` );\n\t\t\t}\n\n\t\t\tconst uid = createUnpublishedComponent( values.componentName, element.element, eventData.current );\n\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\t// Translators: %1$s: Component name, %2$s: Component UID\n\t\t\t\tmessage: __( 'Component saved successfully as: %1$s (UID: %2$s)', 'elementor' )\n\t\t\t\t\t.replace( '%1$s', values.componentName )\n\t\t\t\t\t.replace( '%2$s', uid ),\n\t\t\t\ttype: 'success',\n\t\t\t} );\n\n\t\t\tresetAndClosePopup();\n\t\t} catch {\n\t\t\tconst errorMessage = __( 'Failed to save component. Please try again.', 'elementor' );\n\t\t\tsetResultNotification( {\n\t\t\t\tshow: true,\n\t\t\t\tmessage: errorMessage,\n\t\t\t\ttype: 'error',\n\t\t\t} );\n\t\t}\n\t};\n\n\tconst resetAndClosePopup = () => {\n\t\tsetElement( null );\n\t\tsetAnchorPosition( undefined );\n\t};\n\n\tconst cancelSave = () => {\n\t\tresetAndClosePopup();\n\n\t\ttrackComponentEvent( {\n\t\t\taction: 'createCancelled',\n\t\t\t...eventData.current,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Popover\n\t\t\t\topen={ element !== null }\n\t\t\t\tonClose={ cancelSave }\n\t\t\t\tanchorReference=\"anchorPosition\"\n\t\t\t\tanchorPosition={ anchorPosition }\n\t\t\t>\n\t\t\t\t{ element !== null && (\n\t\t\t\t\t<Form\n\t\t\t\t\t\tinitialValues={ { componentName: element.elementLabel } }\n\t\t\t\t\t\thandleSave={ handleSave }\n\t\t\t\t\t\tclosePopup={ cancelSave }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</Popover>\n\t\t\t<Snackbar open={ resultNotification?.show } onClose={ () => setResultNotification( null ) }>\n\t\t\t\t<Alert\n\t\t\t\t\tonClose={ () => setResultNotification( null ) }\n\t\t\t\t\tseverity={ resultNotification?.type }\n\t\t\t\t\tsx={ { width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t{ resultNotification?.message }\n\t\t\t\t</Alert>\n\t\t\t</Snackbar>\n\t\t</ThemeProvider>\n\t);\n}\n\nconst FONT_SIZE = 'tiny';\n\nconst Form = ( {\n\tinitialValues,\n\thandleSave,\n\tclosePopup,\n}: {\n\tinitialValues: ComponentFormValues;\n\thandleSave: ( values: ComponentFormValues ) => void;\n\tclosePopup: () => void;\n} ) => {\n\tconst { values, errors, isValid, handleChange, validateForm } = useForm< ComponentFormValues >( initialValues );\n\n\tconst { components } = useComponents();\n\n\tconst existingComponentNames = useMemo( () => {\n\t\treturn components?.map( ( component ) => component.name ) ?? [];\n\t}, [ components ] );\n\n\tconst changeValidationSchema = useMemo(\n\t\t() => createBaseComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\tconst submitValidationSchema = useMemo(\n\t\t() => createSubmitComponentSchema( existingComponentNames ),\n\t\t[ existingComponentNames ]\n\t);\n\n\tconst handleSubmit = () => {\n\t\tconst { success, parsedValues } = validateForm( submitValidationSchema );\n\n\t\tif ( success ) {\n\t\t\thandleSave( parsedValues );\n\t\t}\n\t};\n\n\tconst texts = {\n\t\theading: __( 'Save as a component', 'elementor' ),\n\t\tname: __( 'Name', 'elementor' ),\n\t\tcancel: __( 'Cancel', 'elementor' ),\n\t\tcreate: __( 'Create', 'elementor' ),\n\t};\n\n\tconst nameInputId = 'component-name';\n\n\treturn (\n\t\t<FormElement onSubmit={ handleSubmit }>\n\t\t\t<Stack alignItems=\"start\" width=\"268px\">\n\t\t\t\t<Stack\n\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\tpy={ 1 }\n\t\t\t\t\tpx={ 1.5 }\n\t\t\t\t\tsx={ { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }\n\t\t\t\t>\n\t\t\t\t\t<StarIcon fontSize={ FONT_SIZE } />\n\t\t\t\t\t<Typography variant=\"caption\" sx={ { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }>\n\t\t\t\t\t\t{ texts.heading }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Stack>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"start\" p={ 1.5 }>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel htmlFor={ nameInputId } size=\"tiny\">\n\t\t\t\t\t\t\t{ texts.name }\n\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tid={ nameInputId }\n\t\t\t\t\t\t\tsize={ FONT_SIZE }\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ values.componentName }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\t\thandleChange( e, 'componentName', changeValidationSchema )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinputProps={ { style: { color: 'text.primary', fontWeight: '600' } } }\n\t\t\t\t\t\t\terror={ Boolean( errors.componentName ) }\n\t\t\t\t\t\t\thelperText={ errors.componentName }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Stack direction=\"row\" justifyContent=\"flex-end\" alignSelf=\"end\" py={ 1 } px={ 1.5 }>\n\t\t\t\t\t<Button onClick={ closePopup } color=\"secondary\" variant=\"text\" size=\"small\">\n\t\t\t\t\t\t{ texts.cancel }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button type=\"submit\" disabled={ ! isValid } variant=\"contained\" color=\"primary\" size=\"small\">\n\t\t\t\t\t\t{ texts.create }\n\t\t\t\t\t</Button>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</FormElement>\n\t);\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\nimport { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { __dispatch as dispatch } from '@elementor/store';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { type ComponentEventData } from '../../components/create-component-form/utils/get-component-event-data';\nimport { replaceElementWithComponent } from '../../components/create-component-form/utils/replace-element-with-component';\nimport { type OverridableProps } from '../../types';\nimport { trackComponentEvent } from '../../utils/tracking';\nimport { slice } from '../store';\n\nexport function createUnpublishedComponent(\n\tname: string,\n\telement: V1ElementData,\n\teventData: ComponentEventData | null,\n\toverridableProps?: OverridableProps,\n\tuid?: string | null\n) {\n\tconst generatedUid = uid ?? generateUniqueId( 'component' );\n\tconst componentBase = { uid: generatedUid, name, overridableProps };\n\n\tdispatch(\n\t\tslice.actions.addUnpublished( {\n\t\t\t...componentBase,\n\t\t\telements: [ element ],\n\t\t} )\n\t);\n\n\tdispatch( slice.actions.addCreatedThisSession( generatedUid ) );\n\n\treplaceElementWithComponent( element, componentBase );\n\n\ttrackComponentEvent( {\n\t\taction: 'created',\n\t\tcomponent_uid: generatedUid,\n\t\tcomponent_name: name,\n\t\t...eventData,\n\t} );\n\n\trunCommand( 'document/save/auto' );\n\n\treturn generatedUid;\n}\n","import { useMemo, useState } from 'react';\nimport { type z } from '@elementor/schema';\n\nexport const useForm = < TValues extends Record< string, unknown > >( initialValues: TValues ) => {\n\tconst [ values, setValues ] = useState< TValues >( initialValues );\n\tconst [ errors, setErrors ] = useState< Partial< Record< keyof TValues, string > > >( {} );\n\n\tconst isValid = useMemo( () => {\n\t\treturn ! Object.values( errors ).some( ( error ) => error );\n\t}, [ errors ] );\n\n\tconst handleChange = (\n\t\te: React.ChangeEvent< HTMLInputElement >,\n\t\tfield: keyof TValues,\n\t\tvalidationSchema: z.ZodType< TValues >\n\t) => {\n\t\tconst updated = { ...values, [ field ]: e.target.value };\n\t\tsetValues( updated );\n\n\t\tconst { success, errors: validationErrors } = validateForm( updated, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t} else {\n\t\t\tsetErrors( {} );\n\t\t}\n\t};\n\n\tconst validate = (\n\t\tvalidationSchema: z.ZodType< TValues >\n\t): { success: true; parsedValues: TValues } | { success: false; parsedValues?: never } => {\n\t\tconst { success, errors: validationErrors, parsedValues } = validateForm( values, validationSchema );\n\n\t\tif ( ! success ) {\n\t\t\tsetErrors( validationErrors );\n\t\t\treturn { success };\n\t\t}\n\t\tsetErrors( {} );\n\t\treturn { success, parsedValues };\n\t};\n\n\treturn {\n\t\tvalues,\n\t\terrors,\n\t\tisValid,\n\t\thandleChange,\n\t\tvalidateForm: validate,\n\t};\n};\n\nconst validateForm = < TValues extends Record< string, unknown > >(\n\tvalues: TValues,\n\tschema: z.ZodType< TValues >\n):\n\t| { success: false; parsedValues?: never; errors: Partial< Record< keyof TValues, string > > }\n\t| { success: true; parsedValues: TValues; errors?: never } => {\n\tconst result = schema.safeParse( values );\n\n\tif ( result.success ) {\n\t\treturn { success: true, parsedValues: result.data };\n\t}\n\n\tconst errors = {} as Partial< Record< keyof TValues, string > >;\n\n\t( Object.entries( result.error.formErrors.fieldErrors ) as Array< [ keyof TValues, string[] ] > ).forEach(\n\t\t( [ field, error ] ) => {\n\t\t\terrors[ field ] = error[ 0 ];\n\t\t}\n\t);\n\n\treturn { success: false, errors };\n};\n","import { z } from '@elementor/schema';\nimport { __ } from '@wordpress/i18n';\n\nconst MIN_NAME_LENGTH = 2;\nconst MAX_NAME_LENGTH = 50;\n\nexport const createBaseComponentSchema = ( existingNames: string[] ) => {\n\treturn z.object( {\n\t\tcomponentName: z\n\t\t\t.string()\n\t\t\t.trim()\n\t\t\t.max(\n\t\t\t\tMAX_NAME_LENGTH,\n\t\t\t\t__( 'Component name is too long. Please keep it under 50 characters.', 'elementor' )\n\t\t\t)\n\t\t\t.refine( ( value ) => ! existingNames.includes( value ), {\n\t\t\t\tmessage: __( 'Component name already exists', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n\nexport const createSubmitComponentSchema = ( existingNames: string[] ) => {\n\tconst baseSchema = createBaseComponentSchema( existingNames );\n\n\treturn baseSchema.extend( {\n\t\tcomponentName: baseSchema.shape.componentName\n\t\t\t.refine( ( value ) => value.length > 0, {\n\t\t\t\tmessage: __( 'Component name is required.', 'elementor' ),\n\t\t\t} )\n\t\t\t.refine( ( value ) => value.length >= MIN_NAME_LENGTH, {\n\t\t\t\tmessage: __( 'Component name is too short. Please enter at least 2 characters.', 'elementor' ),\n\t\t\t} ),\n\t} );\n};\n","import { type V1ElementData } from '@elementor/editor-elements';\n\nexport type ComponentEventData = {\n\tnested_elements_count: number;\n\tnested_components_count: number;\n\ttop_element_type: string;\n\tlocation?: string;\n\tsecondary_location?: string;\n\ttrigger?: string;\n};\n\nexport type ContextMenuEventOptions = Record< string, unknown > & {\n\tlocation: string;\n\tsecondaryLocation: string;\n\ttrigger: string;\n};\n\nexport const getComponentEventData = (\n\tcontainerElement: V1ElementData,\n\toptions?: ContextMenuEventOptions\n): ComponentEventData => {\n\tconst { elementsCount, componentsCount } = countNestedElements( containerElement );\n\n\treturn {\n\t\tnested_elements_count: elementsCount,\n\t\tnested_components_count: componentsCount,\n\t\ttop_element_type: containerElement.elType,\n\t\tlocation: options?.location,\n\t\tsecondary_location: options?.secondaryLocation,\n\t\ttrigger: options?.trigger,\n\t};\n};\n\nfunction countNestedElements( container: V1ElementData ): { elementsCount: number; componentsCount: number } {\n\tif ( ! container.elements || container.elements.length === 0 ) {\n\t\treturn { elementsCount: 0, componentsCount: 0 };\n\t}\n\n\tlet elementsCount = container.elements.length;\n\tlet componentsCount = 0;\n\n\tfor ( const element of container.elements ) {\n\t\tif ( element.widgetType === 'e-component' ) {\n\t\t\tcomponentsCount++;\n\t\t}\n\n\t\tconst { elementsCount: nestedElementsCount, componentsCount: nestedComponentsCount } =\n\t\t\tcountNestedElements( element );\n\t\telementsCount += nestedElementsCount;\n\t\tcomponentsCount += nestedComponentsCount;\n\t}\n\n\treturn { elementsCount, componentsCount };\n}\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { getV1DocumentsManager, type V1Document } from '@elementor/editor-documents';\nimport { type V1Element } from '@elementor/editor-elements';\nimport { __privateListenTo as listenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { __useSelector as useSelector } from '@elementor/store';\nimport { throttle } from '@elementor/utils';\n\nimport { apiClient } from '../../api';\nimport { useNavigateBack } from '../../hooks/use-navigate-back';\nimport { updateCurrentComponent } from '../../store/actions/update-current-component';\nimport { type ComponentsPathItem, selectPath, useCurrentComponentId } from '../../store/store';\nimport { COMPONENT_DOCUMENT_TYPE } from '../consts';\nimport { ComponentModal } from './component-modal';\n\nexport function EditComponent() {\n\tconst currentComponentId = useCurrentComponentId();\n\n\tuseHandleDocumentSwitches();\n\n\tconst navigateBack = useNavigateBack();\n\n\tconst onClose = throttle( navigateBack, 100 );\n\n\tconst elementDom = getComponentDOMElement( currentComponentId ?? undefined );\n\n\tif ( ! elementDom ) {\n\t\treturn null;\n\t}\n\n\treturn <ComponentModal element={ elementDom } onClose={ onClose } />;\n}\n\nfunction useHandleDocumentSwitches() {\n\tconst documentsManager = getV1DocumentsManager();\n\tconst currentComponentId = useCurrentComponentId();\n\tconst path = useSelector( selectPath );\n\n\tuseEffect( () => {\n\t\treturn listenTo( commandEndEvent( 'editor/documents/open' ), () => {\n\t\t\tconst nextDocument = documentsManager.getCurrent();\n\n\t\t\tif ( nextDocument.id === currentComponentId ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( currentComponentId ) {\n\t\t\t\tapiClient.unlockComponent( currentComponentId );\n\t\t\t}\n\n\t\t\tconst isComponent = nextDocument.config.type === COMPONENT_DOCUMENT_TYPE;\n\n\t\t\tif ( ! isComponent ) {\n\t\t\t\tupdateCurrentComponent( { path: [], currentComponentId: null } );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdateCurrentComponent( {\n\t\t\t\tpath: getUpdatedComponentPath( path, nextDocument ),\n\t\t\t\tcurrentComponentId: nextDocument.id,\n\t\t\t} );\n\t\t} );\n\t}, [ path, documentsManager, currentComponentId ] );\n}\n\nfunction getUpdatedComponentPath( path: ComponentsPathItem[], nextDocument: V1Document ): ComponentsPathItem[] {\n\tconst componentIndex = path.findIndex( ( { componentId } ) => componentId === nextDocument.id );\n\n\tif ( componentIndex >= 0 ) {\n\t\t// When exiting the editing of a nested component - we in fact go back a step\n\t\t// so we need to make sure the path is cleaned up of any newer items\n\t\t// By doing it with the slice and not a simple pop() - we could jump to any component in the path and make sure it becomes the current one\n\t\treturn path.slice( 0, componentIndex + 1 );\n\t}\n\n\treturn [\n\t\t...path,\n\t\t{\n\t\t\tinstanceId: nextDocument?.container.view?.el?.dataset.id,\n\t\t\tcomponentId: nextDocument.id,\n\t\t},\n\t];\n}\n\nfunction getComponentDOMElement( id: V1Document[ 'id' ] | undefined ) {\n\tif ( ! id ) {\n\t\treturn null;\n\t}\n\n\tconst documentsManager = getV1DocumentsManager();\n\n\tconst currentComponent = documentsManager.get( id );\n\n\tconst widget = currentComponent?.container as V1Element;\n\tconst container = ( widget?.view?.el?.children?.[ 0 ] ?? null ) as HTMLElement | null;\n\tconst elementDom = container?.children[ 0 ] as HTMLElement | null;\n\n\treturn elementDom ?? null;\n}\n","import { setDocumentModifiedStatus, type V1Document } from '@elementor/editor-documents';\nimport { __getStore as getStore } from '@elementor/store';\n\nimport { type ComponentsPathItem, slice } from '../store';\n\nexport function updateCurrentComponent( {\n\tpath,\n\tcurrentComponentId,\n}: {\n\tpath: ComponentsPathItem[];\n\tcurrentComponentId: V1Document[ 'id' ] | null;\n} ) {\n\tconst dispatch = getStore()?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.setPath( path ) );\n\tdispatch( slice.actions.setCurrentComponentId( currentComponentId ) );\n}\n\nexport const archiveComponent = ( componentId: number ) => {\n\tconst store = getStore();\n\tconst dispatch = store?.dispatch;\n\n\tif ( ! dispatch ) {\n\t\treturn;\n\t}\n\n\tdispatch( slice.actions.archive( componentId ) );\n\tsetDocumentModifiedStatus( true );\n};\n","import * as React from 'react';\nimport { type CSSProperties, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { __ } from '@wordpress/i18n';\n\nimport { useCanvasDocument } from '../../hooks/use-canvas-document';\nimport { useElementRect } from '../../hooks/use-element-rect';\n\ntype ModalProps = {\n\telement: HTMLElement;\n\tonClose: () => void;\n};\n\nexport function ComponentModal( { element, onClose }: ModalProps ) {\n\tconst canvasDocument = useCanvasDocument();\n\n\tuseEffect( () => {\n\t\tconst handleEsc = ( event: KeyboardEvent ) => {\n\t\t\tif ( event.key === 'Escape' ) {\n\t\t\t\tonClose();\n\t\t\t}\n\t\t};\n\n\t\tcanvasDocument?.body.addEventListener( 'keydown', handleEsc );\n\n\t\treturn () => {\n\t\t\tcanvasDocument?.body.removeEventListener( 'keydown', handleEsc );\n\t\t};\n\t}, [ canvasDocument, onClose ] );\n\n\tif ( ! canvasDocument?.body ) {\n\t\treturn null;\n\t}\n\n\treturn createPortal(\n\t\t<>\n\t\t\t<BlockEditPage />\n\t\t\t<Backdrop canvas={ canvasDocument } element={ element } onClose={ onClose } />\n\t\t</>,\n\t\tcanvasDocument.body\n\t);\n}\n\nfunction Backdrop( { canvas, element, onClose }: { canvas: HTMLDocument; element: HTMLElement; onClose: () => void } ) {\n\tconst rect = useElementRect( element );\n\tconst backdropStyle: CSSProperties = {\n\t\tposition: 'fixed',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\twidth: '100vw',\n\t\theight: '100vh',\n\t\tbackgroundColor: 'rgba(0, 0, 0, 0.5)',\n\t\tzIndex: 999,\n\t\tpointerEvents: 'painted',\n\t\tcursor: 'pointer',\n\t\tclipPath: getRoundedRectPath( rect, canvas.defaultView as Window, 5 ),\n\t};\n\n\tconst handleKeyDown = ( event: React.KeyboardEvent ) => {\n\t\tif ( event.key === 'Enter' || event.key === ' ' ) {\n\t\t\tevent.preventDefault();\n\t\t\tonClose();\n\t\t}\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tstyle={ backdropStyle }\n\t\t\tonClick={ onClose }\n\t\t\tonKeyDown={ handleKeyDown }\n\t\t\trole=\"button\"\n\t\t\ttabIndex={ 0 }\n\t\t\taria-label={ __( 'Exit component editing mode', 'elementor' ) }\n\t\t/>\n\t);\n}\n\nfunction getRoundedRectPath( rect: DOMRect, viewport: Window, borderRadius: number ) {\n\tconst padding = borderRadius / 2;\n\tconst { x: originalX, y: originalY, width: originalWidth, height: originalHeight } = rect;\n\tconst x = originalX - padding;\n\tconst y = originalY - padding;\n\tconst width = originalWidth + 2 * padding;\n\tconst height = originalHeight + 2 * padding;\n\tconst radius = Math.min( borderRadius, width / 2, height / 2 );\n\n\tconst { innerWidth: vw, innerHeight: vh } = viewport;\n\n\tconst path = `path(evenodd, 'M 0 0 \n\t\tL ${ vw } 0\n\t\tL ${ vw } ${ vh }\n\t\tL 0 ${ vh }\n\t\tZ\n\t\tM ${ x + radius } ${ y }\n\t\tL ${ x + width - radius } ${ y }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width } ${ y + radius }\n\t\tL ${ x + width } ${ y + height - radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + width - radius } ${ y + height }\n\t\tL ${ x + radius } ${ y + height }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x } ${ y + height - radius }\n\t\tL ${ x } ${ y + radius }\n\t\tA ${ radius } ${ radius } 0 0 1 ${ x + radius } ${ y }\n \tZ'\n\t)`;\n\n\treturn path.replace( /\\s{2,}/g, ' ' );\n}\n\n/**\n * when switching to another document id, we get a document handler when hovering\n * this functionality originates in Pro, and is intended for editing templates, e.g. header/footer\n * in components we don't want that, so the easy way out is to prevent it of being displayed via a CSS rule\n */\nfunction BlockEditPage() {\n\tconst blockV3DocumentHandlesStyles = `\n\t.elementor-editor-active {\n\t\t& .elementor-section-wrap.ui-sortable {\n\t\t\tdisplay: contents;\n\t\t}\n\n\t\t& *[data-editable-elementor-document]:not(.elementor-edit-mode):hover {\n\t\t\t& .elementor-document-handle:not(.elementor-document-save-back-handle) {\n\t\t\t\tdisplay: none;\n\n\t\t\t\t&::before,\n\t\t\t\t& .elementor-document-handle__inner {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t`;\n\n\treturn <style data-e-style-id=\"e-block-v3-document-handles-styles\">{ blockV3DocumentHandlesStyles }</style>;\n}\n","import { getCanvasIframeDocument } from '@elementor/editor-canvas';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\n\nexport function useCanvasDocument() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument() );\n}\n","import { useEffect, useState } from 'react';\nimport { throttle } from '@elementor/utils';\n\nexport function useElementRect( element: HTMLElement | null ) {\n\tconst [ rect, setRect ] = useState< DOMRect >( new DOMRect( 0, 0, 0, 0 ) );\n\n\tconst onChange = throttle(\n\t\t() => {\n\t\t\tsetRect( element?.getBoundingClientRect() ?? new DOMRect( 0, 0, 0, 0 ) );\n\t\t},\n\t\t20,\n\t\ttrue\n\t);\n\n\tuseScrollListener( { element, onChange } );\n\tuseResizeListener( { element, onChange } );\n\tuseMutationsListener( { element, onChange } );\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tonChange.cancel();\n\t\t},\n\t\t[ onChange ]\n\t);\n\n\treturn rect;\n}\n\ntype ListenerProps = {\n\telement: HTMLElement | null;\n\tonChange: () => void;\n};\n\nfunction useScrollListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'scroll', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\twin?.removeEventListener( 'scroll', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useResizeListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst resizeObserver = new ResizeObserver( onChange );\n\t\tresizeObserver.observe( element );\n\n\t\tconst win = element.ownerDocument?.defaultView;\n\t\twin?.addEventListener( 'resize', onChange, { passive: true } );\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t\twin?.removeEventListener( 'resize', onChange );\n\t\t};\n\t}, [ element, onChange ] );\n}\n\nfunction useMutationsListener( { element, onChange }: ListenerProps ) {\n\tuseEffect( () => {\n\t\tif ( ! element ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst mutationObserver = new MutationObserver( onChange );\n\t\tmutationObserver.observe( element, { childList: true, subtree: true } );\n\n\t\treturn () => {\n\t\t\tmutationObserver.disconnect();\n\t\t};\n\t}, [ element, onChange ] );\n}\n","import * as React from 'react';\nimport { closeDialog, openDialog } from '@elementor/editor-ui';\nimport { InfoCircleFilledIcon } from '@elementor/icons';\nimport { Box, Button, DialogActions, DialogContent, DialogHeader, Icon, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const openEditModeDialog = ( lockedBy: string ) => {\n\topenDialog( {\n\t\tcomponent: <EditModeDialog lockedBy={ lockedBy } />,\n\t} );\n};\n\nconst EditModeDialog = ( { lockedBy }: { lockedBy: string } ) => {\n\t/* translators: %s is the name of the user who is currently editing the document */\n\tconst content = __( '%s is currently editing this document', 'elementor' ).replace( '%s', lockedBy );\n\treturn (\n\t\t<>\n\t\t\t<DialogHeader logo={ false }>\n\t\t\t\t<Box display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t\t<Icon color=\"secondary\">\n\t\t\t\t\t\t<InfoCircleFilledIcon fontSize=\"medium\" />\n\t\t\t\t\t</Icon>\n\t\t\t\t\t<Typography variant=\"subtitle1\">{ content }</Typography>\n\t\t\t\t</Box>\n\t\t\t</DialogHeader>\n\t\t\t<DialogContent>\n\t\t\t\t<Stack spacing={ 2 } direction=\"column\">\n\t\t\t\t\t<Typography variant=\"body2\">\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t'You can wait for them to finish or reach out to coordinate your changes together.',\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t<DialogActions>\n\t\t\t\t\t\t<Button color=\"secondary\" variant=\"contained\" onClick={ closeDialog }>\n\t\t\t\t\t\t\t{ __( 'Close', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</DialogActions>\n\t\t\t\t</Stack>\n\t\t\t</DialogContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { ControlAdornmentsProvider } from '@elementor/editor-controls';\nimport { getFieldIndicators } from '@elementor/editor-editing-panel';\nimport { useSelectedElement } from '@elementor/editor-elements';\nimport { PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { ComponentsIcon, PencilIcon } from '@elementor/icons';\nimport { IconButton, Stack, Tooltip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useComponentInstanceSettings } from '../../hooks/use-component-instance-settings';\nimport { useComponent, useOverridableProps } 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 settings = useComponentInstanceSettings();\n\tconst componentId = settings?.component_id?.value;\n\n\tconst overrides = settings?.overrides?.value;\n\n\tconst component = useComponent( componentId ?? null );\n\tconst overridableProps = useOverridableProps( componentId ?? null );\n\n\tconst componentInstanceId = useSelectedElement()?.element?.id ?? null;\n\n\tif ( ! componentId || ! overridableProps || ! component ) {\n\t\treturn null;\n\t}\n\n\t/* translators: %s: component name. */\n\tconst panelTitle = __( 'Edit %s', 'elementor' ).replace( '%s', component.name );\n\n\tconst handleEditComponent = () => switchToComponent( componentId, componentInstanceId );\n\n\tconst groups = overridableProps.groups.order\n\t\t.map( ( groupId ) =>\n\t\t\toverridableProps.groups.items[ groupId ] ? overridableProps.groups.items[ groupId ] : null\n\t\t)\n\t\t.filter( Boolean ) as OverridablePropsGroup[];\n\n\tconst isEmpty = groups.length === 0 || Object.keys( overridableProps.props ).length === 0;\n\n\treturn (\n\t\t<>\n\t\t\t<PanelHeader sx={ { justifyContent: 'start', px: 2 } }>\n\t\t\t\t<Stack direction=\"row\" alignContent=\"space-between\" flexGrow={ 1 }>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" justifyContent=\"start\" gap={ 1 } flexGrow={ 1 }>\n\t\t\t\t\t\t<ComponentsIcon fontSize=\"small\" sx={ { color: 'text.tertiary' } } />\n\t\t\t\t\t\t<PanelHeaderTitle>{ component.name }</PanelHeaderTitle>\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Tooltip title={ panelTitle }>\n\t\t\t\t\t\t<IconButton size=\"tiny\" onClick={ handleEditComponent } aria-label={ panelTitle }>\n\t\t\t\t\t\t\t<PencilIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t</Stack>\n\t\t\t</PanelHeader>\n\t\t\t<PanelBody>\n\t\t\t\t<ControlAdornmentsProvider items={ getFieldIndicators( 'settings' ) }>\n\t\t\t\t\t{ isEmpty ? (\n\t\t\t\t\t\t<EmptyState onEditComponent={ handleEditComponent } />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<Stack direction=\"column\" alignItems=\"stretch\">\n\t\t\t\t\t\t\t{ groups.map( ( group ) => (\n\t\t\t\t\t\t\t\t<OverridePropsGroup\n\t\t\t\t\t\t\t\t\tkey={ group.id }\n\t\t\t\t\t\t\t\t\tgroup={ group }\n\t\t\t\t\t\t\t\t\tprops={ overridableProps.props }\n\t\t\t\t\t\t\t\t\toverrides={ overrides }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t) }\n\t\t\t\t</ControlAdornmentsProvider>\n\t\t\t</PanelBody>\n\t\t</>\n\t);\n}\n","import { useElement } from '@elementor/editor-editing-panel';\nimport { useElementSetting } from '@elementor/editor-elements';\n\nimport {\n\tcomponentInstancePropTypeUtil,\n\ttype ComponentInstancePropValue,\n} from '../prop-types/component-instance-prop-type';\n\nexport function useComponentInstanceSettings() {\n\tconst { element } = useElement();\n\n\tconst settings = useElementSetting< ComponentInstancePropValue >( element.id, 'component_instance' );\n\n\treturn componentInstancePropTypeUtil.extract( settings );\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 ComponentInstanceProp = z.infer< typeof componentInstancePropTypeUtil.schema >;\nexport type ComponentInstancePropValue = ComponentInstanceProp[ 'value' ];\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nimport { componentInstanceOverridePropTypeUtil } from './component-instance-override-prop-type';\nimport { componentOverridablePropTypeUtil } from './component-overridable-prop-type';\n\nexport const componentInstanceOverridesPropTypeUtil = createPropUtils(\n\t'overrides',\n\tz\n\t\t.array( z.union( [ componentInstanceOverridePropTypeUtil.schema, componentOverridablePropTypeUtil.schema ] ) )\n\t\t.optional()\n\t\t.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 ComponentInstanceOverrideProp = z.infer< typeof componentInstanceOverridePropTypeUtil.schema >;\nexport type ComponentInstanceOverridePropValue = ComponentInstanceOverrideProp[ 'value' ];\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 { 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 { Box, Collapse, ListItemButton, ListItemText, Stack } from '@elementor/ui';\n\nimport { type ComponentInstanceOverridesPropValue } from '../../prop-types/component-instance-overrides-prop-type';\nimport { type OverridableProp, type OverridablePropsGroup } from '../../types';\nimport { OverridePropControl } from './override-prop-control';\n\ntype Props = {\n\tgroup: OverridablePropsGroup;\n\tprops: Record< string, OverridableProp >;\n\toverrides: ComponentInstanceOverridesPropValue;\n};\n\nexport function OverridePropsGroup( { group, props, overrides }: 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<Box aria-label={ `${ title } section` }>\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( ( overrideKey ) => (\n\t\t\t\t\t\t<OverridePropControl\n\t\t\t\t\t\t\tkey={ overrideKey }\n\t\t\t\t\t\t\toverridableProp={ props[ overrideKey ] }\n\t\t\t\t\t\t\toverrides={ overrides }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) ) }\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</Box>\n\t);\n}\n","import * as React from 'react';\nimport { PropKeyProvider, PropProvider, useBoundProp } from '@elementor/editor-controls';\nimport {\n\tcontrolsRegistry,\n\ttype ControlType,\n\tcreateTopLevelObjectType,\n\tSettingsField,\n} from '@elementor/editor-editing-panel';\nimport { type Control } from '@elementor/editor-elements';\nimport { type PropValue, type TransformablePropValue } from '@elementor/editor-props';\nimport { Stack } from '@elementor/ui';\n\nimport { useControlsByWidgetType } from '../../hooks/use-controls-by-widget-type';\nimport {\n\ttype ComponentInstanceOverrideProp,\n\tcomponentInstanceOverridePropTypeUtil,\n} from '../../prop-types/component-instance-override-prop-type';\nimport {\n\tcomponentInstanceOverridesPropTypeUtil,\n\ttype ComponentInstanceOverridesPropValue,\n} from '../../prop-types/component-instance-overrides-prop-type';\nimport { componentInstancePropTypeUtil } from '../../prop-types/component-instance-prop-type';\nimport {\n\tcomponentOverridablePropTypeUtil,\n\ttype ComponentOverridablePropValue,\n} from '../../prop-types/component-overridable-prop-type';\nimport { updateOverridableProp } from '../../store/actions/update-overridable-prop';\nimport { useCurrentComponentId } from '../../store/store';\nimport { type OriginPropFields, type OverridableProp } from '../../types';\nimport { getPropTypeForComponentOverride } from '../../utils/get-prop-type-for-component-override';\nimport { ControlLabel } from '../control-label';\n\ntype Props = {\n\toverridableProp: OverridableProp;\n\toverrides?: ComponentInstanceOverridesPropValue;\n};\n\ntype OverridesSchema = Record< string, NonNullable< ComponentInstanceOverridesPropValue >[ number ] >;\n\nexport function OverridePropControl( { overridableProp, overrides }: Props ) {\n\treturn (\n\t\t<SettingsField bind=\"component_instance\" propDisplayName={ overridableProp.label }>\n\t\t\t<OverrideControl overridableProp={ overridableProp } overrides={ overrides } />\n\t\t</SettingsField>\n\t);\n}\n\nfunction OverrideControl( { overridableProp, overrides }: Props ) {\n\tconst componentId = useCurrentComponentId();\n\tconst { value: instanceValue, setValue: setInstanceValue } = useBoundProp( componentInstancePropTypeUtil );\n\tconst controls = useControlsByWidgetType(\n\t\toverridableProp?.originPropFields?.widgetType ?? overridableProp.widgetType\n\t);\n\n\tconst propType = getPropTypeForComponentOverride( overridableProp );\n\n\tif ( ! propType ) {\n\t\treturn null;\n\t}\n\n\tconst propTypeSchema = createTopLevelObjectType( {\n\t\tschema: {\n\t\t\t[ overridableProp.overrideKey ]: propType,\n\t\t},\n\t} );\n\n\tconst componentInstanceId = instanceValue.component_id?.value;\n\n\tif ( ! componentInstanceId ) {\n\t\tthrow new Error( 'Component ID is required' );\n\t}\n\n\tconst matchingOverride = getMatchingOverride( overrides, overridableProp.overrideKey );\n\n\tconst propValue = matchingOverride ? getPropValue( matchingOverride ) : overridableProp.originValue;\n\n\tconst value = {\n\t\t[ overridableProp.overrideKey ]: propValue,\n\t} as OverridesSchema;\n\n\tconst setValue = ( newValue: OverridesSchema ) => {\n\t\tconst newPropValue = newValue[ overridableProp.overrideKey ] as\n\t\t\t| ComponentInstanceOverrideProp\n\t\t\t| ComponentOverridablePropValue;\n\n\t\tconst newOverrideValue = createOverrideValue( overridableProp.overrideKey, newPropValue, componentInstanceId );\n\n\t\tlet newOverrides =\n\t\t\toverrides?.map( ( override ) => ( override === matchingOverride ? newOverrideValue : override ) ) ?? [];\n\n\t\tif ( ! matchingOverride ) {\n\t\t\tnewOverrides = [ ...newOverrides, newOverrideValue ];\n\t\t}\n\n\t\tsetInstanceValue( {\n\t\t\t...instanceValue,\n\t\t\toverrides: componentInstanceOverridesPropTypeUtil.create( newOverrides ),\n\t\t} );\n\n\t\tconst overridableValue = componentOverridablePropTypeUtil.extract( newOverrideValue );\n\t\tif ( overridableValue && componentId ) {\n\t\t\tif ( overridableProp.originPropFields ) {\n\t\t\t\tupdateOverridableProp( componentId, overridableValue, overridableProp.originPropFields );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst { elType, widgetType, propKey } = overridableProp;\n\t\t\tupdateOverridableProp( componentId, overridableValue, { elType, widgetType, propKey } );\n\t\t}\n\t};\n\n\treturn (\n\t\t<PropProvider\n\t\t\tpropType={ propTypeSchema }\n\t\t\tvalue={ value }\n\t\t\tsetValue={ setValue }\n\t\t\tisDisabled={ () => {\n\t\t\t\treturn false;\n\t\t\t} }\n\t\t>\n\t\t\t<PropKeyProvider bind={ overridableProp.overrideKey }>\n\t\t\t\t<Stack direction=\"column\" gap={ 1 } mb={ 1.5 }>\n\t\t\t\t\t<ControlLabel>{ overridableProp.label }</ControlLabel>\n\t\t\t\t\t{ getControl( controls, overridableProp?.originPropFields ?? overridableProp ) }\n\t\t\t\t</Stack>\n\t\t\t</PropKeyProvider>\n\t\t</PropProvider>\n\t);\n}\n\nfunction getPropValue( value: PropValue ): TransformablePropValue< string, unknown > | null {\n\tconst overridableValue = componentOverridablePropTypeUtil.extract( value );\n\n\tif ( overridableValue ) {\n\t\t// if overridable - return as is and let the control replacement handle the overridable value\n\t\treturn value as TransformablePropValue< string, unknown >;\n\t}\n\n\tif ( componentInstanceOverridePropTypeUtil.isValid( value ) ) {\n\t\treturn value.value.override_value as TransformablePropValue< string, unknown >;\n\t}\n\n\treturn null;\n}\n\nfunction getMatchingOverride(\n\toverrides: ComponentInstanceOverridesPropValue,\n\toverrideKey: string\n): NonNullable< ComponentInstanceOverridesPropValue >[ number ] | null {\n\treturn (\n\t\toverrides?.find( ( override ) => {\n\t\t\tconst overridableValue = componentOverridablePropTypeUtil.extract( override );\n\t\t\tlet comparedOverrideKey = null;\n\n\t\t\tif ( overridableValue ) {\n\t\t\t\tcomparedOverrideKey = ( overridableValue.origin_value as ComponentInstanceOverrideProp )?.value\n\t\t\t\t\t?.override_key;\n\t\t\t} else {\n\t\t\t\tcomparedOverrideKey = override.value.override_key;\n\t\t\t}\n\n\t\t\treturn comparedOverrideKey === overrideKey;\n\t\t} ) ?? null\n\t);\n}\n\nfunction createOverrideValue(\n\toverrideKey: string,\n\toverrideValue: ComponentInstanceOverrideProp | ComponentOverridablePropValue,\n\tcomponentId: number\n): NonNullable< ComponentInstanceOverridesPropValue >[ number ] {\n\tconst overridableValue = componentOverridablePropTypeUtil.extract( overrideValue );\n\n\tif ( overridableValue ) {\n\t\tconst innerOverride = componentInstanceOverridePropTypeUtil.create( {\n\t\t\toverride_key: overrideKey,\n\t\t\toverride_value: overridableValue.origin_value,\n\t\t\tschema_source: {\n\t\t\t\ttype: 'component',\n\t\t\t\tid: componentId,\n\t\t\t},\n\t\t} );\n\n\t\treturn componentOverridablePropTypeUtil.create( {\n\t\t\toverride_key: overridableValue.override_key,\n\t\t\torigin_value: innerOverride,\n\t\t} );\n\t}\n\n\treturn componentInstanceOverridePropTypeUtil.create( {\n\t\toverride_key: overrideKey,\n\t\toverride_value: overrideValue,\n\t\tschema_source: {\n\t\t\ttype: 'component',\n\t\t\tid: componentId,\n\t\t},\n\t} );\n}\n\nfunction getControl( controls: Record< string, Control >, originPropFields: OriginPropFields ) {\n\tconst ControlComponent = controlsRegistry.get( controls[ originPropFields.propKey ].value.type as ControlType );\n\n\tconst controlProps = controls[ originPropFields.propKey ].value.props;\n\n\treturn <ControlComponent { ...controlProps } />;\n}\n","import { type Control, type ControlItem, getElementType } from '@elementor/editor-elements';\n\nexport function useControlsByWidgetType( type: string ): Record< string, Control > {\n\tconst elementType = getElementType( type );\n\n\tif ( ! elementType ) {\n\t\treturn {};\n\t}\n\n\tconst controls = iterateControls( elementType.controls );\n\n\treturn getControlsByBind( controls );\n}\n\nfunction iterateControls( controls: ControlItem[] ): Control[] {\n\treturn controls\n\t\t.map( ( control ) => {\n\t\t\tif ( control.type === 'control' && 'bind' in control.value ) {\n\t\t\t\treturn control;\n\t\t\t}\n\n\t\t\tif ( control.type === 'section' ) {\n\t\t\t\treturn iterateControls( control.value.items );\n\t\t\t}\n\n\t\t\treturn null;\n\t\t} )\n\t\t.filter( Boolean )\n\t\t.flat() as Control[];\n}\n\nfunction getControlsByBind( controls: Control[] ): Record< string, Control > {\n\treturn controls.reduce(\n\t\t( controlsByBind: Record< string, Control >, control ) => ( {\n\t\t\t...controlsByBind,\n\t\t\t[ control.value.bind ]: control,\n\t\t} ),\n\t\t{}\n\t);\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { type ComponentOverridablePropValue } from '../../prop-types/component-overridable-prop-type';\nimport { type OriginPropFields, type OverridableProps } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\n\nexport function updateOverridableProp(\n\tcomponentId: number,\n\tpropValue: ComponentOverridablePropValue,\n\toriginPropFields?: OriginPropFields\n) {\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 newOverridableProp = originPropFields\n\t\t? {\n\t\t\t\toriginValue: propValue.origin_value,\n\t\t\t\toriginPropFields,\n\t\t }\n\t\t: {\n\t\t\t\toriginValue: propValue.origin_value,\n\t\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\t...newOverridableProp,\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 { getWidgetsCache } from '@elementor/editor-elements';\n\nimport { type OriginPropFields, type OverridableProp } from '../types';\n\nexport const getPropTypeForComponentOverride = ( overridableProp: OverridableProp ) => {\n\tif ( overridableProp.originPropFields ) {\n\t\treturn getPropType( overridableProp.originPropFields );\n\t}\n\n\tconst { elType, widgetType, propKey } = overridableProp;\n\n\treturn getPropType( {\n\t\telType,\n\t\twidgetType,\n\t\tpropKey,\n\t} );\n};\n\nfunction getPropType( { widgetType, propKey }: OriginPropFields ) {\n\tconst widgetPropsSchema = getWidgetsCache()?.[ widgetType ]?.atomic_props_schema;\n\n\treturn widgetPropsSchema?.[ propKey ];\n}\n","import * as React from 'react';\nimport { type PropsWithChildren } from 'react';\nimport { ControlAdornments, ControlFormLabel } from '@elementor/editor-controls';\nimport { type FormLabelProps, Stack } from '@elementor/ui';\n\ntype ControlLabelProps = FormLabelProps & PropsWithChildren< object >;\n\nexport const ControlLabel = ( { children, ...props }: ControlLabelProps ) => {\n\treturn (\n\t\t<Stack direction=\"row\" alignItems=\"center\" justifyItems=\"start\" gap={ 0.25 }>\n\t\t\t<ControlFormLabel { ...props }>{ children }</ControlFormLabel>\n\t\t\t<ControlAdornments />\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { type ComponentType } from 'react';\nimport { ControlReplacementsProvider, PropKeyProvider, PropProvider, useBoundProp } from '@elementor/editor-controls';\nimport { createTopLevelObjectType, useElement } from '@elementor/editor-editing-panel';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport { type ComponentInstanceOverridePropValue } from '../../prop-types/component-instance-override-prop-type';\nimport {\n\tcomponentOverridablePropTypeUtil,\n\ttype ComponentOverridablePropValue,\n} from '../../prop-types/component-overridable-prop-type';\nimport { OverridablePropProvider } from '../../provider/overridable-prop-context';\nimport { updateOverridableProp } from '../../store/actions/update-overridable-prop';\nimport { useCurrentComponentId, useOverridableProps } from '../../store/store';\nimport { getPropTypeForComponentOverride } from '../../utils/get-prop-type-for-component-override';\n\nexport function OverridablePropControl< T extends object >( {\n\tOriginalControl,\n\t...props\n}: T & { OriginalControl: ComponentType< T > } ) {\n\tconst { elementType } = useElement();\n\n\tconst { value, bind, setValue, placeholder, ...propContext } = useBoundProp( componentOverridablePropTypeUtil );\n\tconst componentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( componentId );\n\n\tif ( ! componentId ) {\n\t\treturn null;\n\t}\n\n\tif ( ! value?.override_key ) {\n\t\tthrow new Error( 'Override key is required' );\n\t}\n\n\tconst isComponentInstance = elementType.key === 'e-component';\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\tupdateOverridableProp( componentId, propValue );\n\t};\n\n\tconst defaultPropType = elementType.propsSchema[ bind ];\n\n\tconst propType = createTopLevelObjectType( {\n\t\tschema: {\n\t\t\t[ bind ]:\n\t\t\t\tisComponentInstance && overridableProps\n\t\t\t\t\t? getPropTypeForComponentOverride( overridableProps.props[ value.override_key ] ) ?? defaultPropType\n\t\t\t\t\t: defaultPropType,\n\t\t},\n\t} );\n\n\tconst propValue = (\n\t\tisComponentInstance\n\t\t\t? ( value.origin_value?.value as ComponentInstanceOverridePropValue ).override_value\n\t\t\t: value.origin_value\n\t) as PropValue;\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={ {\n\t\t\t\t\t[ bind ]: propValue,\n\t\t\t\t} }\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 * 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 * 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 { 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 { useCurrentComponentId, useOverridableProps } from '../../store/store';\nimport { type OverridableProps } from '../../types';\nimport { Indicator } from './indicator';\nimport { OverridablePropForm } from './overridable-prop-form';\nimport { getOverridableProp } from './utils/get-overridable-prop';\n\nconst FORBIDDEN_KEYS = [ '_cssid', 'attributes' ];\n\nexport function OverridablePropIndicator() {\n\tconst { bind } = useBoundProp();\n\tconst componentId = useCurrentComponentId();\n\tconst overridableProps = useOverridableProps( componentId );\n\n\tif ( ! isPropAllowed( bind ) || ! componentId || ! overridableProps ) {\n\t\treturn null;\n\t}\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 propTypeDefault = propType.default ?? {};\n\t\tconst originValue = ( ! overridableValue ? value : overridableValue?.origin_value ) ?? propTypeDefault;\n\n\t\tconst matchingOverridableProp = overridableValue\n\t\t\t? overridableProps?.props?.[ overridableValue.override_key ]\n\t\t\t: undefined;\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\toriginPropFields: matchingOverridableProp?.originPropFields,\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';\n\nimport { type OriginPropFields, type OverridableProp } from '../../types';\nimport { selectOverridableProps, slice } from '../store';\nimport {\n\taddPropToGroup,\n\tensureGroupInOrder,\n\tremovePropFromGroup,\n\tremovePropsFromState,\n\tresolveOrCreateGroup,\n} from '../utils/groups-transformers';\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\toriginPropFields?: OriginPropFields;\n};\n\nexport function setOverridableProp( {\n\tcomponentId,\n\toverrideKey,\n\telementId,\n\tlabel,\n\tgroupId,\n\tpropKey,\n\telType,\n\twidgetType,\n\toriginValue,\n\toriginPropFields,\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 { groups: groupsAfterResolve, groupId: currentGroupId } = resolveOrCreateGroup(\n\t\toverridableProps.groups,\n\t\tgroupId || existingOverridableProp?.groupId || undefined\n\t);\n\n\tconst overridableProp: 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\toriginPropFields,\n\t};\n\n\tconst stateAfterRemovingDuplicates = removePropsFromState(\n\t\t{ ...overridableProps, groups: groupsAfterResolve },\n\t\tduplicatedTargetProps\n\t);\n\n\tconst props = {\n\t\t...stateAfterRemovingDuplicates.props,\n\t\t[ overridableProp.overrideKey ]: overridableProp,\n\t};\n\n\tlet groups = addPropToGroup( stateAfterRemovingDuplicates.groups, currentGroupId, overridableProp.overrideKey );\n\tgroups = ensureGroupInOrder( groups, currentGroupId );\n\n\tconst isChangingGroups = existingOverridableProp && existingOverridableProp.groupId !== currentGroupId;\n\n\tif ( isChangingGroups ) {\n\t\tgroups = removePropFromGroup( groups, existingOverridableProp.groupId, overridableProp.overrideKey );\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","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 { __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 { getContainer, updateElementSettings, type V1Element } from '@elementor/editor-elements';\nimport { registerDataHook } from '@elementor/editor-v1-adapters';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { componentInstanceOverridePropTypeUtil } from '../prop-types/component-instance-override-prop-type';\nimport {\n\tcomponentInstanceOverridesPropTypeUtil,\n\ttype ComponentInstanceOverridesPropValue,\n} from '../prop-types/component-instance-overrides-prop-type';\nimport {\n\tcomponentInstancePropTypeUtil,\n\ttype ComponentInstancePropValue,\n} from '../prop-types/component-instance-prop-type';\nimport { isComponentInstance } from '../utils/is-component-instance';\n\nexport function initRegenerateOverrideKeys() {\n\tregisterDataHook( 'after', 'document/elements/duplicate', ( _args, result: V1Element | V1Element[] ) => {\n\t\tregenerateOverrideKeysForContainers( result );\n\t} );\n\n\tregisterDataHook( 'after', 'document/elements/paste', ( _args, result: V1Element | V1Element[] ) => {\n\t\tregenerateOverrideKeysForContainers( result );\n\t} );\n\n\tregisterDataHook( 'after', 'document/elements/import', ( _args, result: V1Element | V1Element[] ) => {\n\t\tregenerateOverrideKeysForContainers( result );\n\t} );\n}\n\nexport function regenerateOverrideKeysForContainers( result: V1Element | V1Element[] ) {\n\tconst containers = Array.isArray( result ) ? result : [ result ];\n\n\tcontainers.forEach( ( container ) => {\n\t\tregenerateOverrideKeysRecursive( container.id );\n\t} );\n}\n\nfunction regenerateOverrideKeysRecursive( elementId: string ) {\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\treturn;\n\t}\n\n\tgetAllElements( container ).forEach( regenerateOverrideKeys );\n}\n\nfunction getAllElements( container: V1Element ): V1Element[] {\n\tconst children = ( container.children ?? [] ).flatMap( getAllElements ) ?? [];\n\n\treturn [ container, ...children ];\n}\n\nfunction regenerateOverrideKeys( element: V1Element ) {\n\tif ( ! isComponentInstance( element.model.toJSON() ) ) {\n\t\treturn;\n\t}\n\n\tconst settings = element.settings?.toJSON() ?? {};\n\n\tif ( ! hasOverrides( settings ) ) {\n\t\treturn;\n\t}\n\n\tconst componentInstance = settings.component_instance;\n\tconst overrides = componentInstance.value.overrides;\n\n\tconst newOverrides = overrides.value.map( ( override ) => {\n\t\tif ( ! componentInstanceOverridePropTypeUtil.isValid( override ) ) {\n\t\t\treturn override;\n\t\t}\n\n\t\treturn {\n\t\t\t...override,\n\t\t\tvalue: {\n\t\t\t\t...override.value,\n\t\t\t\toverride_key: generateUniqueId( 'prop' ),\n\t\t\t},\n\t\t};\n\t} );\n\n\tconst newComponentInstance = {\n\t\t...componentInstance,\n\t\tvalue: {\n\t\t\t...componentInstance.value,\n\t\t\toverrides: {\n\t\t\t\t...overrides,\n\t\t\t\tvalue: newOverrides,\n\t\t\t},\n\t\t},\n\t};\n\n\tupdateElementSettings( {\n\t\tid: element.id,\n\t\tprops: { component_instance: newComponentInstance },\n\t\twithHistory: false,\n\t} );\n}\n\nfunction hasOverrides( settings: Record< string, unknown > ): settings is {\n\tcomponent_instance: NonNullable< ComponentInstancePropValue > & {\n\t\tvalue: { overrides: { $$type: string; value: NonNullable< ComponentInstanceOverridesPropValue >[] } };\n\t};\n} {\n\tif ( ! componentInstancePropTypeUtil.isValid( settings?.component_instance ) ) {\n\t\treturn false;\n\t}\n\n\tconst componentInstance = componentInstancePropTypeUtil.extract( settings?.component_instance );\n\n\tconst overrides = componentInstance?.overrides;\n\n\tif ( ! componentInstanceOverridesPropTypeUtil.isValid( overrides ) ) {\n\t\treturn false;\n\t}\n\n\tconst overridesValue = overrides?.value;\n\n\treturn !! overridesValue?.length;\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { initSaveAsComponentTool } from './save-as-component-tool';\n\nexport function initMcp() {\n\tconst { setMCPDescription } = getMCPByDomain( 'components' );\n\n\tsetMCPDescription(\n\t\t`Elementor Editor Components MCP - Tools for creating and managing reusable components. \n Components are reusable blocks of content that can be used multiple times across the pages, its a widget which contains a set of elements and styles.`\n\t);\n\n\tinitSaveAsComponentTool();\n}\n","import { DOCUMENT_STRUCTURE_URI, WIDGET_SCHEMA_URI } from '@elementor/editor-canvas';\nimport { getContainer, getElementType, getWidgetsCache, type V1ElementData } from '@elementor/editor-elements';\nimport { getMCPByDomain, toolPrompts } from '@elementor/editor-mcp';\nimport { type PropValue } from '@elementor/editor-props';\nimport { AxiosError } from '@elementor/http-client';\nimport { z } from '@elementor/schema';\nimport { generateUniqueId } from '@elementor/utils';\n\nimport { apiClient } from '../api';\nimport { createUnpublishedComponent } from '../store/actions/create-unpublished-component';\nimport { type OverridableProps } from '../types';\n\nconst InputSchema = {\n\telement_id: z\n\t\t.string()\n\t\t.describe(\n\t\t\t'The unique identifier of the element to save as a component. ' +\n\t\t\t\t'Use the \"list-elements\" tool to find available element IDs in the current document.'\n\t\t),\n\tcomponent_name: z\n\t\t.string()\n\t\t.describe( 'The name for the new component. Should be descriptive and unique among existing components.' ),\n\toverridable_props: z\n\t\t.object( {\n\t\t\tprops: z.record(\n\t\t\t\tz.object( {\n\t\t\t\t\telementId: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe( 'The id of the child element that you want to override its settings' ),\n\t\t\t\t\tpropKey: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe(\n\t\t\t\t\t\t\t'The property key of the child element that you want to override its settings (e.g., \"text\", \"url\", \"tag\"). To get the available propKeys for an element, use the \"get-element-type-config\" tool.'\n\t\t\t\t\t\t),\n\t\t\t\t} )\n\t\t\t),\n\t\t} )\n\t\t.optional()\n\t\t.describe(\n\t\t\t'Overridable properties configuration. Specify which CHILD element properties can be customized. ' +\n\t\t\t\t'Only elementId and propKey are required; To get the available propKeys for a child element you must use the \"get-element-type-config\" tool.'\n\t\t),\n};\n\nconst OutputSchema = {\n\tmessage: z.string().optional().describe( 'Additional information about the operation result' ),\n\tcomponent_uid: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe( 'The unique identifier of the newly created component (only present on success)' ),\n};\n\nexport const ERROR_MESSAGES = {\n\tELEMENT_NOT_FOUND: \"Element not found. Use 'list-elements' to get valid element IDs.\",\n\tELEMENT_NOT_ONE_OF_TYPES: ( validTypes: string[] ) =>\n\t\t`Element is not one of the following types: ${ validTypes.join( ', ' ) }`,\n\tELEMENT_IS_LOCKED: 'Cannot save a locked element as a component.',\n};\n\nexport const handleSaveAsComponent = async ( params: z.infer< z.ZodObject< typeof InputSchema > > ) => {\n\tconst { element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params;\n\tconst validElementTypes = getValidElementTypes();\n\tconst container = getContainer( elementId );\n\n\tif ( ! container ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_FOUND );\n\t}\n\n\tconst elType = container.model.get( 'elType' );\n\n\tif ( ! validElementTypes.includes( elType ) ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_NOT_ONE_OF_TYPES( validElementTypes ) );\n\t}\n\n\tconst element = container.model.toJSON( { remove: [ 'default' ] } ) as V1ElementData;\n\n\tif ( element?.isLocked ) {\n\t\tthrow new Error( ERROR_MESSAGES.ELEMENT_IS_LOCKED );\n\t}\n\n\tconst overridableProps = overridablePropsInput\n\t\t? enrichOverridableProps( overridablePropsInput, element )\n\t\t: undefined;\n\n\tif ( overridableProps ) {\n\t\tupdateElementDataWithOverridableProps( element, overridableProps );\n\t}\n\n\tconst uid = generateUniqueId( 'component' );\n\n\ttry {\n\t\tawait apiClient.validate( {\n\t\t\titems: [\n\t\t\t\t{ uid, title: componentName, elements: [ element ], settings: { overridable_props: overridableProps } },\n\t\t\t],\n\t\t} );\n\t} catch ( error: unknown ) {\n\t\tif ( error instanceof AxiosError ) {\n\t\t\tthrow new Error( error.response?.data.messge );\n\t\t}\n\t\tthrow new Error( 'Unknown error' );\n\t}\n\n\tcreateUnpublishedComponent( componentName, element, null, overridableProps, uid );\n\n\treturn {\n\t\tstatus: 'ok' as const,\n\t\tmessage: `Component \"${ componentName }\" created successfully.`,\n\t\tcomponent_uid: uid,\n\t};\n};\n\nfunction enrichOverridableProps(\n\tinput: { props: Record< string, { elementId: string; propKey: string } > },\n\trootElement: V1ElementData\n): OverridableProps {\n\tconst enrichedProps: OverridableProps[ 'props' ] = {};\n\tconst defaultGroupId = generateUniqueId( 'group' );\n\n\tObject.entries( input.props ).forEach( ( [ , prop ] ) => {\n\t\tconst { elementId, propKey } = prop;\n\t\tconst element = findElementById( rootElement, elementId );\n\n\t\tif ( ! element ) {\n\t\t\tthrow new Error( `Element with ID \"${ elementId }\" not found in component` );\n\t\t}\n\n\t\tconst elType = element.elType;\n\t\tconst widgetType = element.widgetType || element.elType;\n\n\t\t// Validate that the propKey exists in the element's schema\n\t\tconst elementType = getElementType( widgetType );\n\n\t\tif ( ! elementType ) {\n\t\t\tthrow new Error(\n\t\t\t\t`Element type \"${ widgetType }\" is not atomic or does not have a settings schema. ` +\n\t\t\t\t\t`Cannot expose property \"${ propKey }\" for element \"${ elementId }\".`\n\t\t\t);\n\t\t}\n\n\t\tif ( ! elementType.propsSchema[ propKey ] ) {\n\t\t\tconst availableProps = Object.keys( elementType.propsSchema ).join( ', ' );\n\t\t\tthrow new Error(\n\t\t\t\t`Property \"${ propKey }\" does not exist in element \"${ elementId }\" (type: ${ widgetType }). ` +\n\t\t\t\t\t`Available properties: ${ availableProps }`\n\t\t\t);\n\t\t}\n\n\t\tconst overrideKey = generateUniqueId( 'prop' );\n\t\tconst originValue = element.settings?.[ propKey ]\n\t\t\t? ( element.settings[ propKey ] as PropValue )\n\t\t\t: elementType.propsSchema[ propKey ].default ?? null;\n\n\t\tconst label = generateLabel( propKey );\n\n\t\tenrichedProps[ overrideKey ] = {\n\t\t\toverrideKey,\n\t\t\tlabel,\n\t\t\telementId,\n\t\t\tpropKey,\n\t\t\telType,\n\t\t\twidgetType,\n\t\t\toriginValue,\n\t\t\tgroupId: defaultGroupId,\n\t\t};\n\t} );\n\n\treturn {\n\t\tprops: enrichedProps,\n\t\tgroups: {\n\t\t\titems: {\n\t\t\t\t[ defaultGroupId ]: {\n\t\t\t\t\tid: defaultGroupId,\n\t\t\t\t\tlabel: 'Default',\n\t\t\t\t\tprops: Object.keys( enrichedProps ),\n\t\t\t\t},\n\t\t\t},\n\t\t\torder: [ defaultGroupId ],\n\t\t},\n\t};\n}\n\nfunction updateElementDataWithOverridableProps( rootElement: V1ElementData, overridableProps: OverridableProps ) {\n\tObject.values( overridableProps.props ).forEach( ( prop ) => {\n\t\tconst element = findElementById( rootElement, prop.elementId );\n\n\t\tif ( ! element || ! element.settings ) {\n\t\t\treturn;\n\t\t}\n\n\t\telement.settings[ prop.propKey ] = {\n\t\t\t$$type: 'overridable',\n\t\t\tvalue: {\n\t\t\t\toverride_key: prop.overrideKey,\n\t\t\t\torigin_value: prop.originValue,\n\t\t\t},\n\t\t};\n\t} );\n}\n\nfunction findElementById( root: V1ElementData, targetId: string ): V1ElementData | null {\n\tif ( root.id === targetId ) {\n\t\treturn root;\n\t}\n\n\tif ( root.elements ) {\n\t\tfor ( const child of root.elements ) {\n\t\t\tconst found = findElementById( child, targetId );\n\t\t\tif ( found ) {\n\t\t\t\treturn found;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction generateLabel( propKey: string ): string {\n\tconst uniqueId = generateUniqueId( 'prop' );\n\treturn `${ uniqueId } - ${ propKey }`;\n}\n\nfunction getValidElementTypes(): string[] {\n\tconst types = getWidgetsCache();\n\n\tif ( ! types ) {\n\t\treturn [];\n\t}\n\n\treturn Object.entries( types ).reduce( ( acc, [ type, value ] ) => {\n\t\tif ( ! value.atomic_props_schema || ! value.show_in_panel || value.elType === 'widget' ) {\n\t\t\treturn acc;\n\t\t}\n\n\t\tacc.push( type );\n\t\treturn acc;\n\t}, [] as string[] );\n}\n\nconst generatePrompt = () => {\n\tconst saveAsComponentPrompt = toolPrompts( 'save-as-component' );\n\n\tsaveAsComponentPrompt.description( `\nSave an existing element as a reusable component in the Elementor editor.\n\n# When to use this tool\nUse this tool when the user wants to:\n- Create a reusable component from an existing element structure\n- Make specific child element properties customizable in component instances\n- Build a library of reusable design patterns\n\n# When NOT to use this tool\n- Element is already a component (widgetType: 'e-component')\n- Element is locked\n- Element is not an atomic element (atomic_props_schema is not defined)\n- Element elType is a 'widget'\n\n# **CRITICAL - REQUIRED RESOURCES (Must read before using this tool)**\n1. [${ DOCUMENT_STRUCTURE_URI }]\n **MANDATORY** - Required to understand the document structure and identify child elements for overridable properties.\n Use this resource to find element IDs and understand the element hierarchy.\n\n2. [${ WIDGET_SCHEMA_URI }]\n **MANDATORY** - Required to understand which properties are available for each widget type.\n Use this to identify available propKeys in the atomic_props_schema for child elements.\n\n# Instructions - MUST FOLLOW IN ORDER\n## Step 1: Identify the Target Element\n1. Read the [${ DOCUMENT_STRUCTURE_URI }] resource to understand the document structure\n2. Locate the element you want to save as a component by its element_id\n3. Verify the element type is a valid element type\n4. Ensure the element is not locked and is not already a component\n\n## Step 2: Define Overridable Properties\nDo this step to make child element properties customizable.\nSkip that step ONLY if the user explicitly requests to not make any properties customizable.\n\n1. **Identify Child Elements**\n - Use the [${ DOCUMENT_STRUCTURE_URI }] resource to find all child elements\n - Note the elementId and widgetType/elType of each child element you want to customize\n\n2. **Find Available Properties**\n - Use the [${ WIDGET_SCHEMA_URI }] resource to find the child element's widget type schema\n - Review the atomic_props_schema to find available propKeys (ONLY use top-level props)\n - Common propKeys include: \"text\", \"url\", \"tag\", \"size\", etc.\n - Use only the top level properties, do not use nested properties.\n\n3. **Build the overridable_props Object**\n - For each property you want to make overridable, add an entry:\n \\`{ \"elementId\": \"<child-element-id>\", \"propKey\": \"<property-key>\" }\\`\n - Group all entries under the \"props\" object\n\n## Step 3: Execute the Tool\nCall the tool with:\n- element_id: The ID of the parent element to save as component\n- component_name: A descriptive name for the component\n- overridable_props: (Optional) The properties configuration from Step 2\n\n# CONSTRAINTS\n- NEVER try to override properties of the parent element itself - ONLY child elements\n- NEVER use invalid propKeys - always verify against the widget's atomic_props_schema in [${ WIDGET_SCHEMA_URI }]\n- Property keys must exist in the child element's atomic_props_schema\n- Element IDs must exist within the target element's children\n- When tool execution fails, read the error message and adjust accordingly\n- The element being saved must not be inside another component\n` );\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'element_id',\n\t\t`**MANDATORY** The unique identifier of the element to save as a component.\nUse the [${ DOCUMENT_STRUCTURE_URI }] resource to find available element IDs.`\n\t);\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'component_name',\n\t\t`**MANDATORY** A descriptive name for the new component.\nShould be unique and clearly describe the component's purpose (e.g., \"Hero Section\", \"Feature Card\").`\n\t);\n\n\tsaveAsComponentPrompt.parameter(\n\t\t'overridable_props',\n\t\t`**OPTIONAL** Configuration for which child element properties can be customized in component instances.\n\nStructure:\n\\`\\`\\`json\n{\n \"props\": {\n \"<unique-key>\": {\n \"elementId\": \"<child-element-id>\",\n \"propKey\": \"<property-key>\"\n }\n }\n}\n\\`\\`\\`\n\nTo populate this correctly:\n1. Use [${ DOCUMENT_STRUCTURE_URI }] to find child element IDs and their widgetType\n2. Use [${ WIDGET_SCHEMA_URI }] to find the atomic_props_schema for each child element's widgetType\n3. Only include properties you want to be customizable in component instances\n4. Common propKeys: \"text\", \"url\", \"tag\", \"size\", \"align\", etc.`\n\t);\n\n\tsaveAsComponentPrompt.example( `\nBasic component without overridable properties:\n\\`\\`\\`json\n{\n \"element_id\": \"abc123\",\n \"component_name\": \"Hero Section\"\n}\n\\`\\`\\`\n\nComponent with overridable properties:\n\\`\\`\\`json\n{\n \"element_id\": \"abc123\",\n \"component_name\": \"Feature Card\",\n \"overridable_props\": {\n \"props\": {\n \"heading-text\": {\n \"elementId\": \"heading-123\",\n \"propKey\": \"text\"\n },\n \"button-text\": {\n \"elementId\": \"button-456\",\n \"propKey\": \"text\"\n },\n \"button-link\": {\n \"elementId\": \"button-456\",\n \"propKey\": \"url\"\n }\n }\n }\n}\n\\`\\`\\`\n` );\n\n\tsaveAsComponentPrompt.instruction(\n\t\t`After successful creation, the component will be available in the components library and can be inserted into any page or template.`\n\t);\n\n\tsaveAsComponentPrompt.instruction(\n\t\t`When overridable properties are defined, component instances will show customization controls for those specific properties in the editing panel.`\n\t);\n\n\treturn saveAsComponentPrompt.prompt();\n};\n\nexport const initSaveAsComponentTool = () => {\n\treturn getMCPByDomain( 'components' ).addTool( {\n\t\tname: 'save-as-component',\n\t\tschema: InputSchema,\n\t\toutputSchema: OutputSchema,\n\t\tdescription: generatePrompt(),\n\t\thandler: handleSaveAsComponent,\n\t} );\n};\n","import { useEffect } from 'react';\nimport { __dispatch as dispatch } from '@elementor/store';\n\nimport { loadComponents } from './store/thunks';\n\nexport function PopulateStore() {\n\tuseEffect( () => {\n\t\tdispatch( loadComponents() );\n\t}, [] );\n\n\treturn null;\n}\n","import { __dispatch as dispatch } from '@elementor/store';\n\nimport { apiClient } from '../../api';\nimport { slice } from '../store';\n\nexport function removeComponentStyles( id: number ) {\n\tapiClient.invalidateComponentConfigCache( id );\n\tdispatch( slice.actions.removeStyles( { id } ) );\n}\n","import { createStylesProvider } from '@elementor/editor-styles-repository';\nimport { __getState as getState, __subscribeWithSelector as subscribeWithSelector } from '@elementor/store';\n\nimport { selectFlatStyles, SLICE_NAME } from './store';\n\nexport const componentsStylesProvider = createStylesProvider( {\n\tkey: 'components-styles',\n\tpriority: 100,\n\tsubscribe: ( cb ) =>\n\t\tsubscribeWithSelector(\n\t\t\t( state ) => state[ SLICE_NAME ],\n\t\t\t() => {\n\t\t\t\tcb();\n\t\t\t}\n\t\t),\n\tactions: {\n\t\tall: () => {\n\t\t\treturn selectFlatStyles( getState() );\n\t\t},\n\t\tget: ( id ) => {\n\t\t\treturn selectFlatStyles( getState() ).find( ( style ) => style.id === id ) ?? null;\n\t\t},\n\t},\n} );\n","import { updateElementSettings, type V1ElementData } from '@elementor/editor-elements';\nimport { __dispatch as dispatch, __getState as getState } from '@elementor/store';\n\nimport { apiClient } from '../api';\nimport { type ComponentInstanceProp } from '../prop-types/component-instance-prop-type';\nimport { selectUnpublishedComponents, slice } from '../store/store';\nimport { type DocumentSaveStatus, type UnpublishedComponent } from '../types';\n\nexport async function createComponentsBeforeSave( {\n\telements,\n\tstatus,\n}: {\n\telements: V1ElementData[];\n\tstatus: DocumentSaveStatus;\n} ) {\n\tconst unpublishedComponents = selectUnpublishedComponents( getState() );\n\n\tif ( ! unpublishedComponents.length ) {\n\t\treturn;\n\t}\n\n\ttry {\n\t\tconst uidToComponentId = await createComponents( unpublishedComponents, status );\n\n\t\tupdateComponentInstances( elements, uidToComponentId );\n\n\t\tdispatch(\n\t\t\tslice.actions.add(\n\t\t\t\tunpublishedComponents.map( ( component ) => ( {\n\t\t\t\t\tid: uidToComponentId.get( component.uid ) as number,\n\t\t\t\t\tname: component.name,\n\t\t\t\t\tuid: component.uid,\n\t\t\t\t\toverridableProps: component.overridableProps ? component.overridableProps : undefined,\n\t\t\t\t} ) )\n\t\t\t)\n\t\t);\n\t\tdispatch( slice.actions.resetUnpublished() );\n\t} catch ( error ) {\n\t\tthrow new Error( `Failed to publish components and update component instances: ${ error }` );\n\t}\n}\n\nasync function createComponents(\n\tcomponents: UnpublishedComponent[],\n\tstatus: DocumentSaveStatus\n): Promise< Map< string, number > > {\n\tconst response = await apiClient.create( {\n\t\tstatus,\n\t\titems: components.map( ( component ) => ( {\n\t\t\tuid: component.uid,\n\t\t\ttitle: component.name,\n\t\t\telements: component.elements,\n\t\t\tsettings: component.overridableProps ? { overridable_props: component.overridableProps } : undefined,\n\t\t} ) ),\n\t} );\n\n\tconst map = new Map< string, number >();\n\n\tObject.entries( response ).forEach( ( [ key, value ] ) => {\n\t\tmap.set( key, value );\n\t} );\n\n\treturn map;\n}\n\nfunction updateComponentInstances( elements: V1ElementData[], uidToComponentId: Map< string, number > ): void {\n\telements.forEach( ( element ) => {\n\t\tconst { shouldUpdate, newComponentId } = shouldUpdateElement( element, uidToComponentId );\n\t\tif ( shouldUpdate ) {\n\t\t\tupdateElementComponentId( element.id, newComponentId );\n\t\t}\n\n\t\tif ( element.elements ) {\n\t\t\tupdateComponentInstances( element.elements, uidToComponentId );\n\t\t}\n\t} );\n}\n\nfunction shouldUpdateElement(\n\telement: V1ElementData,\n\tuidToComponentId: Map< string, number >\n): { shouldUpdate: true; newComponentId: number } | { shouldUpdate: false; newComponentId: null } {\n\tif ( element.widgetType === 'e-component' ) {\n\t\tconst currentComponentId = ( element.settings?.component_instance as ComponentInstanceProp )?.value\n\t\t\t?.component_id.value;\n\n\t\tif ( currentComponentId && uidToComponentId.has( currentComponentId.toString() ) ) {\n\t\t\treturn {\n\t\t\t\tshouldUpdate: true,\n\t\t\t\tnewComponentId: uidToComponentId.get( currentComponentId.toString() ) as number,\n\t\t\t};\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;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAA+C;AAC/C,IAAAA,wBAIO;AACP,IAAAC,4BAAqC;AACrC,IAAAC,+BAMO;AAEP,mCAA0B;AAC1B,IAAAC,wBAAiD;AACjD,IAAAC,mCAAiC;AACjC,IAAAC,6BAAiC;AACjC,IAAAC,iBAAiD;AACjD,IAAAC,gBAAmB;;;ACpBnB,2BAAiD;AACjD,IAAAC,gBAAuC;;;ACAvC,IAAAC,gBAMO;;;ACPP,mBAAuD;;;ACCvD,gCAAqB;AACrB,yBAA+C;AAI/C,IAAM,WAAW;AAsCV,IAAM,YAAY,CAAEC,SAAkB;AAAA,EAC5C,QAAQ;AAAA,EACR,WAAW,mBAAoBA,GAAG;AAAA,EAClC,MAAM,EAAE,IAAAA,IAAG;AACZ;AAEO,IAAM,YAAY;AAAA,EACxB,KAAK,UACJ,gCAAY,EACV,IAA6C,GAAI,QAAS,EAAG,EAC7D,KAAM,CAAE,QAAS,IAAI,KAAK,IAAK;AAAA,EAClC,QAAQ,CAAE,gBACT,gCAAY,EACV,KAAiD,GAAI,QAAS,IAAI,OAAQ,EAC1E,KAAM,CAAE,QAAS,IAAI,KAAK,IAAK;AAAA,EAClC,gBAAgB,CAAE,KAAe,eAChC,gCAAY,EAAE,IAAK,GAAI,QAAS,WAAW;AAAA,IAC1C;AAAA,IACA;AAAA,EACD,CAAE;AAAA,EACH,oBAAoB,CAAEA,QAAgB,+BAAK,KAAuC,UAAWA,GAAG,CAAE;AAAA,EAClG,gCAAgC,CAAEA,QAAgB,+BAAK,gBAAmC,UAAWA,GAAG,CAAE;AAAA,EAC1G,wBAAwB,OAAQ,gBAC/B,UAAM,gCAAY,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,UAAM,gCAAY,EAChB,KAA8B,GAAI,QAAS,SAAS;AAAA,IACpD;AAAA,EACD,CAAE,EACD,KAAM,CAAE,QAAS,IAAI,IAAK;AAAA,EAC7B,iBAAiB,OAAQ,gBACxB,UAAM,gCAAY,EAChB,KAA8B,GAAI,QAAS,WAAW;AAAA,IACtD;AAAA,EACD,CAAE,EACD,KAAM,CAAE,QAAS,IAAI,IAAK;AAAA,EAC7B,qBAAqB,OAAQ,gBAC5B,UAAM,gCAAY,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,UAAM,gCAAY,EAChB;AAAA,IACA,GAAI,QAAS;AAAA,IACb;AAAA,MACC;AAAA,IACD;AAAA,EACD,EACC,KAAM,CAAE,QAAS,IAAI,KAAK,IAAK;AAAA,EAClC,UAAU,OAAQ,YACjB,UAAM,gCAAY,EAChB,KAAoD,GAAI,QAAS,oBAAoB,OAAQ,EAC7F,KAAM,CAAE,QAAS,IAAI,IAAK;AAC9B;;;AD1GA,IAAM,qBAAiB,aAAAC,oBAAkB,mBAAmB,YAAY;AACvE,QAAM,WAAW,MAAM,UAAU,IAAI;AACrC,SAAO;AACR,CAAE;;;ADkCK,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,YAAQ,cAAAC,eAAa;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;AACvE,IAAM,eAAe,CAAE,gBAAqC;AAClE,aAAO,cAAAC,eAAa,CAAE,UAA8B,cAAc,gBAAiB,OAAO,WAAY,IAAI,IAAO;AAClH;AAEO,IAAM,uBAAmB,cAAAC;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,CAAE,MAA4B,oBAA6C;AAAA,IAC1E,GAAG,gBAAgB,IAAK,CAAE,UAAY;AAAA,MACrC,KAAK,KAAK;AAAA,MACV,MAAM,KAAK;AAAA,MACX,kBAAkB,KAAK;AAAA,IACxB,EAAI;AAAA,IACJ,GAAG;AAAA,EACJ;AACD;AACO,IAAM,kCAA8B,cAAAA;AAAA,EAC1C;AAAA,EACA,CAAE,oBAA6C;AAChD;AACO,IAAM,0BAAsB,cAAAA,kBAAgB,kBAAkB,CAAE,WAAY,WAAW,SAAU;AACjG,IAAM,wBAAoB,cAAAA,kBAAgB,kBAAkB,CAAE,WAAY,WAAW,OAAQ;AAC7F,IAAM,eAAe,CAAE,UAA4B,MAAO,UAAW,EAAE,UAAU,CAAC;AAClF,IAAM,uBAAmB,cAAAA,kBAAgB,yBAAyB,CAAE,SAAU,OAAO,OAAQ,IAAK,EAAE,KAAK,CAAE;AAC3G,IAAM,+BAA2B,cAAAA;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,6BAAyB,cAAAA;AAAA,EACrC;AAAA,EACA,CAAE,cAA+C;AAChD,QAAK,CAAE,WAAY;AAClB,aAAO;AAAA,IACR;AAEA,WAAO,UAAU,oBAAoB;AAAA,EACtC;AACD;AACO,IAAM,sBAAsB,CAAE,gBAAqC;AACzE,aAAO,cAAAD;AAAA,IAAa,CAAE,UACrB,cAAc,uBAAwB,OAAO,WAAY,IAAI;AAAA,EAC9D;AACD;AACO,IAAM,qCAAiC,cAAAC;AAAA,EAC7C;AAAA,EACA,CAAE,cAA+C;AAChD,WAAO,CAAC,CAAE,WAAW;AAAA,EACtB;AACD;AACO,IAAM,iBAAa,cAAAA,kBAAgB,SAAS,CAAE,SAAU,IAAK;AAE7D,IAAM,+BAA2B,cAAAA;AAAA,EACvC;AAAA,EACA,CAAE,uBAAwB;AAC3B;AAEO,IAAM,wBAAwB,MAAM;AAC1C,aAAO,cAAAD,eAAa,wBAAyB;AAC9C;AAEO,IAAM,+BAA2B,cAAAC;AAAA,EACvC;AAAA,EACA,CAAE,iBAAwC;AAC3C;;;AGlNA,8BAAqD;AAI9C,IAAM,2BAA2B,OAAQC,QAAgB;AAC/D,QAAM,sBAAkB,+CAAsB;AAE9C,MAAI;AACH,WAAO,MAAM,gBAAgB,QAAkCA,GAAG;AAAA,EACnE,QAAQ;AACP,WAAO;AAAA,EACR;AACD;AAEO,IAAM,kCAAkC,CAAEA,QAAgB;AAChE,QAAM,sBAAkB,+CAAsB;AAE9C,kBAAgB,gBAAiBA,GAAG;AACrC;;;AJPO,IAAM,2BAA2B,IAAI,mCAA2C,sBAAsB;AAAA,EAC5G,WAAW,CAAC;AACb,CAAE;AAEK,IAAM,mCAA+B;AAAA,EAC3C,OAAQ;AAAA,IACP,cAAcC;AAAA,IACd,WAAW;AAAA,EACZ,MAGO;AACN,UAAM,wBAAwB,gCAA6B,cAAAC,YAAS,CAAE;AAEtE,UAAM,uBAAuB,sBAAsB,KAAM,CAAE,EAAE,IAAI,MAAO,QAAQD,GAAG;AAEnF,UAAM,YAAY,gBAAgB,OAAQ,CAAE,KAAK,cAAgB,EAAE,GAAG,KAAK,GAAG,SAAS,IAAK,CAAC,CAAE;AAE/F,QAAK,sBAAuB;AAC3B,aAAO;AAAA,QACN,UAAU,gBAAiB,qBAAqB,QAAS;AAAA,QACzD;AAAA,MACD;AAAA,IACD;AAEA,QAAK,OAAOA,QAAO,UAAW;AAC7B,YAAM,IAAI,MAAO,iBAAkBA,GAAG,cAAe;AAAA,IACtD;AAEA,UAAM,OAAO,MAAM,yBAA0BA,GAAG;AAEhD,WAAO;AAAA,MACN,UAAU,MAAM,YAAY,CAAC;AAAA,MAC7B;AAAA,IACD;AAAA,EACD;AACD;;;AK/CA,IAAAE,wBAAgE;AAMzD,IAAM,sCAAkC;AAAA,EAC9C,CAAE,OAA6B,YAA8B;AAC5D,UAAM,EAAE,UAAU,IAAI,yBAAyB,IAAI;AAEnD,UAAM,gBAAgB,YAAa,MAAM,YAAa;AAEtD,QAAK,eAAgB;AACpB,YAAM,aAAa,sBAAuB,MAAM,YAAa;AAE7D,UAAK,YAAa;AACjB,eAAO,kBAAmB,OAAO,SAAS,aAAc;AAAA,MACzD;AAEA,aAAO;AAAA,IACR;AAEA,WAAO,MAAM;AAAA,EACd;AACD;AAEA,SAAS,kBACR,OACA,SAGA,eACC;AACD,QAAM,cAAc,mDAA6B,IAAK,UAAW;AAEjE,MAAK,CAAE,aAAc;AACpB,WAAO;AAAA,EACR;AAEA,QAAM,mBAAmB,YAAa,MAAM,aAAa,OAAO,OAAQ;AAExE,MAAK,CAAE,kBAAmB;AACzB,WAAO;AAAA,EACR;AAEA,QAAM,CAAE,GAAI,IAAI,OAAO,KAAM,gBAA8C;AAE3E,SAAO;AAAA,IACN,CAAE,GAAI,GAAG;AAAA,EACV;AACD;AAEA,SAAS,sBAAuB,aAAyD;AACxF,SAAO,YAAY,WAAW;AAC/B;;;ACtDA,IAAAC,wBAAkC;AAI3B,IAAM,mCAA+B,yCAAmB,CAAE,aAAkD;AAClH,QAAM,EAAE,cAAc,KAAK,gBAAgB,cAAc,IAAI;AAE7D,SAAO,EAAE,CAAE,GAAI,GAAG,cAAc;AACjC,CAAE;;;ACRF,IAAAC,UAAuB;AACvB,iCAAqC;AACrC,IAAAC,2BAAsC;AACtC,IAAAC,gBAAoD;AACpD,IAAAC,cAAqE;AACrE,IAAAC,gBAAmB;;;ACLnB,mBAA4B;AAC5B,IAAAC,2BAAsC;AACtC,IAAAC,gBAA6C;;;ACF7C,IAAAC,6BAAkD;AAE3C,SAAS,kBAAmB,aAA8B,qBAAsC;AACtG,iCAAAC,qBAAY,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,WAAO,cAAAC,eAAa,UAAW;AAErC,QAAM,uBAAmB,gDAAsB;AAE/C,aAAO,0BAAa,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,IAAAC,SAAuB;AACvB,kCAA2E;AAC3E,IAAAC,0BAAmC;AACnC,IAAAC,wBAAoD;AACpD,IAAAC,oBAA8B;AAC9B,IAAAC,aAA0C;AAC1C,IAAAC,eAAmB;;;ACNnB,IAAAC,SAAuB;AACvB,IAAAC,gBAA0C;AAC1C,IAAAC,2BAA0C;AAC1C,2BAAyD;AACzD,IAAAC,gBAA6D;AAC7D,IAAAC,aAA0D;AAC1D,IAAAC,gBAAiC;AACjC,IAAAC,eAAmB;;;ACPnB,IAAAC,gBAA+D;AAWxD,SAAS,oBAAqB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACD,GAAuD;AACtD,QAAM,mBAAmB,2BAAwB,cAAAC,YAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA,QAAM,WAAkC;AAAA,IACvC,IAAI;AAAA,IACJ;AAAA,IACA,OAAO,CAAC;AAAA,EACT;AAEA,oBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB,GAAG;AAAA,QACH,QAAQ;AAAA,UACP,GAAG,iBAAiB;AAAA,UACpB,OAAO;AAAA,YACN,GAAG,iBAAiB,OAAO;AAAA,YAC3B,CAAE,OAAQ,GAAG;AAAA,UACd;AAAA,UACA,OAAO,CAAE,SAAS,GAAG,iBAAiB,OAAO,KAAM;AAAA,QACpD;AAAA,MACD;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AACR;;;AC9CA,IAAAC,gBAA+D;;;ACA/D,mBAAiC;AACjC,kBAAmB;AAMZ,SAAS,wBAAyB,QAAgB,SAA0B;AAClF,SAAO;AAAA,IACN,GAAG;AAAA,IACH,OAAO,OAAO;AAAA,MACb,OAAO,QAAS,OAAO,KAAM,EAAE,IAAK,CAAE,CAAE,SAAS,KAAM,MAAO;AAAA,QAC7D;AAAA,QACA;AAAA,UACC,GAAG;AAAA,UACH,OAAO,MAAM,MAAM,OAAQ,CAAE,MAAO,MAAM,OAAQ;AAAA,QACnD;AAAA,MACD,CAAE;AAAA,IACH;AAAA,EACD;AACD;AAEO,SAAS,eAAgB,QAAgB,SAAiB,SAA0B;AAC1F,QAAM,QAAQ,OAAO,MAAO,OAAQ;AAEpC,MAAK,CAAE,OAAQ;AACd,WAAO;AAAA,EACR;AAEA,MAAK,MAAM,MAAM,SAAU,OAAQ,GAAI;AACtC,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,MACN,GAAG,OAAO;AAAA,MACV,CAAE,OAAQ,GAAG;AAAA,QACZ,GAAG;AAAA,QACH,OAAO,CAAE,GAAG,MAAM,OAAO,OAAQ;AAAA,MAClC;AAAA,IACD;AAAA,EACD;AACD;AAEO,SAAS,sBACf,QACA,SACA,aACA,WACS;AACT,MAAK,gBAAgB,WAAY;AAChC,WAAO;AAAA,EACR;AAEA,QAAM,cAAc,oBAAqB,QAAQ,aAAa,OAAQ;AACtE,SAAO,eAAgB,aAAa,WAAW,OAAQ;AACxD;AAEO,SAAS,oBAAqB,QAAgB,SAAiB,SAA0B;AAC/F,QAAM,QAAQ,OAAO,MAAO,OAAQ;AAEpC,MAAK,CAAE,OAAQ;AACd,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,MACN,GAAG,OAAO;AAAA,MACV,CAAE,OAAQ,GAAG;AAAA,QACZ,GAAG;AAAA,QACH,OAAO,MAAM,MAAM,OAAQ,CAAE,MAAO,MAAM,OAAQ;AAAA,MACnD;AAAA,IACD;AAAA,EACD;AACD;AAOO,SAAS,qBAAsB,QAAgB,kBAA2C;AAChG,MAAK,oBAAoB,OAAO,MAAO,gBAAiB,GAAI;AAC3D,WAAO,EAAE,QAAQ,SAAS,iBAAiB;AAAA,EAC5C;AAEA,MAAK,CAAE,oBAAoB,OAAO,MAAM,SAAS,GAAI;AACpD,WAAO,EAAE,QAAQ,SAAS,OAAO,MAAO,CAAE,EAAE;AAAA,EAC7C;AAEA,SAAO,YAAa,QAAQ,gBAAiB;AAC9C;AAEO,SAAS,YAAa,QAAgB,SAAkB,OAAgC;AAC9F,QAAM,aAAa,eAAW,+BAAkB,OAAQ;AACxD,QAAM,WAAW,aAAS,gBAAI,WAAW,WAAY;AAErD,SAAO;AAAA,IACN,QAAQ;AAAA,MACP,GAAG;AAAA,MACH,OAAO;AAAA,QACN,GAAG,OAAO;AAAA,QACV,CAAE,UAAW,GAAG;AAAA,UACf,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,OAAO,CAAC;AAAA,QACT;AAAA,MACD;AAAA,MACA,OAAO,CAAE,GAAG,OAAO,OAAO,UAAW;AAAA,IACtC;AAAA,IACA,SAAS;AAAA,EACV;AACD;AAEO,SAAS,qBACf,kBACA,eACmB;AACnB,QAAM,uBAAuB,cAAc,IAAK,CAAE,SAAU,KAAK,WAAY;AAE7E,QAAM,iBAAiB,OAAO;AAAA,IAC7B,OAAO,QAAS,iBAAiB,KAAM,EAAE,OAAQ,CAAE,CAAE,EAAE,IAAK,MAAO,CAAE,cAAc,SAAU,IAAK,CAAE;AAAA,EACrG;AAEA,QAAM,oBAAoB,OAAO;AAAA,IAChC,OAAO,QAAS,iBAAiB,OAAO,KAAM,EAAE;AAAA,MAC/C,CAAE,CAAE,SAAS,KAAM,MAA0C;AAAA,QAC5D;AAAA,QACA;AAAA,UACC,GAAG;AAAA,UACH,OAAO,MAAM,MAAM,OAAQ,CAAE,SAAU,CAAE,qBAAqB,SAAU,IAAK,CAAE;AAAA,QAChF;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACP,OAAO;AAAA,MACP,OAAO,iBAAiB,OAAO,MAAM,OAAQ,CAAE,YAAa,CAAE,qBAAqB,SAAU,OAAQ,CAAE;AAAA,IACxG;AAAA,EACD;AACD;AAEO,SAAS,mBAAoB,QAAgB,SAA0B;AAC7E,MAAK,OAAO,MAAM,SAAU,OAAQ,GAAI;AACvC,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,OAAO,CAAE,GAAG,OAAO,OAAO,OAAQ;AAAA,EACnC;AACD;AAEO,SAAS,YAAa,QAAgB,SAA0B;AACtE,QAAM,EAAE,CAAE,OAAQ,GAAG,SAAS,GAAG,eAAe,IAAI,OAAO;AAE3D,SAAO;AAAA,IACN,OAAO;AAAA,IACP,OAAO,OAAO,MAAM,OAAQ,CAAEC,QAAQA,QAAO,OAAQ;AAAA,EACtD;AACD;AAEO,SAAS,YAAa,QAAgB,SAAiB,UAA2B;AACxF,QAAM,QAAQ,OAAO,MAAO,OAAQ;AAEpC,MAAK,CAAE,OAAQ;AACd,WAAO;AAAA,EACR;AAEA,SAAO;AAAA,IACN,GAAG;AAAA,IACH,OAAO;AAAA,MACN,GAAG,OAAO;AAAA,MACV,CAAE,OAAQ,GAAG;AAAA,QACZ,GAAG;AAAA,QACH,OAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD;AACD;;;AD7KO,SAAS,uBAAwB,EAAE,aAAa,QAAQ,GAAgC;AAC9F,QAAM,mBAAmB,2BAAwB,cAAAC,YAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB,WAAO;AAAA,EACR;AAEA,QAAM,QAAQ,iBAAiB,OAAO,MAAO,OAAQ;AAErD,MAAK,CAAE,SAAS,MAAM,MAAM,SAAS,GAAI;AACxC,WAAO;AAAA,EACR;AAEA,QAAM,gBAAgB,YAAa,iBAAiB,QAAQ,OAAQ;AAEpE,oBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB,GAAG;AAAA,QACH,QAAQ;AAAA,MACT;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AACR;;;AErCA,6BAAoD;AACpD,IAAAC,iBAA+D;AAWxD,SAAS,sBAAuB,EAAE,aAAa,QAAQ,GAA4B;AACzF,QAAM,mBAAmB,2BAAwB,eAAAC,YAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA,QAAM,OAAO,iBAAiB,MAAO,OAAQ;AAE7C,MAAK,CAAE,MAAO;AACb;AAAA,EACD;AAEA,uBAAsB,KAAK,WAAW,KAAK,SAAS,KAAK,WAAY;AAErE,QAAM,EAAE,CAAE,OAAQ,GAAG,aAAa,GAAG,eAAe,IAAI,iBAAiB;AAEzE,QAAM,gBAAgB,wBAAyB,iBAAiB,QAAQ,OAAQ;AAEhF,qBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB,GAAG;AAAA,QACH,OAAO;AAAA,QACP,QAAQ;AAAA,MACT;AAAA,IACD,CAAE;AAAA,EACH;AACD;AAEA,SAAS,qBAAsB,WAAmB,YAAoB,aAA6B;AAClG,QAAM,gBAAY,qCAAc,SAAU;AAE1C,MAAK,CAAE,WAAY;AAClB;AAAA,EACD;AAEA,oDAAuB;AAAA,IACtB,IAAI;AAAA,IACJ,OAAO,EAAE,CAAE,UAAW,GAAG,eAAe,KAAK;AAAA,IAC7C,aAAa;AAAA,EACd,CAAE;AACH;;;ACvDA,IAAAC,iBAA+D;AAWxD,SAAS,kBAAmB,EAAE,aAAa,SAAS,cAAc,GAAmC;AAC3G,QAAM,mBAAmB,2BAAwB,eAAAC,YAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA,QAAM,QAAQ,iBAAiB,OAAO,MAAO,OAAQ;AAErD,MAAK,CAAE,OAAQ;AACd;AAAA,EACD;AAEA,qBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB,GAAG;AAAA,QACH,QAAQ;AAAA,UACP,GAAG,iBAAiB;AAAA,UACpB,OAAO;AAAA,YACN,GAAG,iBAAiB,OAAO;AAAA,YAC3B,CAAE,OAAQ,GAAG;AAAA,cACZ,GAAG;AAAA,cACH,OAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAE;AAAA,EACH;AACD;;;AC1CA,IAAAC,iBAA+D;AAUxD,SAAS,yBAA0B,EAAE,aAAa,SAAS,GAA+B;AAChG,QAAM,mBAAmB,2BAAwB,eAAAC,YAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA,qBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB,GAAG;AAAA,QACH,QAAQ;AAAA,UACP,GAAG,iBAAiB;AAAA,UACpB,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD,CAAE;AAAA,EACH;AACD;;;AC7BA,IAAAC,iBAA+D;AAaxD,SAAS,4BAA6B;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAmD;AAClD,QAAM,mBAAmB,2BAAwB,eAAAC,YAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA,QAAM,OAAO,iBAAiB,MAAO,WAAY;AAEjD,MAAK,CAAE,MAAO;AACb;AAAA,EACD;AAEA,QAAM,aAAa,KAAK;AACxB,QAAM,aAAa,WAAW;AAE9B,QAAM,cAA+B;AAAA,IACpC,GAAG;AAAA,IACH;AAAA,IACA,SAAS;AAAA,EACV;AAEA,QAAM,gBAAgB,sBAAuB,iBAAiB,QAAQ,aAAa,YAAY,UAAW;AAE1G,qBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB,GAAG;AAAA,QACH,OAAO;AAAA,UACN,GAAG,iBAAiB;AAAA,UACpB,CAAE,WAAY,GAAG;AAAA,QAClB;AAAA,QACA,QAAQ;AAAA,MACT;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AACR;;;ACzDA,IAAAC,iBAA6C;AAKtC,SAASC,qBAAqB,aAAgE;AACpG,aAAO,eAAAC,eAAa,CAAE,UAA4B;AACjD,QAAK,CAAE,aAAc;AACpB,aAAO;AAAA,IACR;AAEA,WAAO,uBAAwB,OAAO,WAAY;AAAA,EACnD,CAAE;AACH;;;ACbA,IAAAC,SAAuB;AACvB,IAAAC,gBAAyB;AACzB,mBAAsC;AACtC,IAAAC,aAAwC;AACxC,IAAAC,eAAmB;;;ACJnB,YAAuB;AACvB,6BAA+B;AAC/B,uBAA8B;AAC9B,gBAA+D;AAC/D,IAAAC,eAAmB;AAEZ,IAAM,wBAAwB,CAAE;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACD,MAIO;AACN,MAAK,CAAE,UAAU,WAAW,CAAE,wBAAyB;AACtD,WAAO;AAAA,EACR;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,UAAW,UAAU;AAAA,MACrB,MAAO;AAAA,MACP,cAAe;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA,iBAAkB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA;AAAA;AAAA,IAEA,oCAAC,iBAAI,IAAK,EAAE,OAAO,QAAQ,KAC1B,oCAAC,kCAAc,WAAQ,iBAAI,2BAA2B,WAAY,GAAI,SAAoB,GAC1F;AAAA,MAAC;AAAA;AAAA,QACA,IAAK,EAAE,OAAO,SAAS,QAAQ,QAAQ;AAAA,QACvC,KAAM;AAAA,QACN,KAAM;AAAA;AAAA,IACP,GACA,oCAAC,6CACA,oCAAC,mBAAM,KAAM,GAAI,IAAK,EAAE,GAAG,EAAE,KAC5B,oCAAC,wBAAW,SAAU,eACnB,iBAAI,uCAAuC,WAAY,CAC1D,GACA,oCAAC,wBAAW,SAAU,eACnB;AAAA,MACD;AAAA,MACA;AAAA,IACD,CACD,GACA,oCAAC,wBAAW,SAAU,eACnB;AAAA,MACD;AAAA,MACA;AAAA,IACD,CACD,GACA,oCAAC,mBAAM,WAAU,OAAM,YAAW,UAAS,gBAAe,cACzD,oCAAC,oBAAO,MAAK,UAAS,SAAQ,aAAY,SAAU,eACjD,iBAAI,UAAU,WAAY,CAC7B,CACD,CACD,CACD,CACD;AAAA,EACD;AAEF;;;AD3DO,SAAS,qBAAsB,EAAE,gBAAgB,GAA+D;AACtH,QAAM,CAAE,QAAQ,SAAU,QAAI,wBAAU,KAAM;AAC9C,SACC,4DACC;AAAA,IAAC;AAAA;AAAA,MACA,YAAW;AAAA,MACX,gBAAe;AAAA,MACf,QAAO;AAAA,MACP,OAAM;AAAA,MACN,IAAK,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI;AAAA,MAChC,KAAM;AAAA;AAAA,IAEN,qCAAC,sCAAsB,UAAS,SAAQ;AAAA,IAExC,qCAAC,yBAAW,OAAM,UAAS,SAAQ,mBAChC,iBAAI,2BAA2B,WAAY,CAC9C;AAAA,IAEA,qCAAC,yBAAW,OAAM,UAAS,SAAQ,iBAChC,iBAAI,wDAAwD,WAAY,CAC3E;AAAA,IAEA,qCAAC,yBAAW,OAAM,UAAS,SAAQ,iBAChC,iBAAI,oEAAoE,WAAY,CACvF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACA,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,IAAK,EAAE,oBAAoB,YAAY;AAAA,QACvC,SAAU,MAAM,UAAW,IAAK;AAAA;AAAA,UAE9B,iBAAI,cAAc,WAAY;AAAA,IACjC;AAAA,EACD,GACA;AAAA,IAAC;AAAA;AAAA,MACA,WAAY;AAAA,MACZ,wBAAyB;AAAA,MACzB,SAAU,MAAM,UAAW,KAAM;AAAA;AAAA,EAClC,CACD;AAEF;;;AElDA,IAAAC,SAAuB;AACvB,IAAAC,oBAA4C;AAC5C,IAAAC,gBAAiC;AACjC,IAAAC,aAWO;AACP,IAAAC,eAAmB;;;ACfnB,IAAAC,SAAuB;AACvB,IAAAC,0BAAgC;AAChC,IAAAC,gBAAsB;AACtB,IAAAC,aAA8F;;;ACH9F,IAAAC,SAAuB;AACvB,IAAAC,gBAAyB;AACzB,IAAAC,oBAAmC;AACnC,IAAAC,aAA4F;AAC5F,IAAAC,eAAmB;AAInB,IAAM,OAAO;AAEb,IAAM,gBAAgB,EAAE,OAAO,MAAM,WAAO,iBAAI,WAAW,WAAY,EAAE;AASlE,SAAS,oBAAqB,EAAE,UAAU,QAAQ,cAAc,GAAG,GAAW;AACpF,QAAM,CAAE,WAAW,YAAa,QAAI,wBAA2B,cAAc,SAAS,IAAK;AAC3F,QAAM,CAAE,OAAO,QAAS,QAAI,wBAA2B,cAAc,WAAW,SAAU,CAAE,GAAG,SAAS,IAAK;AAE7G,QAAM,WAAO,iBAAI,QAAQ,WAAY;AACrC,QAAM,gBAAY,iBAAI,cAAc,WAAY;AAEhD,QAAM,WAAW,iBAAiB;AAElC,QAAM,QAAQ,eAAW,iBAAI,uBAAuB,WAAY,QAAI,iBAAI,mBAAmB,WAAY;AACvG,QAAM,WAAW,eAAW,iBAAI,UAAU,WAAY,QAAI,iBAAI,UAAU,WAAY;AAEpF,SACC,qCAAC,0BAAK,UAAW,MAAM,SAAU,EAAE,OAAO,aAAa,IAAI,MAAM,CAAE,KAClE,qCAAC,oBAAM,YAAW,SAAQ,IAAK,EAAE,OAAO,SAAS,GAAG,GAAG,KACtD;AAAA,IAAC;AAAA;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,qCAAC,yBAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,gBAAgB,YAAY,OAAO,YAAY,EAAE,KAC1F,KACH;AAAA,EACD,GACA,qCAAC,mBAAK,WAAS,MAAC,KAAM,MAAO,YAAW,SAAQ,IAAK,KAAM,IAAK,OAC/D,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf,qCAAC,wBAAU,MAAK,UAAS,IAAM,CAChC,GACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,MAAO;AAAA,MACP,WAAS;AAAA,MACT,iBAAc,iBAAI,eAAe,WAAY;AAAA,MAC7C,OAAQ,aAAa;AAAA,MACrB,UAAW,CAAE,MAA8C,aAAc,EAAE,OAAO,KAAM;AAAA;AAAA,EACzF,CACD,CACD,GACA,qCAAC,mBAAK,WAAS,MAAC,KAAM,MAAO,YAAW,SAAQ,IAAK,KAAM,IAAK,OAC/D,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf,qCAAC,wBAAU,MAAK,UAAS,SAAW,CACrC,GACA,qCAAC,mBAAK,MAAI,MAAC,IAAK,MACf;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,MAAO;AAAA,MACP,WAAS;AAAA,MACT,OAAQ,SAAS;AAAA,MACjB,UAAW,CAAE,MACZ,SAAU,EAAE,OAAO,KAAuB;AAAA,MAE3C,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,qCAAC,kCAAa,KAAM,MAAM,OAAU,GAAG,OAAQ,OAAQ,MAAM,SAAS,MACnE,UACH,CACC;AAAA,EACH,CACD,CACD,GACA,qCAAC,oBAAM,WAAU,OAAM,gBAAe,YAAW,WAAU,OAAM,IAAK,KAAM,IAAK,GAAI,IAAK,OACzF,qCAAC,qBAAO,MAAK,UAAS,UAAW,CAAE,WAAY,SAAQ,aAAY,OAAM,WAAU,MAAK,WACrF,QACH,CACD,CACD,CACD;AAEF;;;ACpGA,IAAAC,SAAuB;AACvB,IAAAC,gBAAiC;AACjC,IAAAC,aAQO;AAEA,IAAM,mBAAmB,CAAsB,UACrD,qCAAC,uCAAyB,cAAY,MAAC,SAAQ,UAAS,sBAAuB,EAAE,SAAS,IAAI,GAAM,GAAG,OAAQ;AAOzG,IAAM,kBAAkB,CAAE,EAAE,kBAAkB,GAAG,MAAM,MAC7D;AAAA,EAAC;AAAA;AAAA,IACE,GAAG;AAAA,IACL,MAAK;AAAA,IACL,WAAY,oBAAqB,oBAAoB,EAAG,GAAG,KAAK;AAAA,IAChE,cAAW;AAAA;AAAA,EAEX,qCAAC,kCAAiB,UAAS,QAAO;AACnC;AAeM,IAAM,eAAe,CAAE,EAAE,UAAU,IAAAC,IAAG,MAC5C;AAAA,EAAC;AAAA;AAAA,IACA,IAAKA;AAAA,IACL,QAAS,CAAE;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,MACC;AAAA,MAAC;AAAA;AAAA,QACE,GAAG;AAAA,QACL,OAAQ;AAAA,QACR,WAAU;AAAA,QACV,MAAK;AAAA,QACL,IAAK;AAAA,UACJ,iBAAiB,gBAAgB,qBAAqB;AAAA,QACvD;AAAA;AAAA,MAEE,SAAU;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD,CAAE;AAAA,MACA,sBAAsB,qCAAC,yBAAsB,OAAQ,qBAAsB;AAAA,IAC9E;AAAA;AAEF;AAGD,IAAM,4BAAwB,mBAAQ,KAAM,EAAG,CAAE,EAAE,MAAM,OAAS;AAAA,EACjE,UAAU;AAAA,EACV,MAAM;AAAA,EACN,KAAK;AAAA,EACL,WAAW,eAAgB,MAAM,QAAS,GAAI,CAAE;AAAA,EAChD,OAAO,MAAM,QAAQ,OAAO;AAAA,EAC5B,QAAQ;AACT,EAAI;AAEJ,IAAM,4BAAwB,mBAAQ,cAAI;AAAA;AAAA;AAAA,qBAGpB,CAAE,EAAE,MAAM,MAAO,MAAM,QAAQ,KAAK,OAAQ;AAAA;;;AFxE3D,SAAS,aAAc;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAuB;AACtB,QAAM,mBAAe,0BAAe;AAAA,IACnC,SAAS;AAAA,EACV,CAAE;AACF,QAAM,OAAO,eAAgB,IAAK;AAClC,QAAM,mBAAe,wBAAa,YAAa;AAE/C,QAAM,eAAe,CAAE,SAAmD;AACzE,aAAU,IAAK;AACf,iBAAa,MAAM;AAAA,EACpB;AAEA,QAAM,eAAe,CAAE,UAA6B;AACnD,UAAM,gBAAgB;AACtB,aAAU,KAAK,WAAY;AAAA,EAC5B;AAEA,SACC,4DACC;AAAA,IAAC;AAAA;AAAA,MACE,OAAG,wBAAa,YAAa;AAAA,MAC/B,IAAK;AAAA,QACJ,UAAU;AAAA,QACV,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,WAAW;AAAA,QACX,cAAc;AAAA,QACd,QAAQ;AAAA,QACR,aAAa;AAAA,QACb,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,SAAS,oBAAoB,MAAM;AAAA,QACnC,QAAQ;AAAA,QACR,WAAW;AAAA,UACV,iBAAiB;AAAA,QAClB;AAAA,QACA,6BAA6B;AAAA,UAC5B,YAAY;AAAA,QACb;AAAA,QACA,uBAAuB;AAAA,UACtB,YAAY;AAAA,QACb;AAAA,QACA,0BAA0B;AAAA,UACzB,YAAY;AAAA,QACb;AAAA,QACA,oBAAoB;AAAA,UACnB,YAAY;AAAA,QACb;AAAA,MACD;AAAA;AAAA,IAEA,qCAAC,mBAAkB,GAAG,sBAAuB;AAAA,IAC7C;AAAA,MAAC;AAAA;AAAA,QACA,IAAK,EAAE,SAAS,QAAQ,YAAY,UAAU,OAAO,gBAAgB,UAAU,IAAI,SAAS,KAAK;AAAA;AAAA,MAEjG,qCAAC,OAAE,WAAY,MAAO;AAAA,IACvB;AAAA,IACA,qCAAC,yBAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,gBAAgB,UAAU,GAAG,UAAU,GAAG,KACnF,KAAK,KACR;AAAA,IACA,qCAAC,yBAAW,MAAK,QAAO,SAAU,cAAe,cAAW,mBAAkB,IAAK,EAAE,GAAG,KAAK,KAC5F,qCAAC,uBAAM,UAAS,QAAO,CACxB;AAAA,EACD,GAEA;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACL,cAAe,EAAE,UAAU,UAAU,YAAY,OAAO;AAAA,MACxD,iBAAkB,EAAE,UAAU,OAAO,YAAY,OAAO;AAAA,MACxD,YAAa,EAAE,IAAI,EAAE,OAAO,aAAa,UAAU,sBAAsB,EAAE,MAAM,EAAE;AAAA;AAAA,IAEnF;AAAA,MAAC;AAAA;AAAA,QACA,UAAW;AAAA,QACX,cAAe;AAAA,QACf;AAAA,QACA,IAAK,EAAE,OAAO,OAAO;AAAA;AAAA,IACtB;AAAA,EACD,CACD;AAEF;AAEA,SAAS,eAAgB,MAAgC;AACxD,QAAM,SAAS,KAAK,WAAW,WAAW,KAAK,aAAa,KAAK;AAEjE,QAAM,mBAAe,yCAAgB;AAErC,MAAK,CAAE,cAAe;AACrB,WAAO;AAAA,EACR;AAEA,QAAM,eAAe,aAAc,MAAO;AAE1C,SAAO,cAAc,QAAQ;AAC9B;;;ADnFO,SAAS,gBAAiB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAW;AACV,QAAM,aAAa,MAAM,MACvB,IAAK,CAAE,WAAY,MAAO,MAAO,CAAE,EACnC,OAAQ,CAAE,SAAmC,QAAS,IAAK,CAAE;AAE/D,QAAM,iBAAa,0BAAe;AAAA,IACjC,SAAS;AAAA,IACT,kBAAkB;AAAA,EACnB,CAAE;AAEF,QAAM,EAAE,aAAa,WAAW,OAAO,kBAAkB,mBAAmB,eAAe,IAAI;AAE/F,QAAM,gBAAgB,MAAM,MAAM,SAAS;AAC3C,QAAM,qBAAqB,aAAa,mBAAmB,MAAM;AAEjE,QAAM,oBAAoB,MAAM;AAC/B,eAAW,MAAM;AACjB,sBAAmB,MAAM,EAAG;AAAA,EAC7B;AAEA,QAAM,oBAAoB,MAAM;AAC/B,eAAW,MAAM;AACjB,kBAAe,MAAM,EAAG;AAAA,EACzB;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,IAAK;AAAA,QACJ,SAAS,oBAAoB,MAAM;AAAA,MACpC;AAAA;AAAA,IAEA,qCAAC,oBAAM,KAAM,KACZ;AAAA,MAAC;AAAA;AAAA,QACA,WAAU;AAAA,QACV,IAAK;AAAA,UACJ,UAAU;AAAA,UACV,mCAAmC;AAAA,YAClC,YAAY;AAAA,UACb;AAAA,UACA,6BAA6B;AAAA,YAC5B,YAAY;AAAA,UACb;AAAA,UACA,uBAAuB;AAAA,YACtB,YAAY;AAAA,UACb;AAAA,UACA,iBAAiB;AAAA,YAChB,YAAY;AAAA,UACb;AAAA,QACD;AAAA;AAAA,MAEA,qCAAC,mBAAgB,kBAAiB,0BAA2B,GAAG,sBAAuB;AAAA,MACvF,qCAAC,oBAAM,WAAU,OAAM,YAAW,UAAS,gBAAe,iBAAgB,KAAM,KAC7E,qBACD;AAAA,QAAC;AAAA;AAAA,UACA,IAAK;AAAA,YACJ,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,QAAQ;AAAA,YACR,aAAa;AAAA,YACb,cAAc;AAAA,YACd,IAAI;AAAA,UACL;AAAA;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACA,KAAM;AAAA,YACN,IAAK;AAAA,YACL,SAAQ;AAAA,YACR,OAAQ,SAAS;AAAA,YACjB,IAAK,EAAE,OAAO,gBAAgB,YAAY,KAAK,YAAY,KAAK;AAAA,YAC9D,GAAG,iBAAiB;AAAA;AAAA,QACvB;AAAA,MACD,IAEA;AAAA,QAAC;AAAA;AAAA,UACA,SAAQ;AAAA,UACR,IAAK,EAAE,OAAO,gBAAgB,YAAY,KAAK,YAAY,KAAK;AAAA;AAAA,QAE9D,MAAM;AAAA,MACT,GAED;AAAA,QAAC;AAAA;AAAA,UACA,WAAU;AAAA,UACV,MAAK;AAAA,UACL,IAAK,EAAE,GAAG,MAAM,YAAY,qBAAqB,YAAY,OAAU;AAAA,UACvE,kBAAa,iBAAI,iBAAiB,WAAY;AAAA,UAC5C,OAAG,wBAAa,UAAW;AAAA;AAAA,QAE7B,qCAAC,kCAAiB,UAAS,QAAO;AAAA,MACnC,CACD;AAAA,IACD,GACA,qCAAC,mBAAK,IAAK,EAAE,GAAG,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAE,KACnE,qCAAC,oBAAiB,OAAQ,MAAM,OAAQ,UAAW,kBAChD,WAAW,IAAK,CAAE,SACnB,qCAAC,gBAAa,KAAM,KAAK,aAAc,IAAK,KAAK,eAC9C,CAAE,EAAE,cAAc,cAAc,mBAAmB,sBAAsB,MAC1E;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,sBAAuB,EAAE,GAAG,cAAc,OAAO,aAAa;AAAA,QAC9D,mBAAoB;AAAA,QACpB,QAAS;AAAA,QACT,UAAW;AAAA,QACX,UAAW,CAAE,SAAU,iBAAkB,KAAK,aAAa,IAAK;AAAA;AAAA,IACjE,CAEF,CACC,CACH,CACD,CACD;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACE,OAAG,qBAAU,UAAW;AAAA,QAC1B,cAAe,EAAE,UAAU,UAAU,YAAY,QAAQ;AAAA,QACzD,iBAAkB,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA;AAAA,MAEzD,qCAAC,kCAAa,IAAK,EAAE,UAAU,QAAQ,GAAI,SAAU,qBACpD,qCAAC,yBAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,eAAe,SACxD,iBAAI,UAAU,WAAY,CAC7B,CACD;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACA,OACC,oBAAgB,iBAAI,wDAAwD,WAAY,IAAI;AAAA,UAE7F,WAAU;AAAA;AAAA,QAEV,qCAAC,cACA,qCAAC,kCAAa,SAAU,mBAAoB,UAAW,iBACtD;AAAA,UAAC;AAAA;AAAA,YACA,SAAQ;AAAA,YACR,IAAK,EAAE,OAAO,gBAAgB,kBAAkB,cAAc;AAAA;AAAA,cAE5D,iBAAI,UAAU,WAAY;AAAA,QAC7B,CACD,CACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AAEF;;;AI9LA,IAAAC,gBAAyB;AAEzB,IAAAC,2BAA0C;AAC1C,IAAAC,oBAA4B;AAC5B,IAAAC,eAAmB;;;ACJnB,IAAAC,iBAA+D;AAYxD,SAAS,uBAAwB,EAAE,aAAa,SAAS,MAAM,GAAgC;AACrG,QAAM,mBAAmB,2BAAwB,eAAAC,YAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB,WAAO;AAAA,EACR;AAEA,QAAM,QAAQ,iBAAiB,OAAO,MAAO,OAAQ;AAErD,MAAK,CAAE,OAAQ;AACd,WAAO;AAAA,EACR;AAEA,QAAM,gBAAgB,YAAa,iBAAiB,QAAQ,SAAS,KAAM;AAE3E,qBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB,GAAG;AAAA,QACH,QAAQ;AAAA,MACT;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AACR;;;ACtCA,IAAAC,eAAmB;AAIZ,IAAM,iBAAiB;AAAA,EAC7B,gBAAY,iBAAI,0BAA0B,WAAY;AAAA,EACtD,oBAAgB,iBAAI,6BAA6B,WAAY;AAC9D;AAEO,SAAS,mBAAoB,OAAe,gBAAkE;AACpH,QAAM,eAAe,MAAM,KAAK;AAEhC,MAAK,CAAE,cAAe;AACrB,WAAO,eAAe;AAAA,EACvB;AAEA,QAAM,cAAc,OAAO,OAAQ,cAAe,EAAE,KAAM,CAAE,UAAW,MAAM,UAAU,YAAa;AAEpG,MAAK,aAAc;AAClB,WAAO,eAAe;AAAA,EACvB;AAEA,SAAO;AACR;;;AFHO,SAAS,yBAAkD;AACjE,QAAM,CAAE,gBAAgB,iBAAkB,QAAI,wBAA2B,IAAK;AAC9E,QAAM,qBAAqB,sBAAsB;AACjD,QAAM,mBAAmBC,qBAAqB,kBAAmB;AAEjE,QAAM,kBAAkB,kBAAkB,QAAQ,SAAS,CAAC;AAC5D,QAAM,eAAe,iBAAiB,gBAAiB,cAAe,IAAI;AAE1E,QAAM,gBAAgB,CAAE,aAAqC;AAC5D,UAAM,cAAc,OAAO;AAAA,MAC1B,OAAO,QAAS,eAAgB,EAAE,OAAQ,CAAE,CAAEC,GAAG,MAAOA,QAAO,cAAe;AAAA,IAC/E;AAEA,WAAO,mBAAoB,UAAU,WAAY,KAAK;AAAA,EACvD;AAEA,QAAM,eAAe,CAAE,aAAsB;AAC5C,QAAK,CAAE,kBAAkB,CAAE,oBAAqB;AAC/C,YAAM,IAAI,UAAO,iBAAI,uCAAuC,WAAY,CAAE;AAAA,IAC3E;AAEA,2BAAwB;AAAA,MACvB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,OAAO;AAAA,IACR,CAAE;AAEF,4DAA2B,IAAK;AAAA,EACjC;AAEA,QAAM;AAAA,IACL,KAAK;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU;AAAA,EACX,QAAI,+BAAa;AAAA,IAChB,OAAO,cAAc,SAAS;AAAA,IAC9B,UAAU;AAAA,IACV,YAAY;AAAA,EACb,CAAE;AAEF,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,mBAAmB,CAAE,YAAa;AACjC,wBAAmB,OAAQ;AAC3B,mBAAa;AAAA,IACd;AAAA,IACA;AAAA,EACD;AACD;;;AGvEA,IAAM,0BAA0B;AAEzB,SAAS,oBAAqB,QAA0C;AAC9E,QAAM,iBAAiB,IAAI,IAAK,OAAO,IAAK,CAAE,UAAW,MAAM,KAAM,CAAE;AAEvE,MAAK,CAAE,eAAe,IAAK,uBAAwB,GAAI;AACtD,WAAO;AAAA,EACR;AAEA,MAAI,QAAQ;AACZ,MAAI,WAAW,GAAI,uBAAwB,IAAK,KAAM;AAEtD,SAAQ,eAAe,IAAK,QAAS,GAAI;AACxC;AACA,eAAW,GAAI,uBAAwB,IAAK,KAAM;AAAA,EACnD;AAEA,SAAO;AACR;;;AlBOO,SAAS,gCAAiC,EAAE,QAAQ,GAAW;AACrE,QAAM,qBAAqB,sBAAsB;AACjD,QAAM,mBAAmBC,qBAAqB,kBAAmB;AACjE,QAAM,CAAE,eAAe,gBAAiB,QAAI,wBAAU,KAAM;AAC5D,QAAM,sBAAkB,sBAA6B,IAAK;AAC1D,QAAM,qBAAqB,uBAAuB;AAElD,QAAM,aAAS,uBAAS,MAAM;AAC7B,QAAK,CAAE,kBAAmB;AACzB,aAAO,CAAC;AAAA,IACT;AAEA,WAAO,iBAAiB,OAAO,MAC7B,IAAK,CAAE,YAAa,iBAAiB,OAAO,MAAO,OAAQ,KAAK,IAAK,EACrE,OAAQ,OAAQ;AAAA,EACnB,GAAG,CAAE,gBAAiB,CAAE;AAExB,QAAM,yBAAqB;AAAA,IAC1B,MAAM,OAAO,IAAK,CAAE,WAAa,EAAE,OAAO,MAAM,IAAI,OAAO,MAAM,MAAM,EAAI;AAAA,IAC3E,CAAE,MAAO;AAAA,EACV;AAEA,MAAK,CAAE,sBAAsB,CAAE,kBAAmB;AACjD,WAAO;AAAA,EACR;AAEA,QAAM,YAAY,OAAO,SAAS;AAClC,QAAM,iBAAiB,CAAE,aAAa,CAAE;AACxC,QAAM,WAAW,iBAAiB,OAAO;AAEzC,QAAM,sBAAsB,MAAM;AACjC,QAAK,eAAgB;AACpB;AAAA,IACD;AAEA,UAAM,iBAAa,gCAAkB,OAAQ;AAC7C,UAAM,WAAW,oBAAqB,MAAO;AAE7C,wBAAqB,EAAE,aAAa,oBAAoB,SAAS,YAAY,OAAO,SAAS,CAAE;AAC/F,4DAA2B,IAAK;AAChC,qBAAkB,KAAM;AAExB,uBAAmB,kBAAmB,UAAW;AAAA,EAClD;AAEA,QAAM,sBAAsB,CAAE,aAAwB;AACrD,6BAA0B,EAAE,aAAa,oBAAoB,SAAS,CAAE;AACxE,4DAA2B,IAAK;AAAA,EACjC;AAEA,QAAM,qBAAqB,CAAE,SAAiB,kBAA6B;AAC1E,sBAAmB,EAAE,aAAa,oBAAoB,SAAS,cAAc,CAAE;AAC/E,4DAA2B,IAAK;AAAA,EACjC;AAEA,QAAM,uBAAuB,CAAE,YAAqB;AACnD,0BAAuB,EAAE,aAAa,oBAAoB,QAAQ,CAAE;AACpE,4DAA2B,IAAK;AAAA,EACjC;AAEA,QAAM,uBAAuB,CAAE,aAAqB,SAAmD;AACtG,gCAA6B;AAAA,MAC5B,aAAa;AAAA,MACb;AAAA,MACA,OAAO,KAAK;AAAA,MACZ,SAAS,KAAK;AAAA,IACf,CAAE;AACF,4DAA2B,IAAK;AAAA,EACjC;AAEA,QAAM,oBAAoB,CAAE,YAAqB;AAChD,2BAAwB,EAAE,aAAa,oBAAoB,QAAQ,CAAE;AACrE,4DAA2B,IAAK;AAAA,EACjC;AAEA,SACC,4DACC,qCAAC,oCAAY,IAAK,EAAE,gBAAgB,SAAS,IAAI,KAAK,IAAI,GAAG,IAAI,EAAE,KAClE,qCAAC,oBAAM,WAAU,OAAM,YAAW,UAAS,KAAM,KAAM,UAAW,KACjE,qCAAC,uCAAsB,UAAS,QAAO,GACvC,qCAAC,yCAAiB,SAAQ,mBACvB,iBAAI,wBAAwB,WAAY,CAC3C,CACD,GAEE,CAAE,kBACH,qCAAC,sBAAQ,WAAQ,iBAAI,iBAAiB,WAAY,KACjD;AAAA,IAAC;AAAA;AAAA,MACA,MAAK;AAAA,MACL,kBAAa,iBAAI,iBAAiB,WAAY;AAAA,MAC9C,SAAU;AAAA;AAAA,IAEV,qCAAC,gCAAe,UAAS,QAAO;AAAA,EACjC,CACD,GAGD,qCAAC,sBAAQ,WAAQ,iBAAI,eAAe,WAAY,KAC/C;AAAA,IAAC;AAAA;AAAA,MACA,KAAM;AAAA,MACN,MAAK;AAAA,MACL,kBAAa,iBAAI,eAAe,WAAY;AAAA,MAC5C,SAAU;AAAA;AAAA,IAEV,qCAAC,uBAAM,UAAS,QAAO;AAAA,EACxB,CACD,CACD,GAEA,qCAAC,wBAAQ,GAET,qCAAC,sCACE,iBACD,qCAAC,wBAAqB,iBAAoC,IAE1D,qCAAC,mBAAK,IAAK,EAAE,GAAG,GAAG,SAAS,QAAQ,eAAe,UAAU,KAAK,EAAE,KACnE,qCAAC,oBAAiB,OAAQ,UAAW,UAAW,uBAC7C,OAAO,IAAK,CAAE,UACf,qCAAC,gBAAa,KAAM,MAAM,IAAK,IAAK,MAAM,MACvC,CAAE,EAAE,cAAc,cAAc,kBAAkB,MACnD;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA,OAAQ,iBAAiB;AAAA,MACzB,WAAY;AAAA,MACZ,iBAAkB,iBAAiB,OAAO;AAAA,MAC1C,sBAAuB,EAAE,GAAG,cAAc,OAAO,aAAa;AAAA,MAC9D;AAAA,MACA;AAAA,MACA,gBAAiB,CAAE,aAAc,mBAAoB,MAAM,IAAI,QAAS;AAAA,MACxE,kBAAmB;AAAA,MACnB,kBAAmB;AAAA,MACnB,oBAAqB;AAAA,MACrB,eAAgB;AAAA;AAAA,EACjB,CAEF,CACC,CACH,CACD,CAEF,CACD;AAEF;;;ADhKA,IAAM,KAAK;AAEJ,IAAM,EAAE,OAAO,gBAAgB,QAAI,sBAAAC,eAAa;AAAA,EACtD;AAAA,EACA,WAAW;AACZ,CAAE;AAEF,SAAS,2BAA2B;AACnC,QAAM,EAAE,SAAS,YAAY,QAAI,4CAAmB;AACpD,QAAM,EAAE,OAAO,WAAW,IAAI,gBAAgB;AAC9C,QAAM,EAAE,MAAM,iBAAiB,QAAI,4BAAAC,iBAAuB;AAE1D,MAAK,CAAE,WAAW,CAAE,aAAc;AACjC,WAAO;AAAA,EACR;AAEA,SACC,qCAAC,uCACA,qCAAC,4BAAc,UAAW,qCAAC,2BAAsB,KAChD,qCAAC,+CAAgB,SAAoB,eACpC,qCAAC,mCACA;AAAA,IAAC;AAAA;AAAA,MACA,SAAU,MAAM;AACf,mBAAW;AACX,yBAAiB;AAAA,MAClB;AAAA;AAAA,EACD,CACD,CACD,CACD,CACD;AAEF;AAEA,IAAM,wBAAwB,MAC7B,qCAAC,kBAAI,MAAK,SAAQ,IAAK,EAAE,WAAW,QAAQ,GAAG,EAAE,KAChD,qCAAC,oBAAM,UAAS,SAAQ,IAAK,EAAE,IAAI,GAAG,UAAU,KAAK,WAAW,SAAS,KACxE,qCAAC,oBAAS,iBAAI,wBAAwB,WAAY,CAAG,CACtD,CACD;;;AoBjDD,IAAAC,SAAuB;AACvB,IAAAC,gBAAkC;AAClC,IAAAC,gBAAsC;AACtC,IAAAC,aAA4D;AAC5D,IAAAC,gBAAmB;AAEZ,IAAM,kBAAwB;AAAA,EACpC,CAAE,EAAE,gBAAgB,QAAQ,GAAG,QAAS;AACvC,UAAM,YAAY,YAAa,cAAe;AAE9C,UAAM,kBAAkB,cAAc,KAAK,mBAAmB;AAE9D,WACC;AAAA,MAAC;AAAA;AAAA,QACA;AAAA,QACA,OAAM;AAAA,QACN,KAAM;AAAA,QACN,WAAY,mBAAmB;AAAA,QAC/B,SAAU;AAAA,QACV,cAAe,EAAE,UAAU,OAAO,YAAY,QAAQ;AAAA,QACtD,cACC,qCAAC,kBAAI,IAAK,EAAE,WAAW,CAAE,kBAAkB,GAAI,OAAQ,oBAAoB,OAAO,KAC/E,cACH;AAAA;AAAA,MAGD;AAAA,QAAC;AAAA;AAAA,UACA,OAAM;AAAA,UACN,MAAK;AAAA,UACL;AAAA,UACA,kBAAa,kBAAI,kBAAkB,WAAY;AAAA;AAAA,QAE/C,qCAAC,uCAAsB,UAAS,QAAO;AAAA,MACxC;AAAA,IACD;AAAA,EAEF;AACD;AAEA,IAAM,kBAAc,mBAAQ,kBAAO,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,UAAM,sBAAa,KAAM;AAC/B,+BAAW,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;;;AvBpDhB,IAAM,cAAc;AAEb,IAAM,uBAAuB,MAAM;AACzC,QAAM,qBAAqB,sBAAsB;AACjD,QAAM,mBAAmBC,qBAAqB,kBAAmB;AACjE,QAAM,SAAS,gBAAgB;AAC/B,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,CAAE,qBAAqB,eAAgB,QAAI,iDAAsB,WAAY;AACnF,QAAM,CAAE,wBAAwB,yBAA0B,IAAU,iBAAU,CAAE,mBAAoB;AAEpG,QAAM,EAAE,MAAM,oBAAoB,IAAI,gBAAgB;AAEtD,QAAM,iBAAiB,mBAAmB,OAAO,KAAM,iBAAiB,KAAM,EAAE,SAAS;AACzF,QAAM,YAAkB,eAA0B,IAAK;AAEvD,MAAK,CAAE,oBAAqB;AAC3B,WAAO;AAAA,EACR;AAEA,QAAM,0BAA0B,MAAM;AACrC,oBAAgB;AAChB,8BAA2B,KAAM;AAAA,EAClC;AAEA,SACC,sCAAC,uBACA;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,sCAAC,qBAAM,WAAU,OAAM,YAAW,YACjC,sCAAC,uBAAQ,WAAQ,kBAAI,QAAQ,WAAY,KACxC,sCAAC,0BAAW,MAAK,QAAO,SAAU,QAAS,kBAAa,kBAAI,QAAQ,WAAY,KAC/E,sCAAC,+BAAc,UAAS,QAAO,CAChC,CACD,GACA,sCAAC,qBAAM,WAAU,OAAM,YAAW,UAAS,KAAM,OAChD,sCAAC,sCAAqB,UAAS,QAAO,QAAO,gBAAe,GAC5D,sCAAC,0BAAW,SAAQ,WAAU,IAAK,EAAE,YAAY,IAAI,KAClD,aACH,CACD,CACD;AAAA,IACA,sCAAC,mBAAgB,gBAAkC,KAAM,WAAY,SAAU,qBAAsB;AAAA,EACtG,GACA,sCAAC,yBAAQ,GACT;AAAA,IAAC;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAU;AAAA;AAAA,EACX,CACD;AAEF;AAEA,SAAS,mBAAmB;AAC3B,QAAM,uBAAmB,gDAAsB;AAC/C,QAAM,kBAAkB,iBAAiB,WAAW;AAEpD,SAAO,iBAAiB,WAAW,UAAU,IAAK,YAAa,KAAK;AACrE;;;AwB5EA,IAAAC,UAAuB;AACvB,IAAAC,oBAA8B;;;ACD9B,IAAAC,UAAuB;AACvB,IAAAC,gBAA2B;AAC3B,IAAAC,cAAsD;AACtD,IAAAC,gBAAmB;;;ACHnB,IAAAC,UAAuB;AACvB,IAAAC,gBAA0C;AAC1C,IAAAC,gBAA0D;AAO1D,IAAM,oBAAgB,6BAAgD,MAAU;AAEzE,IAAM,iBAAiB,CAAE;AAAA,EAC/B;AAAA,EACA;AACD,MAGO;AACN,QAAM,EAAE,gBAAgB,cAAc,WAAW,QAAI,8BAAgB,EAAE,gBAAgB,CAAE;AAEzF,QAAM,cAAc,MAAM;AACzB,iBAAc,EAAG;AAAA,EAClB;AAEA,SACC,sCAAC,cAAc,UAAd,EAAuB,OAAQ,EAAE,cAAc,aAAa,aAAa,gBAAgB,WAAW,KAClG,QACH;AAEF;AAEO,IAAM,YAAY,MAAM;AAC9B,QAAM,cAAU,0BAAY,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,sCAAC,qBAAM,WAAU,OAAM,KAAM,KAAM,IAAK,EAAE,OAAO,QAAQ,IAAI,GAAG,IAAI,IAAI,KACvE,sCAAC,mBAAI,IAAK,EAAE,UAAU,EAAE,KACvB;AAAA,IAAC;AAAA;AAAA,MACA,MAAO;AAAA,MACP,WAAS;AAAA,MACT,MAAO;AAAA,MACP,OAAQ;AAAA,MACR,iBAAc,kBAAI,UAAU,WAAY;AAAA,MACxC,UAAW,CAAE,MAA8C,aAAc,EAAE,OAAO,KAAM;AAAA,MACxF,YAAa;AAAA,QACZ,gBACC,sCAAC,8BAAe,UAAS,WACxB,sCAAC,4BAAW,UAAW,QAAS,CACjC;AAAA,MAEF;AAAA;AAAA,EACD,CACD,CACD;AAEF;;;AE/BA,IAAAC,UAAuB;AACvB,IAAAC,iBAAwC;AACxC,IAAAC,cAAkE;AAClE,IAAAC,gBAAmB;;;ACHnB,IAAAC,iBAA6C;AAItC,IAAM,gBAAgB,MAAM;AAClC,QAAM,iBAAa,eAAAC,eAAa,gBAAiB;AACjD,QAAM,gBAAY,eAAAA,eAAa,mBAAoB;AAEnD,SAAO,EAAE,YAAY,UAAU;AAChC;;;ACTA,IAAAC,UAAuB;AACvB,IAAAC,wBAAmE;AACnE,IAAAC,0BAAwE;AACxE,IAAAC,oBAAkD;AAClD,IAAAC,gBAAiD;AACjD,IAAAC,cAWO;AACP,IAAAC,gBAAmB;;;ACjBnB,IAAAC,2BAA0C;AAC1C,IAAAC,iBAAuC;AAIhC,IAAM,mBAAmB,CAAE,gBAAyB;AAC1D,QAAM,YAAQ,eAAAC,YAAS;AACvB,QAAMC,aAAW,OAAO;AAExB,MAAK,CAAEA,YAAW;AACjB;AAAA,EACD;AAEA,EAAAA,WAAU,MAAM,QAAQ,QAAS,WAAY,CAAE;AAC/C,0DAA2B,IAAK;AACjC;;;ACfA,IAAAC,2BAA2D;;;ACA3D,IAAAC,wBAQO;AACP,IAAAC,2BAAmC;AACnC,IAAAC,gBAAmB;;;ACTnB,sBAA4B;AAC5B,IAAAC,iBAAuC;AAShC,IAAM,sBAAsB,CAAE,EAAE,QAAQ,GAAG,KAAK,MAA2B;AACjF,QAAM,EAAE,eAAe,OAAO,QAAI,6BAAY;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,6BAA0B,eAAAC,YAAS,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;;;ADRO,IAAM,wBAAwB;AAErC,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,kBAAc,kDAA4B,OAAQ,EAAE;AAAA,IAC1D,eAAe;AAAA,IACf,sBAAsB,KAAK,aAAa,gBAAgB,cAAc;AAAA,IAEtE,6BAA6B;AAC5B,YAAM,sBAAkB,6CAAmB;AAE3C,aAAO,iBAAiB,OAAO,KAAK,eAAe;AAAA,IACpD;AAAA,IAEA,qBAAsB,UAAyC;AAC9D,YAAM,oBAAoB,SAAS;AAOnC,UAAK,mBAAoB;AACxB,aAAK,aAAa,KAAK,aAAa,UAAU;AAAA,UAC7C,kBAAkB;AAAA,QACnB;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,UAAM,kBAAI,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,GAAa,KAAK,MAAM,IAAK,IAAK,CAAE;AAAA,MAC5E;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;;;AE1PO,SAAS,oBAAqB,cAA+C;AACnF,SAAO,CAAE,aAAa,YAAY,aAAa,MAAO,EAAE,SAAU,qBAAsB;AACzF;;;ACAO,IAAM,kBAAkB,OAAQ,aAAoD;AAC1F,QAAM,aAAa,SAAS,IAAK,OAAQ,EAAE,YAAY,QAAQ,UAAU,eAAe,SAAS,MAAO;AACvG,UAAM,MAAgB,CAAC;AAEvB,UAAM,cAAc,oBAAqB,EAAE,YAAY,OAAO,CAAE;AAEhE,QAAK,aAAc;AAClB,YAAM,cAAgB,UAAU,oBAA+C,OAAO,aAAa;AAEnG,UAAK,CAAE,aAAc;AACpB;AAAA,MACD;AAEA,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,YAAM,SAAS,MAAM,gBAAiB,aAAc;AAEpD,UAAI,KAAM,GAAG,MAAM,KAAM,IAAI,IAAK,MAAO,CAAE,CAAE;AAAA,IAC9C;AAEA,WAAO;AAAA,EACR,CAAE;AAEF,QAAM,UAAW,MAAM,QAAQ,IAAK,UAAW,GAAI,KAAK;AAExD,SAAO,MAAM,KAAM,IAAI,IAAK,MAAO,CAAE,EAAE,OAAQ,CAAE,UAAW,UAAU,MAAU;AACjF;;;ACxCA,IAAAC,iBAA+D;AAKxD,SAAS,+BAAgC,cAAyB;AACxE,MAAK,CAAE,aAAa,QAAS;AAC5B;AAAA,EACD;AAEA,eAAa,QAAS,sBAAuB;AAC9C;AAEA,eAAe,uBAAwB,aAAsB;AAC5D,QAAM,2BAA2B,mCAAgC,eAAAC,YAAS,GAAG,WAAY;AAEzF,MAAK,0BAA2B;AAC/B;AAAA,EACD;AAEA,QAAM,mBAAmB,MAAM,UAAU,oBAAqB,WAAY;AAE1E,MAAK,CAAE,kBAAmB;AACzB;AAAA,EACD;AAEA,qBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA;AAAA,IACD,CAAE;AAAA,EACH;AACD;;;AC9BA,IAAAC,iBAA+D;AAM/D,eAAsB,qBAAsB,cAAyB;AACpE,MAAK,CAAE,aAAa,QAAS;AAC5B;AAAA,EACD;AAEA,QAAM,kBAAkB,iBAAc,eAAAC,YAAS,CAAE;AACjD,QAAM,sBAAsB,aAAa,OAAQ,CAAEC,QAAQ,CAAE,gBAAiBA,GAAG,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,OAAQA,QAAQ,CAAEA,KAAI,MAAM,UAAU,mBAAoBA,GAAG,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,qBAAAC,YAAU,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;;;ANnCA,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,wCAAgB;AAEnD,MAAK,WAAY;AAChB,4DAA2B,IAAK;AAAA,EACjC;AACD;;;AO5BA,IAAAC,0BAKO;AAEA,IAAM,4BAA4B,MAAiE;AACzG,QAAM,+BAA2B,qDAA4B;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,uBAAmB,6CAAoB;AAE7C,MAAK,iBAAiB,WAAW,GAAI;AACpC,WAAO;AAAA,EACR;AAEA,aAAO,sCAAc,iBAAkB,CAAE,EAAE,EAAG;AAC/C;;;AChDA,IAAAC,0BAA6E;AAWtE,IAAM,8BAA8B,CAAE,SAAwB,cAAwC;AAC5G,8CAAgB;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,MACA,mBAAmB,UAAU;AAAA,IAC9B;AAAA,IACA,iBAAiB;AAAA,MAChB,OAAO,UAAU;AAAA,MACjB,eAAe,UAAU;AAAA,IAC1B;AAAA,EACD;AACD;;;AVXO,IAAM,gBAAgB,CAAE,EAAE,UAAU,MAA2B;AACrE,QAAM,iBAAiB,qBAAsB,SAAU;AACvD,QAAM,iBAAa,2BAAe;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,uDAAwB;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,sCAAC,yBACA;AAAA,IAAC;AAAA;AAAA,MACA,WAAS;AAAA,MACT,aAAc,UAAM,iDAA2B,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,MAAC;AAAA;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,sCAAC,4BAAa,MAAK,UAClB,sCAAC,gCAAe,UAAS,QAAO,CACjC;AAAA,MACA,sCAAC,mBAAI,SAAQ,QAAO,MAAO,GAAI,UAAW,GAAI,UAAW,KACxD;AAAA,QAAC;AAAA;AAAA,UACA,OAAQ,UAAU;AAAA,UAClB,IAAK;AAAA,UACL,SAAQ;AAAA,UACR,OAAM;AAAA;AAAA,MACP,CACD;AAAA,IACD;AAAA,IACA,sCAAC,0BAAW,MAAK,QAAS,OAAG,yBAAa,UAAW,GAAI,cAAW,kBACnE,sCAAC,kCAAiB,UAAS,QAAO,CACnC;AAAA,EACD,GACA;AAAA,IAAC;AAAA;AAAA,MACE,OAAG,sBAAU,UAAW;AAAA,MAC1B,cAAe;AAAA,QACd,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA,MACA,iBAAkB;AAAA,QACjB,UAAU;AAAA,QACV,YAAY;AAAA,MACb;AAAA;AAAA,IAEA,sCAAC,kCAAa,IAAK,EAAE,UAAU,QAAQ,GAAI,SAAU,0BAClD,kBAAI,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,2CAAa;AAAA,IACZ,aAAa,UAAU;AAAA,IACvB;AAAA,IACA,SAAS,EAAE,GAAG,SAAS,YAAY,OAAO,gBAAgB,KAAK;AAAA,EAChE,CAAE;AACH;;;AWrIA,IAAAC,UAAuB;AACvB,IAAAC,cAAqD;AACrD,IAAM,aAAa;AAEnB,IAAM,OAAO,MAAM,KAAM,EAAE,QAAQ,WAAW,GAAG,CAAE,GAAG,UAAW,KAAM;AAEhE,IAAM,oBAAoB,MAAM;AACtC,SACC;AAAA,IAAC;AAAA;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,MAAC;AAAA;AAAA,QACA,KAAM;AAAA,QACN,IAAK,EAAE,QAAQ,aAAa,aAAa,WAAW,IAAI,KAAK,IAAI,EAAE;AAAA,QACnE,OAAM;AAAA;AAAA,MAEN,sCAAC,mBAAI,SAAQ,QAAO,KAAM,GAAI,OAAM,UACnC,sCAAC,wBAAS,SAAQ,QAAO,OAAQ,QAAS,QAAS,QAAS,GAC5D,sCAAC,wBAAS,SAAQ,QAAO,OAAQ,QAAS,QAAS,QAAS,CAC7D;AAAA,IACD,CACC;AAAA,EACH;AAEF;;;AbhCO,SAAS,iBAAiB;AAChC,QAAM,EAAE,YAAY,WAAW,YAAY,IAAI,sBAAsB;AAErE,MAAK,WAAY;AAChB,WAAO,sCAAC,uBAAkB;AAAA,EAC3B;AACA,QAAM,UAAU,CAAE,cAAc,WAAW,WAAW;AACtD,MAAK,SAAU;AACd,QAAK,YAAY,SAAS,GAAI;AAC7B,aAAO,sCAAC,uBAAkB;AAAA,IAC3B;AACA,WAAO,sCAAC,gBAAW;AAAA,EACpB;AAEA,SACC,sCAAC,oBAAK,IAAK,EAAE,SAAS,QAAQ,eAAe,UAAU,KAAK,GAAG,IAAI,EAAE,KAClE,WAAW,IAAK,CAAE,cACnB,sCAAC,iBAAc,KAAM,UAAU,KAAM,WAAwB,CAC5D,CACH;AAEF;AAEA,IAAM,aAAa,MAAM;AACxB,SACC;AAAA,IAAC;AAAA;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,sCAAC,oBAAK,UAAS,WACd,sCAAC,0BAAQ,UAAS,SAAQ,CAC3B;AAAA,IACA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,aAAY,OAAM,kBAAiB,YAAW,cAC9E,kBAAI,wDAAwD,WAAY,CAC3E;AAAA,IACA,sCAAC,0BAAW,SAAQ,WAAU,OAAM,UAAS,OAAM,wBAChD;AAAA,MACD;AAAA,MACA;AAAA,IACD,CACD;AAAA,IACA,sCAAC,uBAAQ,IAAK,EAAE,OAAO,OAAO,GAAI,OAAM,kBAAiB;AAAA,IACzD,sCAAC,0BAAW,OAAM,QAAO,SAAQ,WAAU,OAAM,wBAC9C,kBAAI,6EAA6E,WAAY,CAChG;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACA,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,IAAK,EAAE,SAAS,QAAQ,eAAe,SAAS;AAAA;AAAA,MAEhD,sCAAC,kBAAO,kBAAI,8CAA8C,WAAY,CAAG;AAAA,MACzE,sCAAC,kBAAO,kBAAI,oDAAoD,WAAY,CAAG;AAAA,MAC/E,sCAAC,kBAAO,kBAAI,sDAAsD,WAAY,CAAG;AAAA,IAClF;AAAA,EACD;AAEF;AAEA,IAAM,oBAAoB,MAAM;AAC/B,QAAM,EAAE,aAAa,YAAY,IAAI,UAAU;AAC/C,SACC;AAAA,IAAC;AAAA;AAAA,MACA,OAAQ;AAAA,MACR,IAAK;AAAA,MACL,YAAW;AAAA,MACX,KAAM;AAAA,MACN,UAAW;AAAA,MACX,aAAc;AAAA;AAAA,IAEd,sCAAC,mCAAe;AAAA,IAChB;AAAA,MAAC;AAAA;AAAA,QACA,IAAK;AAAA,UACJ,OAAO;AAAA,QACR;AAAA;AAAA,MAEA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,aAAY,OAAM,iBAClD,kBAAI,0BAA0B,WAAY,CAC7C;AAAA,MACE,eACD;AAAA,QAAC;AAAA;AAAA,UACA,SAAQ;AAAA,UACR,OAAM;AAAA,UACN,IAAK;AAAA,YACJ,SAAS;AAAA,YACT,OAAO;AAAA,YACP,gBAAgB;AAAA,UACjB;AAAA;AAAA,QAEA,sCAAC,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,sCAAC,cAAK,SAAQ;AAAA,MACf;AAAA,IAEF;AAAA,IACA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,WAAU,OAAM,iBAChD,kBAAI,uBAAuB,WAAY,CAC1C;AAAA,IACA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,WAAU,OAAM,aAClD,sCAAC,oBAAK,OAAM,aAAY,SAAQ,WAAU,WAAU,UAAS,SAAU,mBACpE,kBAAI,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,sCAAC,uCACA,sCAAC,kBAAe,iBAAgB,iCAC/B,sCAAC,qBAAgB,GACjB,sCAAC,oBAAe,CACjB,CACD;AAEF;;;AiBhBO,IAAM,0BAA0B;;;ACAvC,IAAAC,UAAuB;AACvB,IAAAC,gBAAqD;AACrD,IAAAC,0BAAoD;AACpD,IAAAC,oBAAmD;AACnD,IAAAC,iBAAyB;AACzB,IAAAC,cAAgG;AAChG,IAAAC,gBAAmB;;;ACLnB,IAAAC,6BAAkD;AAClD,IAAAC,iBAAuC;AACvC,IAAAC,gBAAiC;AAQ1B,SAAS,2BACf,MACA,SACA,WACA,kBACA,KACC;AACD,QAAM,eAAe,WAAO,gCAAkB,WAAY;AAC1D,QAAM,gBAAgB,EAAE,KAAK,cAAc,MAAM,iBAAiB;AAElE,qBAAAC;AAAA,IACC,MAAM,QAAQ,eAAgB;AAAA,MAC7B,GAAG;AAAA,MACH,UAAU,CAAE,OAAQ;AAAA,IACrB,CAAE;AAAA,EACH;AAEA,qBAAAA,YAAU,MAAM,QAAQ,sBAAuB,YAAa,CAAE;AAE9D,8BAA6B,SAAS,aAAc;AAEpD,sBAAqB;AAAA,IACpB,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,gBAAgB;AAAA,IAChB,GAAG;AAAA,EACJ,CAAE;AAEF,iCAAAC,qBAAY,oBAAqB;AAEjC,SAAO;AACR;;;AC1CA,IAAAC,gBAAkC;AAG3B,IAAM,UAAU,CAA+C,kBAA4B;AACjG,QAAM,CAAE,QAAQ,SAAU,QAAI,wBAAqB,aAAc;AACjE,QAAM,CAAE,QAAQ,SAAU,QAAI,wBAAwD,CAAC,CAAE;AAEzF,QAAM,cAAU,uBAAS,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,oBAAkB;AAClB,IAAAC,gBAAmB;AAEnB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AAEjB,IAAM,4BAA4B,CAAE,kBAA6B;AACvE,SAAO,gBAAE,OAAQ;AAAA,IAChB,eAAe,gBACb,OAAO,EACP,KAAK,EACL;AAAA,MACA;AAAA,UACA,kBAAI,mEAAmE,WAAY;AAAA,IACpF,EACC,OAAQ,CAAE,UAAW,CAAE,cAAc,SAAU,KAAM,GAAG;AAAA,MACxD,aAAS,kBAAI,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,aAAS,kBAAI,+BAA+B,WAAY;AAAA,IACzD,CAAE,EACD,OAAQ,CAAE,UAAW,MAAM,UAAU,iBAAiB;AAAA,MACtD,aAAS,kBAAI,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,QAAI,wBAGpB,IAAK;AAEjB,QAAM,CAAE,gBAAgB,iBAAkB,QAAI,wBAA0C;AAExF,QAAM,CAAE,oBAAoB,qBAAsB,QAAI,wBAAuC,IAAK;AAElG,QAAM,gBAAY,sBAAqC,IAAK;AAE5D,+BAAW,MAAM;AAChB,UAAM,oCAAoC;AAE1C,UAAM,YAAY,CAAE,UAAoD;AACvE,iBAAY,EAAE,SAAS,MAAM,OAAO,SAAS,kBAAc,yCAAiB,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,aAAS,kBAAI,qDAAqD,WAAY,EAC5E,QAAS,QAAQ,OAAO,aAAc,EACtC,QAAS,QAAQ,GAAI;AAAA,QACvB,MAAM;AAAA,MACP,CAAE;AAEF,yBAAmB;AAAA,IACpB,QAAQ;AACP,YAAM,mBAAe,kBAAI,+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,sCAAC,uCACA;AAAA,IAAC;AAAA;AAAA,MACA,MAAO,YAAY;AAAA,MACnB,SAAU;AAAA,MACV,iBAAgB;AAAA,MAChB;AAAA;AAAA,IAEE,YAAY,QACb;AAAA,MAACC;AAAA,MAAA;AAAA,QACA,eAAgB,EAAE,eAAe,QAAQ,aAAa;AAAA,QACtD;AAAA,QACA,YAAa;AAAA;AAAA,IACd;AAAA,EAEF,GACA,sCAAC,wBAAS,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,IAAMA,QAAO,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,6BAAyB,uBAAS,MAAM;AAC7C,WAAO,YAAY,IAAK,CAAE,cAAe,UAAU,IAAK,KAAK,CAAC;AAAA,EAC/D,GAAG,CAAE,UAAW,CAAE;AAElB,QAAM,6BAAyB;AAAA,IAC9B,MAAM,0BAA2B,sBAAuB;AAAA,IACxD,CAAE,sBAAuB;AAAA,EAC1B;AACA,QAAM,6BAAyB;AAAA,IAC9B,MAAM,4BAA6B,sBAAuB;AAAA,IAC1D,CAAE,sBAAuB;AAAA,EAC1B;AAEA,QAAM,eAAe,MAAM;AAC1B,UAAM,EAAE,SAAS,aAAa,IAAIA,cAAc,sBAAuB;AAEvE,QAAK,SAAU;AACd,iBAAY,YAAa;AAAA,IAC1B;AAAA,EACD;AAEA,QAAM,QAAQ;AAAA,IACb,aAAS,kBAAI,uBAAuB,WAAY;AAAA,IAChD,UAAM,kBAAI,QAAQ,WAAY;AAAA,IAC9B,YAAQ,kBAAI,UAAU,WAAY;AAAA,IAClC,YAAQ,kBAAI,UAAU,WAAY;AAAA,EACnC;AAEA,QAAM,cAAc;AAEpB,SACC,sCAAC,kBAAAC,MAAA,EAAY,UAAW,gBACvB,sCAAC,qBAAM,YAAW,SAAQ,OAAM,WAC/B;AAAA,IAAC;AAAA;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,sCAAC,2BAAS,UAAW,WAAY;AAAA,IACjC,sCAAC,0BAAW,SAAQ,WAAU,IAAK,EAAE,OAAO,gBAAgB,YAAY,OAAO,YAAY,EAAE,KAC1F,MAAM,OACT;AAAA,EACD,GACA,sCAAC,oBAAK,WAAS,MAAC,KAAM,MAAO,YAAW,SAAQ,GAAI,OACnD,sCAAC,oBAAK,MAAI,MAAC,IAAK,MACf,sCAAC,yBAAU,SAAU,aAAc,MAAK,UACrC,MAAM,IACT,CACD,GACA,sCAAC,oBAAK,MAAI,MAAC,IAAK,MACf;AAAA,IAAC;AAAA;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,sCAAC,qBAAM,WAAU,OAAM,gBAAe,YAAW,WAAU,OAAM,IAAK,GAAI,IAAK,OAC9E,sCAAC,sBAAO,SAAU,YAAa,OAAM,aAAY,SAAQ,QAAO,MAAK,WAClE,MAAM,MACT,GACA,sCAAC,sBAAO,MAAK,UAAS,UAAW,CAAE,SAAU,SAAQ,aAAY,OAAM,WAAU,MAAK,WACnF,MAAM,MACT,CACD,CACD,CACD;AAEF;;;AKpOA,IAAAC,UAAuB;AACvB,IAAAC,iBAA0B;AAC1B,IAAAC,4BAAuD;AAEvD,IAAAC,6BAA+D;AAC/D,IAAAC,iBAA6C;AAC7C,IAAAC,gBAAyB;;;ACNzB,IAAAC,2BAA2D;AAC3D,IAAAC,iBAAuC;AAIhC,SAAS,uBAAwB;AAAA,EACvC;AAAA,EACA;AACD,GAGI;AACH,QAAMC,iBAAW,eAAAC,YAAS,GAAG;AAE7B,MAAK,CAAED,YAAW;AACjB;AAAA,EACD;AAEA,EAAAA,WAAU,MAAM,QAAQ,QAAS,IAAK,CAAE;AACxC,EAAAA,WAAU,MAAM,QAAQ,sBAAuB,kBAAmB,CAAE;AACrE;;;ACpBA,IAAAE,UAAuB;AACvB,IAAAC,iBAA8C;AAC9C,uBAA6B;AAC7B,IAAAC,gBAAmB;;;ACHnB,IAAAC,wBAAwC;AACxC,IAAAC,6BAAqE;AAE9D,SAAS,oBAAoB;AACnC,aAAO,2BAAAC,0BAAa,4CAAiB,iCAAkC,GAAG,UAAM,+CAAwB,CAAE;AAC3G;;;ACLA,IAAAC,iBAAoC;AACpC,IAAAC,gBAAyB;AAElB,SAAS,eAAgB,SAA8B;AAC7D,QAAM,CAAE,MAAM,OAAQ,QAAI,yBAAqB,IAAI,QAAS,GAAG,GAAG,GAAG,CAAE,CAAE;AAEzE,QAAM,eAAW;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;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,gCAAW,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,gCAAW,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,gCAAW,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;;;AFnEO,SAAS,eAAgB,EAAE,SAAS,QAAQ,GAAgB;AAClE,QAAM,iBAAiB,kBAAkB;AAEzC,gCAAW,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,aAAO;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,kBAAa,kBAAI,+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,qBAAqB,sBAAsB;AAEjD,4BAA0B;AAE1B,QAAM,eAAe,gBAAgB;AAErC,QAAM,cAAU,wBAAU,cAAc,GAAI;AAE5C,QAAM,aAAa,uBAAwB,sBAAsB,MAAU;AAE3E,MAAK,CAAE,YAAa;AACnB,WAAO;AAAA,EACR;AAEA,SAAO,sCAAC,kBAAe,SAAU,YAAa,SAAoB;AACnE;AAEA,SAAS,4BAA4B;AACpC,QAAM,uBAAmB,iDAAsB;AAC/C,QAAM,qBAAqB,sBAAsB;AACjD,QAAM,WAAO,eAAAC,eAAa,UAAW;AAErC,gCAAW,MAAM;AAChB,eAAO,2BAAAC,uBAAU,4CAAiB,uBAAwB,GAAG,MAAM;AAClE,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,uBAAwBC,KAAqC;AACrE,MAAK,CAAEA,KAAK;AACX,WAAO;AAAA,EACR;AAEA,QAAM,uBAAmB,iDAAsB;AAE/C,QAAM,mBAAmB,iBAAiB,IAAKA,GAAG;AAElD,QAAM,SAAS,kBAAkB;AACjC,QAAM,YAAc,QAAQ,MAAM,IAAI,WAAY,CAAE,KAAK;AACzD,QAAM,aAAa,WAAW,SAAU,CAAE;AAE1C,SAAO,cAAc;AACtB;;;AKlGA,IAAAC,UAAuB;AACvB,IAAAC,oBAAwC;AACxC,IAAAC,iBAAqC;AACrC,IAAAC,cAAiG;AACjG,IAAAC,gBAAmB;AAEZ,IAAM,qBAAqB,CAAE,aAAsB;AACzD,oCAAY;AAAA,IACX,WAAW,sCAAC,kBAAe,UAAsB;AAAA,EAClD,CAAE;AACH;AAEA,IAAM,iBAAiB,CAAE,EAAE,SAAS,MAA6B;AAEhE,QAAM,cAAU,kBAAI,yCAAyC,WAAY,EAAE,QAAS,MAAM,QAAS;AACnG,SACC,8DACC,sCAAC,4BAAa,MAAO,SACpB,sCAAC,mBAAI,SAAQ,QAAO,YAAW,UAAS,KAAM,KAC7C,sCAAC,oBAAK,OAAM,eACX,sCAAC,uCAAqB,UAAS,UAAS,CACzC,GACA,sCAAC,0BAAW,SAAQ,eAAc,OAAS,CAC5C,CACD,GACA,sCAAC,iCACA,sCAAC,qBAAM,SAAU,GAAI,WAAU,YAC9B,sCAAC,0BAAW,SAAQ,eACjB;AAAA,IACD;AAAA,IACA;AAAA,EACD,CACD,GACA,sCAAC,iCACA,sCAAC,sBAAO,OAAM,aAAY,SAAQ,aAAY,SAAU,qCACrD,kBAAI,SAAS,WAAY,CAC5B,CACD,CACD,CACD,CACD;AAEF;;;AC1CA,IAAAC,UAAuB;AACvB,IAAAC,0BAA0C;AAC1C,IAAAC,+BAAmC;AACnC,IAAAC,2BAAmC;AACnC,IAAAC,wBAAyD;AACzD,IAAAC,iBAA2C;AAC3C,IAAAC,cAA2C;AAC3C,IAAAC,gBAAmB;;;ACPnB,IAAAC,+BAA2B;AAC3B,IAAAC,0BAAkC;;;ACDlC,IAAAC,uBAAoD;AACpD,IAAAC,iBAAkB;;;ACDlB,IAAAC,uBAAgC;AAChC,IAAAC,iBAAkB;;;ACDlB,0BAAgC;AAChC,IAAAC,iBAAkB;AAEX,IAAM,4CAAwC;AAAA,EACpD;AAAA,EACA,iBAAE,OAAQ;AAAA,IACT,cAAc,iBAAE,OAAO;AAAA,IACvB,gBAAgB,iBAAE,QAAQ;AAAA,IAC1B,eAAe,iBAAE,OAAQ;AAAA,MACxB,MAAM,iBAAE,QAAS,WAAY;AAAA,MAC7B,IAAI,iBAAE,OAAO;AAAA,IACd,CAAE;AAAA,EACH,CAAE;AACH;;;ACbA,IAAAC,uBAAgC;AAChC,IAAAC,iBAAkB;AAEX,IAAM,uCAAmC;AAAA,EAC/C;AAAA,EACA,iBAAE,OAAQ;AAAA,IACT,cAAc,iBAAE,OAAO;AAAA,IACvB,cAAc,iBACZ,OAAQ;AAAA,MACR,QAAQ,iBAAE,OAAO;AAAA,MACjB,OAAO,iBAAE,QAAQ;AAAA,IAClB,CAAE,EACD,SAAS;AAAA,EACZ,CAAE;AACH;;;AFRO,IAAM,6CAAyC;AAAA,EACrD;AAAA,EACA,iBACE,MAAO,iBAAE,MAAO,CAAE,sCAAsC,QAAQ,iCAAiC,MAAO,CAAE,CAAE,EAC5G,SAAS,EACT,QAAS,CAAC,CAAE;AACf;;;ADPO,IAAM,oCAAgC;AAAA,EAC5C;AAAA,EACA,iBAAE,OAAQ;AAAA,IACT,cAAc,wCAAmB;AAAA,IACjC,WAAW,iBAAE,SAAU,uCAAuC,MAAO;AAAA,EACtE,CAAE;AACH;;;ADHO,SAAS,+BAA+B;AAC9C,QAAM,EAAE,QAAQ,QAAI,yCAAW;AAE/B,QAAM,eAAW,2CAAiD,QAAQ,IAAI,oBAAqB;AAEnG,SAAO,8BAA8B,QAAS,QAAS;AACxD;;;AKdA,IAAAC,UAAuB;AACvB,IAAAC,iBAAkD;AAClD,IAAAC,cAA0C;AAC1C,IAAAC,gBAAmB;AAEZ,IAAMC,cAAa,CAAE,EAAE,gBAAgB,MAAwC;AACrF,SACC;AAAA,IAAC;AAAA;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,sCAAC,wCAAsB,UAAS,SAAQ;AAAA,IAExC,sCAAC,0BAAW,OAAM,UAAS,SAAQ,mBAChC,kBAAI,qBAAqB,WAAY,CACxC;AAAA,IAEA,sCAAC,0BAAW,OAAM,UAAS,SAAQ,WAAU,UAAS,eACnD;AAAA,MACD;AAAA,MACA;AAAA,IACD,CACD;AAAA,IAEA,sCAAC,sBAAO,SAAQ,YAAW,OAAM,aAAY,MAAK,SAAQ,IAAK,EAAE,IAAI,EAAE,GAAI,SAAU,mBACpF,sCAAC,6BAAW,UAAS,SAAQ,OAC3B,kBAAI,kBAAkB,WAAY,CACrC;AAAA,EACD;AAEF;;;AClCA,IAAAC,UAAuB;AACvB,IAAAC,iBAAsB;AACtB,IAAAC,+BAAkC;AAClC,IAAAC,qBAA6B;AAC7B,IAAAC,cAAmE;;;ACJnE,IAAAC,UAAuB;AACvB,IAAAC,0BAA4D;AAC5D,IAAAC,+BAKO;AAGP,IAAAC,cAAsB;;;ACVtB,IAAAC,0BAA+D;AAExD,SAAS,wBAAyB,MAA0C;AAClF,QAAM,kBAAc,wCAAgB,IAAK;AAEzC,MAAK,CAAE,aAAc;AACpB,WAAO,CAAC;AAAA,EACT;AAEA,QAAM,WAAW,gBAAiB,YAAY,QAAS;AAEvD,SAAO,kBAAmB,QAAS;AACpC;AAEA,SAAS,gBAAiB,UAAqC;AAC9D,SAAO,SACL,IAAK,CAAE,YAAa;AACpB,QAAK,QAAQ,SAAS,aAAa,UAAU,QAAQ,OAAQ;AAC5D,aAAO;AAAA,IACR;AAEA,QAAK,QAAQ,SAAS,WAAY;AACjC,aAAO,gBAAiB,QAAQ,MAAM,KAAM;AAAA,IAC7C;AAEA,WAAO;AAAA,EACR,CAAE,EACD,OAAQ,OAAQ,EAChB,KAAK;AACR;AAEA,SAAS,kBAAmB,UAAiD;AAC5E,SAAO,SAAS;AAAA,IACf,CAAE,gBAA2C,aAAe;AAAA,MAC3D,GAAG;AAAA,MACH,CAAE,QAAQ,MAAM,IAAK,GAAG;AAAA,IACzB;AAAA,IACA,CAAC;AAAA,EACF;AACD;;;ACvCA,IAAAC,iBAA+D;AAMxD,SAAS,sBACf,aACA,WACA,kBACC;AACD,QAAM,mBAAmB,2BAAwB,eAAAC,YAAS,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,qBAAqB,mBACxB;AAAA,IACA,aAAa,UAAU;AAAA,IACvB;AAAA,EACA,IACA;AAAA,IACA,aAAa,UAAU;AAAA,EACvB;AAEH,QAAM,sBAAsB;AAAA,IAC3B,GAAG;AAAA,IACH,OAAO;AAAA,MACN,GAAG,iBAAiB;AAAA,MACpB,CAAE,wBAAwB,WAAY,GAAG;AAAA,QACxC,GAAG;AAAA,QACH,GAAG;AAAA,MACJ;AAAA,IACD;AAAA,EACD;AAEA,qBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,IACnB,CAAE;AAAA,EACH;AACD;;;ACjDA,IAAAC,2BAAgC;AAIzB,IAAM,kCAAkC,CAAE,oBAAsC;AACtF,MAAK,gBAAgB,kBAAmB;AACvC,WAAO,YAAa,gBAAgB,gBAAiB;AAAA,EACtD;AAEA,QAAM,EAAE,QAAQ,YAAY,QAAQ,IAAI;AAExC,SAAO,YAAa;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAE;AACH;AAEA,SAAS,YAAa,EAAE,YAAY,QAAQ,GAAsB;AACjE,QAAM,wBAAoB,0CAAgB,IAAK,UAAW,GAAG;AAE7D,SAAO,oBAAqB,OAAQ;AACrC;;;ACtBA,IAAAC,UAAuB;AAEvB,IAAAC,0BAAoD;AACpD,IAAAC,cAA2C;AAIpC,IAAM,eAAe,CAAE,EAAE,UAAU,GAAG,MAAM,MAA0B;AAC5E,SACC,sCAAC,qBAAM,WAAU,OAAM,YAAW,UAAS,cAAa,SAAQ,KAAM,QACrE,sCAAC,4CAAmB,GAAG,SAAU,QAAU,GAC3C,sCAAC,+CAAkB,CACpB;AAEF;;;AJyBO,SAAS,oBAAqB,EAAE,iBAAiB,UAAU,GAAW;AAC5E,SACC,sCAAC,8CAAc,MAAK,sBAAqB,iBAAkB,gBAAgB,SAC1E,sCAAC,mBAAgB,iBAAoC,WAAwB,CAC9E;AAEF;AAEA,SAAS,gBAAiB,EAAE,iBAAiB,UAAU,GAAW;AACjE,QAAM,cAAc,sBAAsB;AAC1C,QAAM,EAAE,OAAO,eAAe,UAAU,iBAAiB,QAAI,sCAAc,6BAA8B;AACzG,QAAM,WAAW;AAAA,IAChB,iBAAiB,kBAAkB,cAAc,gBAAgB;AAAA,EAClE;AAEA,QAAM,WAAW,gCAAiC,eAAgB;AAElE,MAAK,CAAE,UAAW;AACjB,WAAO;AAAA,EACR;AAEA,QAAM,qBAAiB,uDAA0B;AAAA,IAChD,QAAQ;AAAA,MACP,CAAE,gBAAgB,WAAY,GAAG;AAAA,IAClC;AAAA,EACD,CAAE;AAEF,QAAM,sBAAsB,cAAc,cAAc;AAExD,MAAK,CAAE,qBAAsB;AAC5B,UAAM,IAAI,MAAO,0BAA2B;AAAA,EAC7C;AAEA,QAAM,mBAAmB,oBAAqB,WAAW,gBAAgB,WAAY;AAErF,QAAM,YAAY,mBAAmB,aAAc,gBAAiB,IAAI,gBAAgB;AAExF,QAAM,QAAQ;AAAA,IACb,CAAE,gBAAgB,WAAY,GAAG;AAAA,EAClC;AAEA,QAAM,WAAW,CAAE,aAA+B;AACjD,UAAM,eAAe,SAAU,gBAAgB,WAAY;AAI3D,UAAM,mBAAmB,oBAAqB,gBAAgB,aAAa,cAAc,mBAAoB;AAE7G,QAAI,eACH,WAAW,IAAK,CAAE,aAAgB,aAAa,mBAAmB,mBAAmB,QAAW,KAAK,CAAC;AAEvG,QAAK,CAAE,kBAAmB;AACzB,qBAAe,CAAE,GAAG,cAAc,gBAAiB;AAAA,IACpD;AAEA,qBAAkB;AAAA,MACjB,GAAG;AAAA,MACH,WAAW,uCAAuC,OAAQ,YAAa;AAAA,IACxE,CAAE;AAEF,UAAM,mBAAmB,iCAAiC,QAAS,gBAAiB;AACpF,QAAK,oBAAoB,aAAc;AACtC,UAAK,gBAAgB,kBAAmB;AACvC,8BAAuB,aAAa,kBAAkB,gBAAgB,gBAAiB;AAEvF;AAAA,MACD;AAEA,YAAM,EAAE,QAAQ,YAAY,QAAQ,IAAI;AACxC,4BAAuB,aAAa,kBAAkB,EAAE,QAAQ,YAAY,QAAQ,CAAE;AAAA,IACvF;AAAA,EACD;AAEA,SACC;AAAA,IAAC;AAAA;AAAA,MACA,UAAW;AAAA,MACX;AAAA,MACA;AAAA,MACA,YAAa,MAAM;AAClB,eAAO;AAAA,MACR;AAAA;AAAA,IAEA,sCAAC,2CAAgB,MAAO,gBAAgB,eACvC,sCAAC,qBAAM,WAAU,UAAS,KAAM,GAAI,IAAK,OACxC,sCAAC,oBAAe,gBAAgB,KAAO,GACrC,WAAY,UAAU,iBAAiB,oBAAoB,eAAgB,CAC9E,CACD;AAAA,EACD;AAEF;AAEA,SAAS,aAAc,OAAqE;AAC3F,QAAM,mBAAmB,iCAAiC,QAAS,KAAM;AAEzE,MAAK,kBAAmB;AAEvB,WAAO;AAAA,EACR;AAEA,MAAK,sCAAsC,QAAS,KAAM,GAAI;AAC7D,WAAO,MAAM,MAAM;AAAA,EACpB;AAEA,SAAO;AACR;AAEA,SAAS,oBACR,WACA,aACsE;AACtE,SACC,WAAW,KAAM,CAAE,aAAc;AAChC,UAAM,mBAAmB,iCAAiC,QAAS,QAAS;AAC5E,QAAI,sBAAsB;AAE1B,QAAK,kBAAmB;AACvB,4BAAwB,iBAAiB,cAAiD,OACvF;AAAA,IACJ,OAAO;AACN,4BAAsB,SAAS,MAAM;AAAA,IACtC;AAEA,WAAO,wBAAwB;AAAA,EAChC,CAAE,KAAK;AAET;AAEA,SAAS,oBACR,aACA,eACA,aAC+D;AAC/D,QAAM,mBAAmB,iCAAiC,QAAS,aAAc;AAEjF,MAAK,kBAAmB;AACvB,UAAM,gBAAgB,sCAAsC,OAAQ;AAAA,MACnE,cAAc;AAAA,MACd,gBAAgB,iBAAiB;AAAA,MACjC,eAAe;AAAA,QACd,MAAM;AAAA,QACN,IAAI;AAAA,MACL;AAAA,IACD,CAAE;AAEF,WAAO,iCAAiC,OAAQ;AAAA,MAC/C,cAAc,iBAAiB;AAAA,MAC/B,cAAc;AAAA,IACf,CAAE;AAAA,EACH;AAEA,SAAO,sCAAsC,OAAQ;AAAA,IACpD,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,eAAe;AAAA,MACd,MAAM;AAAA,MACN,IAAI;AAAA,IACL;AAAA,EACD,CAAE;AACH;AAEA,SAAS,WAAY,UAAqC,kBAAqC;AAC9F,QAAM,mBAAmB,8CAAiB,IAAK,SAAU,iBAAiB,OAAQ,EAAE,MAAM,IAAoB;AAE9G,QAAM,eAAe,SAAU,iBAAiB,OAAQ,EAAE,MAAM;AAEhE,SAAO,sCAAC,oBAAmB,GAAG,cAAe;AAC9C;;;AD9LO,SAAS,mBAAoB,EAAE,OAAO,OAAO,UAAU,GAAW;AACxE,QAAM,CAAE,QAAQ,SAAU,QAAI,gDAAmB,MAAM,IAAI,IAAK;AAEhE,QAAM,cAAc,MAAM;AACzB,cAAW,CAAE,MAAO;AAAA,EACrB;AAEA,QAAMC,UAAK,sBAAM;AACjB,QAAM,UAAU,SAAUA,GAAG;AAC7B,QAAM,YAAY,WAAYA,GAAG;AAEjC,QAAM,QAAQ,MAAM;AAEpB,SACC,sCAAC,mBAAI,cAAa,GAAI,KAAM,cAC3B;AAAA,IAAC;AAAA;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,sCAAC,qBAAM,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,mCAAa,MAAO,QAAS,OAAM,aAAY,UAAS,QAAO;AAAA,EACjE,GACA,sCAAC,wBAAS,IAAK,WAAY,mBAAkB,SAAU,IAAK,QAAS,SAAQ,UAC5E,sCAAC,qBAAM,WAAU,UAAS,KAAM,GAAI,GAAI,KACrC,MAAM,MAAM,IAAK,CAAE,gBACpB;AAAA,IAAC;AAAA;AAAA,MACA,KAAM;AAAA,MACN,iBAAkB,MAAO,WAAY;AAAA,MACrC;AAAA;AAAA,EACD,CACC,CACH,CACD,CACD;AAEF;;;AP7CO,SAAS,uBAAuB;AACtC,QAAM,WAAW,6BAA6B;AAC9C,QAAM,cAAc,UAAU,cAAc;AAE5C,QAAM,YAAY,UAAU,WAAW;AAEvC,QAAM,YAAY,aAAc,eAAe,IAAK;AACpD,QAAM,mBAAmB,oBAAqB,eAAe,IAAK;AAElE,QAAM,0BAAsB,6CAAmB,GAAG,SAAS,MAAM;AAEjE,MAAK,CAAE,eAAe,CAAE,oBAAoB,CAAE,WAAY;AACzD,WAAO;AAAA,EACR;AAGA,QAAM,iBAAa,kBAAI,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,qCAAY,IAAK,EAAE,gBAAgB,SAAS,IAAI,EAAE,KAClD,sCAAC,qBAAM,WAAU,OAAM,cAAa,iBAAgB,UAAW,KAC9D,sCAAC,qBAAM,WAAU,OAAM,YAAW,UAAS,gBAAe,SAAQ,KAAM,GAAI,UAAW,KACtF,sCAAC,iCAAe,UAAS,SAAQ,IAAK,EAAE,OAAO,gBAAgB,GAAI,GACnE,sCAAC,8CAAmB,UAAU,IAAM,CACrC,GACA,sCAAC,uBAAQ,OAAQ,cAChB,sCAAC,0BAAW,MAAK,QAAO,SAAU,qBAAsB,cAAa,cACpE,sCAAC,6BAAW,UAAS,QAAO,CAC7B,CACD,CACD,CACD,GACA,sCAAC,uCACA,sCAAC,qDAA0B,WAAQ,iDAAoB,UAAW,KAC/D,UACD,sCAACC,aAAA,EAAW,iBAAkB,qBAAsB,IAEpD,sCAAC,qBAAM,WAAU,UAAS,YAAW,aAClC,OAAO,IAAK,CAAE,UACf;AAAA,IAAC;AAAA;AAAA,MACA,KAAM,MAAM;AAAA,MACZ;AAAA,MACA,OAAQ,iBAAiB;AAAA,MACzB;AAAA;AAAA,EACD,CACC,CACH,CAEF,CACD,CACD;AAEF;;;Aa/EA,IAAAC,UAAuB;AAEvB,IAAAC,0BAAyF;AACzF,IAAAC,+BAAqD;;;ACHrD,IAAAC,UAAuB;AACvB,IAAAC,iBAAkE;AAQlE,IAAM,6BAAyB,8BAA6C,IAAK;AAE1E,SAAS,wBAAyB,EAAE,UAAU,GAAG,MAAM,GAA8C;AAC3G,SAAO,sCAAC,uBAAuB,UAAvB,EAAgC,OAAQ,SAAU,QAAU;AACrE;AAEO,IAAM,0BAA0B,UAAM,2BAAY,sBAAuB,GAAG;;;ADC5E,SAAS,uBAA4C;AAAA,EAC3D;AAAA,EACA,GAAG;AACJ,GAAiD;AAChD,QAAM,EAAE,YAAY,QAAI,yCAAW;AAEnC,QAAM,EAAE,OAAO,MAAM,UAAU,aAAa,GAAG,YAAY,QAAI,sCAAc,gCAAiC;AAC9G,QAAM,cAAc,sBAAsB;AAC1C,QAAM,mBAAmB,oBAAqB,WAAY;AAE1D,MAAK,CAAE,aAAc;AACpB,WAAO;AAAA,EACR;AAEA,MAAK,CAAE,OAAO,cAAe;AAC5B,UAAM,IAAI,MAAO,0BAA2B;AAAA,EAC7C;AAEA,QAAMC,uBAAsB,YAAY,QAAQ;AAEhD,QAAM,sBAAsB,CAAE,aAAuD;AACpF,UAAMC,aAAY;AAAA,MACjB,GAAG;AAAA,MACH,cAAc,SAAU,IAAK;AAAA,IAC9B;AAEA,aAAUA,UAAU;AACpB,0BAAuB,aAAaA,UAAU;AAAA,EAC/C;AAEA,QAAM,kBAAkB,YAAY,YAAa,IAAK;AAEtD,QAAM,eAAW,uDAA0B;AAAA,IAC1C,QAAQ;AAAA,MACP,CAAE,IAAK,GACND,wBAAuB,mBACpB,gCAAiC,iBAAiB,MAAO,MAAM,YAAa,CAAE,KAAK,kBACnF;AAAA,IACL;AAAA,EACD,CAAE;AAEF,QAAM,YACLA,wBACK,MAAM,cAAc,OAA8C,iBACpE,MAAM;AAGV,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;AAAA,QACP,CAAE,IAAK,GAAG;AAAA,MACX;AAAA,MACA,aAAc;AAAA;AAAA,IAEd,sCAAC,2CAAgB,QAChB,sCAAC,uDAA4B,cAAe,CAAC,KAC5C,sCAAC,mBAAkB,GAAK,OAAe,CACxC,CACD;AAAA,EACD,CACD;AAEF;;;AEtFA,IAAAE,UAAuB;AACvB,IAAAC,0BAA6B;AAC7B,IAAAC,+BAA2B;AAC3B,IAAAC,2BAAgC;AAEhC,IAAAC,cAA0E;AAC1E,IAAAC,gBAAmB;;;ACLnB,IAAAC,iBAA+D;AAC/D,IAAAC,gBAAiC;AAyB1B,SAAS,mBAAoB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,GAAwC;AACvC,QAAM,mBAAmB,2BAAwB,eAAAC,YAAS,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,QAAQ,oBAAoB,SAAS,eAAe,IAAI;AAAA,IAC/D,iBAAiB;AAAA,IACjB,WAAW,yBAAyB,WAAW;AAAA,EAChD;AAEA,QAAM,kBAAmC;AAAA,IACxC,aAAa,yBAAyB,mBAAe,gCAAkB,MAAO;AAAA,IAC9E;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACD;AAEA,QAAM,+BAA+B;AAAA,IACpC,EAAE,GAAG,kBAAkB,QAAQ,mBAAmB;AAAA,IAClD;AAAA,EACD;AAEA,QAAM,QAAQ;AAAA,IACb,GAAG,6BAA6B;AAAA,IAChC,CAAE,gBAAgB,WAAY,GAAG;AAAA,EAClC;AAEA,MAAI,SAAS,eAAgB,6BAA6B,QAAQ,gBAAgB,gBAAgB,WAAY;AAC9G,WAAS,mBAAoB,QAAQ,cAAe;AAEpD,QAAM,mBAAmB,2BAA2B,wBAAwB,YAAY;AAExF,MAAK,kBAAmB;AACvB,aAAS,oBAAqB,QAAQ,wBAAwB,SAAS,gBAAgB,WAAY;AAAA,EACpG;AAEA,qBAAAC;AAAA,IACC,MAAM,QAAQ,oBAAqB;AAAA,MAClC;AAAA,MACA,kBAAkB;AAAA,QACjB;AAAA,QACA;AAAA,MACD;AAAA,IACD,CAAE;AAAA,EACH;AAEA,SAAO;AACR;;;ACjGA,IAAAC,UAAuB;AACvB,IAAAC,iBAA2B;AAC3B,IAAAC,iBAAoC;AACpC,IAAAC,cAA4B;AAC5B,IAAAC,gBAAmB;AAEnB,IAAMC,QAAO;AAEb,IAAM,oBAAgB,oBAAQ,eAAI;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,cAAU,oBAAQ,eAAI;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,gBAAY,2BAAqC,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,oBAAgB,kBAAI,wBAAwB,WAAY,QAAI,kBAAI,yBAAyB,WAAY;AAAA;AAAA,EAGpG,gBAAgB,sCAAC,4BAAU,UAAWA,OAAO,IAAK,sCAAC,2BAAS,UAAWA,OAAO;AACjF,CACD,CACC;;;AC/EF,IAAAC,iBAAuC;AAKhC,SAAS,mBAAoB;AAAA,EACnC;AAAA,EACA;AACD,GAGiC;AAChC,QAAM,mBAAmB,2BAAwB,eAAAC,YAAS,GAAG,WAAY;AAEzE,MAAK,CAAE,kBAAmB;AACzB,WAAO;AAAA,EACR;AAEA,SAAO,iBAAiB,MAAO,WAAY;AAC5C;;;AHFA,IAAM,iBAAiB,CAAE,UAAU,YAAa;AAEzC,SAAS,2BAA2B;AAC1C,QAAM,EAAE,KAAK,QAAI,sCAAa;AAC9B,QAAM,cAAc,sBAAsB;AAC1C,QAAM,mBAAmB,oBAAqB,WAAY;AAE1D,MAAK,CAAE,cAAe,IAAK,KAAK,CAAE,eAAe,CAAE,kBAAmB;AACrE,WAAO;AAAA,EACR;AAEA,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,QAAI,yCAAW;AACf,QAAM,EAAE,OAAO,MAAM,SAAS,QAAI,sCAAa;AAE/C,QAAM,0BAA0B,wBAAwB;AACxD,QAAM,EAAE,OAAO,2BAA2B,UAAU,oBAAoB,QAAI;AAAA,IAC3E;AAAA,EACD;AAMA,QAAM,mBAAmB,6BAA6B;AAEtD,QAAM,iBAAa,2BAAe;AAAA,IACjC,SAAS;AAAA,EACV,CAAE;AAEF,QAAM,mBAAe,yBAAa,UAAW;AAC7C,QAAM,mBAAe,yBAAa,UAAW;AAE7C,QAAM,EAAE,OAAO,QAAI,0CAAgB,IAAK,YAAY,GAAI,KAAK,EAAE,QAAQ,SAAS;AAEhF,QAAM,eAAe,CAAE,EAAE,OAAO,MAAM,MAAgD;AACrF,UAAM,kBAAkB,SAAS,WAAW,CAAC;AAC7C,UAAM,eAAgB,CAAE,mBAAmB,QAAQ,kBAAkB,iBAAkB;AAEvF,UAAM,0BAA0B,mBAC7B,kBAAkB,QAAS,iBAAiB,YAAa,IACzD;AAEH,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,MACA,kBAAkB,yBAAyB;AAAA,IAC5C,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,sCAAC,uBAAQ,WAAU,OAAM,WAAQ,kBAAI,qBAAqB,WAAY,KACrE,sCAAC,aAAY,GAAG,cAAe,QAAS,CAAC,CAAE,aAAa,MAAO,eAAgB,CAAC,CAAE,kBAAmB,CACtG,GACA;AAAA,IAAC;AAAA;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;;;AIpIA,IAAAC,2BAAoE;AACpE,IAAAC,6BAAiC;AACjC,IAAAC,gBAAiC;AAa1B,SAAS,6BAA6B;AAC5C,mDAAkB,SAAS,+BAA+B,CAAE,OAAO,WAAqC;AACvG,wCAAqC,MAAO;AAAA,EAC7C,CAAE;AAEF,mDAAkB,SAAS,2BAA2B,CAAE,OAAO,WAAqC;AACnG,wCAAqC,MAAO;AAAA,EAC7C,CAAE;AAEF,mDAAkB,SAAS,4BAA4B,CAAE,OAAO,WAAqC;AACpG,wCAAqC,MAAO;AAAA,EAC7C,CAAE;AACH;AAEO,SAAS,oCAAqC,QAAkC;AACtF,QAAM,aAAa,MAAM,QAAS,MAAO,IAAI,SAAS,CAAE,MAAO;AAE/D,aAAW,QAAS,CAAE,cAAe;AACpC,oCAAiC,UAAU,EAAG;AAAA,EAC/C,CAAE;AACH;AAEA,SAAS,gCAAiC,WAAoB;AAC7D,QAAM,gBAAY,uCAAc,SAAU;AAE1C,MAAK,CAAE,WAAY;AAClB;AAAA,EACD;AAEA,iBAAgB,SAAU,EAAE,QAAS,sBAAuB;AAC7D;AAEA,SAAS,eAAgB,WAAoC;AAC5D,QAAM,YAAa,UAAU,YAAY,CAAC,GAAI,QAAS,cAAe,KAAK,CAAC;AAE5E,SAAO,CAAE,WAAW,GAAG,QAAS;AACjC;AAEA,SAAS,uBAAwB,SAAqB;AACrD,MAAK,CAAE,oBAAqB,QAAQ,MAAM,OAAO,CAAE,GAAI;AACtD;AAAA,EACD;AAEA,QAAM,WAAW,QAAQ,UAAU,OAAO,KAAK,CAAC;AAEhD,MAAK,CAAE,aAAc,QAAS,GAAI;AACjC;AAAA,EACD;AAEA,QAAM,oBAAoB,SAAS;AACnC,QAAM,YAAY,kBAAkB,MAAM;AAE1C,QAAM,eAAe,UAAU,MAAM,IAAK,CAAE,aAAc;AACzD,QAAK,CAAE,sCAAsC,QAAS,QAAS,GAAI;AAClE,aAAO;AAAA,IACR;AAEA,WAAO;AAAA,MACN,GAAG;AAAA,MACH,OAAO;AAAA,QACN,GAAG,SAAS;AAAA,QACZ,kBAAc,gCAAkB,MAAO;AAAA,MACxC;AAAA,IACD;AAAA,EACD,CAAE;AAEF,QAAM,uBAAuB;AAAA,IAC5B,GAAG;AAAA,IACH,OAAO;AAAA,MACN,GAAG,kBAAkB;AAAA,MACrB,WAAW;AAAA,QACV,GAAG;AAAA,QACH,OAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,sDAAuB;AAAA,IACtB,IAAI,QAAQ;AAAA,IACZ,OAAO,EAAE,oBAAoB,qBAAqB;AAAA,IAClD,aAAa;AAAA,EACd,CAAE;AACH;AAEA,SAAS,aAAc,UAIrB;AACD,MAAK,CAAE,8BAA8B,QAAS,UAAU,kBAAmB,GAAI;AAC9E,WAAO;AAAA,EACR;AAEA,QAAM,oBAAoB,8BAA8B,QAAS,UAAU,kBAAmB;AAE9F,QAAM,YAAY,mBAAmB;AAErC,MAAK,CAAE,uCAAuC,QAAS,SAAU,GAAI;AACpE,WAAO;AAAA,EACR;AAEA,QAAM,iBAAiB,WAAW;AAElC,SAAO,CAAC,CAAE,gBAAgB;AAC3B;;;ACvHA,IAAAC,qBAA+B;;;ACA/B,IAAAC,wBAA0D;AAC1D,IAAAC,2BAAkF;AAClF,wBAA4C;AAE5C,IAAAC,sBAA2B;AAC3B,IAAAC,iBAAkB;AAClB,IAAAC,gBAAiC;AAMjC,IAAM,cAAc;AAAA,EACnB,YAAY,iBACV,OAAO,EACP;AAAA,IACA;AAAA,EAED;AAAA,EACD,gBAAgB,iBACd,OAAO,EACP,SAAU,6FAA8F;AAAA,EAC1G,mBAAmB,iBACjB,OAAQ;AAAA,IACR,OAAO,iBAAE;AAAA,MACR,iBAAE,OAAQ;AAAA,QACT,WAAW,iBACT,OAAO,EACP,SAAU,oEAAqE;AAAA,QACjF,SAAS,iBACP,OAAO,EACP;AAAA,UACA;AAAA,QACD;AAAA,MACF,CAAE;AAAA,IACH;AAAA,EACD,CAAE,EACD,SAAS,EACT;AAAA,IACA;AAAA,EAED;AACF;AAEA,IAAM,eAAe;AAAA,EACpB,SAAS,iBAAE,OAAO,EAAE,SAAS,EAAE,SAAU,mDAAoD;AAAA,EAC7F,eAAe,iBACb,OAAO,EACP,SAAS,EACT,SAAU,gFAAiF;AAC9F;AAEO,IAAMC,kBAAiB;AAAA,EAC7B,mBAAmB;AAAA,EACnB,0BAA0B,CAAE,eAC3B,8CAA+C,WAAW,KAAM,IAAK,CAAE;AAAA,EACxE,mBAAmB;AACpB;AAEO,IAAM,wBAAwB,OAAQ,WAA0D;AACtG,QAAM,EAAE,YAAY,WAAW,gBAAgB,eAAe,mBAAmB,sBAAsB,IAAI;AAC3G,QAAM,oBAAoB,qBAAqB;AAC/C,QAAM,gBAAY,uCAAc,SAAU;AAE1C,MAAK,CAAE,WAAY;AAClB,UAAM,IAAI,MAAOA,gBAAe,iBAAkB;AAAA,EACnD;AAEA,QAAM,SAAS,UAAU,MAAM,IAAK,QAAS;AAE7C,MAAK,CAAE,kBAAkB,SAAU,MAAO,GAAI;AAC7C,UAAM,IAAI,MAAOA,gBAAe,yBAA0B,iBAAkB,CAAE;AAAA,EAC/E;AAEA,QAAM,UAAU,UAAU,MAAM,OAAQ,EAAE,QAAQ,CAAE,SAAU,EAAE,CAAE;AAElE,MAAK,SAAS,UAAW;AACxB,UAAM,IAAI,MAAOA,gBAAe,iBAAkB;AAAA,EACnD;AAEA,QAAM,mBAAmB,wBACtB,uBAAwB,uBAAuB,OAAQ,IACvD;AAEH,MAAK,kBAAmB;AACvB,0CAAuC,SAAS,gBAAiB;AAAA,EAClE;AAEA,QAAM,UAAM,gCAAkB,WAAY;AAE1C,MAAI;AACH,UAAM,UAAU,SAAU;AAAA,MACzB,OAAO;AAAA,QACN,EAAE,KAAK,OAAO,eAAe,UAAU,CAAE,OAAQ,GAAG,UAAU,EAAE,mBAAmB,iBAAiB,EAAE;AAAA,MACvG;AAAA,IACD,CAAE;AAAA,EACH,SAAU,OAAiB;AAC1B,QAAK,iBAAiB,gCAAa;AAClC,YAAM,IAAI,MAAO,MAAM,UAAU,KAAK,MAAO;AAAA,IAC9C;AACA,UAAM,IAAI,MAAO,eAAgB;AAAA,EAClC;AAEA,6BAA4B,eAAe,SAAS,MAAM,kBAAkB,GAAI;AAEhF,SAAO;AAAA,IACN,QAAQ;AAAA,IACR,SAAS,cAAe,aAAc;AAAA,IACtC,eAAe;AAAA,EAChB;AACD;AAEA,SAAS,uBACR,OACA,aACmB;AACnB,QAAM,gBAA6C,CAAC;AACpD,QAAM,qBAAiB,gCAAkB,OAAQ;AAEjD,SAAO,QAAS,MAAM,KAAM,EAAE,QAAS,CAAE,CAAE,EAAE,IAAK,MAAO;AACxD,UAAM,EAAE,WAAW,QAAQ,IAAI;AAC/B,UAAM,UAAU,gBAAiB,aAAa,SAAU;AAExD,QAAK,CAAE,SAAU;AAChB,YAAM,IAAI,MAAO,oBAAqB,SAAU,0BAA2B;AAAA,IAC5E;AAEA,UAAM,SAAS,QAAQ;AACvB,UAAM,aAAa,QAAQ,cAAc,QAAQ;AAGjD,UAAM,kBAAc,yCAAgB,UAAW;AAE/C,QAAK,CAAE,aAAc;AACpB,YAAM,IAAI;AAAA,QACT,iBAAkB,UAAW,+EACA,OAAQ,kBAAmB,SAAU;AAAA,MACnE;AAAA,IACD;AAEA,QAAK,CAAE,YAAY,YAAa,OAAQ,GAAI;AAC3C,YAAM,iBAAiB,OAAO,KAAM,YAAY,WAAY,EAAE,KAAM,IAAK;AACzE,YAAM,IAAI;AAAA,QACT,aAAc,OAAQ,gCAAiC,SAAU,YAAa,UAAW,4BAC9D,cAAe;AAAA,MAC3C;AAAA,IACD;AAEA,UAAM,kBAAc,gCAAkB,MAAO;AAC7C,UAAM,cAAc,QAAQ,WAAY,OAAQ,IAC3C,QAAQ,SAAU,OAAQ,IAC5B,YAAY,YAAa,OAAQ,EAAE,WAAW;AAEjD,UAAM,QAAQ,cAAe,OAAQ;AAErC,kBAAe,WAAY,IAAI;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,IACV;AAAA,EACD,CAAE;AAEF,SAAO;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,MACP,OAAO;AAAA,QACN,CAAE,cAAe,GAAG;AAAA,UACnB,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,OAAO,OAAO,KAAM,aAAc;AAAA,QACnC;AAAA,MACD;AAAA,MACA,OAAO,CAAE,cAAe;AAAA,IACzB;AAAA,EACD;AACD;AAEA,SAAS,sCAAuC,aAA4B,kBAAqC;AAChH,SAAO,OAAQ,iBAAiB,KAAM,EAAE,QAAS,CAAE,SAAU;AAC5D,UAAM,UAAU,gBAAiB,aAAa,KAAK,SAAU;AAE7D,QAAK,CAAE,WAAW,CAAE,QAAQ,UAAW;AACtC;AAAA,IACD;AAEA,YAAQ,SAAU,KAAK,OAAQ,IAAI;AAAA,MAClC,QAAQ;AAAA,MACR,OAAO;AAAA,QACN,cAAc,KAAK;AAAA,QACnB,cAAc,KAAK;AAAA,MACpB;AAAA,IACD;AAAA,EACD,CAAE;AACH;AAEA,SAAS,gBAAiB,MAAqB,UAAyC;AACvF,MAAK,KAAK,OAAO,UAAW;AAC3B,WAAO;AAAA,EACR;AAEA,MAAK,KAAK,UAAW;AACpB,eAAY,SAAS,KAAK,UAAW;AACpC,YAAM,QAAQ,gBAAiB,OAAO,QAAS;AAC/C,UAAK,OAAQ;AACZ,eAAO;AAAA,MACR;AAAA,IACD;AAAA,EACD;AAEA,SAAO;AACR;AAEA,SAAS,cAAe,SAA0B;AACjD,QAAM,eAAW,gCAAkB,MAAO;AAC1C,SAAO,GAAI,QAAS,MAAO,OAAQ;AACpC;AAEA,SAAS,uBAAiC;AACzC,QAAM,YAAQ,0CAAgB;AAE9B,MAAK,CAAE,OAAQ;AACd,WAAO,CAAC;AAAA,EACT;AAEA,SAAO,OAAO,QAAS,KAAM,EAAE,OAAQ,CAAE,KAAK,CAAE,MAAM,KAAM,MAAO;AAClE,QAAK,CAAE,MAAM,uBAAuB,CAAE,MAAM,iBAAiB,MAAM,WAAW,UAAW;AACxF,aAAO;AAAA,IACR;AAEA,QAAI,KAAM,IAAK;AACf,WAAO;AAAA,EACR,GAAG,CAAC,CAAc;AACnB;AAEA,IAAM,iBAAiB,MAAM;AAC5B,QAAM,4BAAwB,+BAAa,mBAAoB;AAE/D,wBAAsB,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgB7B,4CAAuB;AAAA;AAAA;AAAA;AAAA,MAIvB,uCAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAMT,4CAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAUtB,4CAAuB;AAAA;AAAA;AAAA;AAAA,gBAIvB,uCAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4FAkB0D,uCAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,CAK7G;AAED,wBAAsB;AAAA,IACrB;AAAA,IACA;AAAA,WACU,4CAAuB;AAAA,EAClC;AAEA,wBAAsB;AAAA,IACrB;AAAA,IACA;AAAA;AAAA,EAED;AAEA,wBAAsB;AAAA,IACrB;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UAeS,4CAAuB;AAAA,UACvB,uCAAkB;AAAA;AAAA;AAAA,EAG5B;AAEA,wBAAsB,QAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAgC9B;AAED,wBAAsB;AAAA,IACrB;AAAA,EACD;AAEA,wBAAsB;AAAA,IACrB;AAAA,EACD;AAEA,SAAO,sBAAsB,OAAO;AACrC;AAEO,IAAM,0BAA0B,MAAM;AAC5C,aAAO,kCAAgB,YAAa,EAAE,QAAS;AAAA,IAC9C,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,cAAc;AAAA,IACd,aAAa,eAAe;AAAA,IAC5B,SAAS;AAAA,EACV,CAAE;AACH;;;ADvYO,SAAS,UAAU;AACzB,QAAM,EAAE,kBAAkB,QAAI,mCAAgB,YAAa;AAE3D;AAAA,IACC;AAAA;AAAA,EAED;AAEA,0BAAwB;AACzB;;;AEbA,IAAAC,iBAA0B;AAC1B,IAAAC,iBAAuC;AAIhC,SAAS,gBAAgB;AAC/B,gCAAW,MAAM;AAChB,uBAAAC,YAAU,eAAe,CAAE;AAAA,EAC5B,GAAG,CAAC,CAAE;AAEN,SAAO;AACR;;;ACXA,IAAAC,iBAAuC;AAKhC,SAAS,sBAAuBC,KAAa;AACnD,YAAU,+BAAgCA,GAAG;AAC7C,qBAAAC,YAAU,MAAM,QAAQ,aAAc,EAAE,IAAAD,IAAG,CAAE,CAAE;AAChD;;;ACRA,sCAAqC;AACrC,IAAAE,iBAAyF;AAIlF,IAAM,+BAA2B,sDAAsB;AAAA,EAC7D,KAAK;AAAA,EACL,UAAU;AAAA,EACV,WAAW,CAAE,WACZ,eAAAC;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,qBAAkB,eAAAC,YAAS,CAAE;AAAA,IACrC;AAAA,IACA,KAAK,CAAEC,QAAQ;AACd,aAAO,qBAAkB,eAAAD,YAAS,CAAE,EAAE,KAAM,CAAE,UAAW,MAAM,OAAOC,GAAG,KAAK;AAAA,IAC/E;AAAA,EACD;AACD,CAAE;;;ACvBF,IAAAC,2BAA0D;AAC1D,IAAAC,iBAA+D;AAO/D,eAAsB,2BAA4B;AAAA,EACjD;AAAA,EACA;AACD,GAGI;AACH,QAAM,wBAAwB,gCAA6B,eAAAC,YAAS,CAAE;AAEtE,MAAK,CAAE,sBAAsB,QAAS;AACrC;AAAA,EACD;AAEA,MAAI;AACH,UAAM,mBAAmB,MAAM,iBAAkB,uBAAuB,MAAO;AAE/E,6BAA0B,UAAU,gBAAiB;AAErD,uBAAAC;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,UACf,kBAAkB,UAAU,mBAAmB,UAAU,mBAAmB;AAAA,QAC7E,EAAI;AAAA,MACL;AAAA,IACD;AACA,uBAAAA,YAAU,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,MACpB,UAAU,UAAU,mBAAmB,EAAE,mBAAmB,UAAU,iBAAiB,IAAI;AAAA,IAC5F,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,oBAA+C,OAC3F,aAAa;AAEhB,QAAK,sBAAsB,iBAAiB,IAAK,mBAAmB,SAAS,CAAE,GAAI;AAClF,aAAO;AAAA,QACN,cAAc;AAAA,QACd,gBAAgB,iBAAiB,IAAK,mBAAmB,SAAS,CAAE;AAAA,MACrE;AAAA,IACD;AAAA,EACD;AACA,SAAO,EAAE,cAAc,OAAO,gBAAgB,KAAK;AACpD;AAEA,SAAS,yBAA0B,WAAmB,aAA4B;AACjF,sDAAuB;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;;;AC3GA,IAAAC,iBAAuC;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,2BAAwB,eAAAC,YAAS,GAAG,gBAAgB,EAAG;AAChF,MAAK,kBAAmB;AACvB,cAAU,SAAS,IAAK,qBAAqB,gBAAiB;AAAA,EAC/D;AACD;;;ACtBA,kCAA8C;AAC9C,IAAAC,iBAAuC;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,6BAA0B,eAAAC,YAAS,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,8CAAQ,mBAAoB,SAAU,CAAE;AAAA,IACzC;AAEA,QAAK,YAAa;AACjB,8CAAQ,oBAAqB,UAAW,CAAE;AAAA,IAC3C;AAAA,EACD,SAAU,OAAQ;AACjB,UAAM,IAAI,MAAO,yCAA0C,KAAM,EAAG;AAAA,EACrE;AACD;;;AC3CA,IAAAC,4BAAgC;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,OAAQ,yCAAgB,EACxB,IAAK,CAAE,aAAc,SAAS,EAAG;AAEnC,MAAK,SAAS,WAAW,GAAI;AAC5B;AAAA,EACD;AAEA,QAAM,UAAU,eAAgB,UAAU,SAAU;AAEpD,WAAS,QAAS,CAAEC,QAAQ,gCAAiCA,GAAG,CAAE;AACnE;;;ACbO,IAAM,aAAa,CAAE,EAAE,WAAW,OAAO,MAAgB;AAC/D,QAAM,WAAW,WAAW,MAAM,IAAK,UAAW,EAAE,SAAS,KAAK,CAAC;AAEnE,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;;;A1FkBO,SAAS,OAAO;AACtB,oDAAiB,SAAU,wBAAyB;AAEpD,qBAAAC,iBAAe,KAAM;AACrB,4BAAAC,iBAAe,KAAyB;AAExC;AAAA,IAAqB;AAAA,IAAuB,CAAE,YAC7C,oBAAqB,EAAE,GAAG,SAAS,mBAAmB,mBAAmB,CAAE;AAAA,EAC5E;AAEA,mDAAkB,cAAc,0BAA0B,CAAE,SAAU;AACrE,UAAM,eAAW,gDAAqB;AACtC,QAAK,SAAS,OAAO,SAAS,yBAA0B;AACvD,WAAK,OAAO;AAAA,IACb;AACA,WAAO;AAAA,EACR,CAAE;AAEF,mDAAkB,SAAS,gBAAgB,aAAc;AAEzD,EAAE,OAAsC,gBAAgB,eAAe;AAEvE,8CAAW;AAAA,IACV,IAAI;AAAA,IACJ,WAAO,kBAAI,cAAc,WAAY;AAAA,IACrC,WAAW;AAAA,EACZ,CAAE;AAEF,mCAAe;AAAA,IACd,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,qCAAiB;AAAA,IAChB,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,mCAAe;AAAA,IACd,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,6DAA0B;AAAA,IACzB,IAAI;AAAA,IACJ,WAAW;AAAA,EACZ,CAAE;AAEF,mDAAkB,SAAS,mCAAmC,YAAY;AACzE,UAAM,EAAE,IAAAC,KAAI,OAAO,QAAI,gDAAqB;AAE5C,QAAKA,KAAK;AACT,4BAAuBA,GAAG;AAAA,IAC3B;AAEA,UAAM,qBAAwB,QAAQ,YAAiC,CAAC,CAAE;AAAA,EAC3E,CAAE;AAEF,2DAAwB;AAAA,IACvB,WAAW,wCAAW;AAAA,IACtB,IAAI;AAAA,IACJ,UAAU;AAAA,IACV,WAAW;AAAA,EACZ,CAAE;AAEF,+DAA4B;AAAA,IAC3B,WAAW;AAAA,IACX,WAAW,CAAE,EAAE,MAAM,MAAO,iCAAiC,QAAS,KAAM;AAAA,EAC7E,CAAE;AAEF,oEAAiC;AAAA,IAChC,IAAI;AAAA,IACJ,WAAW,CAAE,GAAG,gBAAiB,YAAY,QAAQ;AAAA,IACrD,WAAW;AAAA,EACZ,CAAE;AAEF,qDAA6B,SAAU,sBAAsB,4BAA6B;AAC1F,qDAA6B,SAAU,eAAe,+BAAgC;AACtF,qDAA6B,SAAU,YAAY,4BAA6B;AAEhF,6BAA2B;AAE3B,UAAQ;AACT;","names":["import_editor_canvas","import_editor_documents","import_editor_editing_panel","import_editor_panels","import_editor_styles_repository","import_editor_v1_adapters","import_store","import_i18n","import_store","import_store","id","createAsyncThunk","createSlice","useSelector","createSelector","id","id","getState","import_editor_canvas","import_editor_canvas","React","import_editor_documents","import_icons","import_ui","import_i18n","import_editor_documents","import_store","import_editor_v1_adapters","runCommand","useSelector","React","import_editor_elements","import_editor_panels","import_editor_ui","import_ui","import_i18n","React","import_react","import_editor_documents","import_icons","import_ui","import_utils","import_i18n","import_store","getState","dispatch","import_store","id","getState","dispatch","import_store","getState","dispatch","import_store","getState","dispatch","import_store","getState","dispatch","import_store","getState","dispatch","import_store","useOverridableProps","useSelector","React","import_react","import_ui","import_i18n","import_i18n","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_elements","import_icons","import_ui","React","import_react","import_editor_ui","import_ui","import_i18n","React","import_icons","import_ui","id","import_react","import_editor_documents","import_editor_ui","import_i18n","import_store","getState","dispatch","import_i18n","useOverridableProps","id","useOverridableProps","createPanel","useEditingPanelActions","React","import_react","import_icons","import_ui","import_i18n","useOverridableProps","React","import_editor_ui","React","import_icons","import_ui","import_i18n","React","import_react","import_utils","React","import_icons","import_ui","import_i18n","import_store","useSelector","React","import_editor_canvas","import_editor_elements","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_documents","import_store","getStore","dispatch","import_editor_documents","import_editor_canvas","import_editor_documents","import_i18n","import_store","getState","import_store","getState","dispatch","import_store","getState","id","dispatch","import_editor_elements","import_editor_elements","React","import_ui","React","import_react","import_editor_elements","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_v1_adapters","import_store","import_utils","dispatch","runCommand","import_react","import_i18n","Form","validateForm","FormElement","React","import_react","import_editor_documents","import_editor_v1_adapters","import_store","import_utils","import_editor_documents","import_store","dispatch","getStore","React","import_react","import_i18n","import_editor_canvas","import_editor_v1_adapters","useListenTo","import_react","import_utils","useSelector","listenTo","id","React","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_controls","import_editor_editing_panel","import_editor_elements","import_editor_panels","import_icons","import_ui","import_i18n","import_editor_editing_panel","import_editor_elements","import_editor_props","import_schema","import_editor_props","import_schema","import_schema","import_editor_props","import_schema","React","import_icons","import_ui","import_i18n","EmptyState","React","import_react","import_editor_editing_panel","import_editor_ui","import_ui","React","import_editor_controls","import_editor_editing_panel","import_ui","import_editor_elements","import_store","getState","dispatch","import_editor_elements","React","import_editor_controls","import_ui","id","EmptyState","React","import_editor_controls","import_editor_editing_panel","React","import_react","isComponentInstance","propValue","React","import_editor_controls","import_editor_editing_panel","import_editor_elements","import_ui","import_i18n","import_store","import_utils","getState","dispatch","React","import_react","import_icons","import_ui","import_i18n","SIZE","import_store","getState","Content","import_editor_elements","import_editor_v1_adapters","import_utils","import_editor_mcp","import_editor_canvas","import_editor_elements","import_http_client","import_schema","import_utils","ERROR_MESSAGES","import_react","import_store","dispatch","import_store","id","dispatch","import_store","subscribeWithSelector","getState","id","import_editor_elements","import_store","getState","dispatch","import_store","getState","import_store","getState","import_editor_documents","id","registerSlice","registerPanel","id"]}