@elementor/editor-variables 3.35.0-469 → 3.35.0-471

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/components/variables-manager/variables-manager-panel.tsx","../src/utils/tracking.ts","../src/utils/validations.ts","../src/variables-registry/create-variable-type-registry.ts","../src/transformers/inheritance-transformer.tsx","../src/components/ui/color-indicator.tsx","../src/prop-types/color-variable-prop-type.ts","../src/service.ts","../src/api.ts","../src/batch-operations.ts","../src/storage.ts","../src/prop-types/font-variable-prop-type.ts","../src/sync/enqueue-font.ts","../src/create-style-variables-repository.ts","../src/style-variables-repository.ts","../src/transformers/utils/resolve-css-variable.ts","../src/transformers/variable-transformer.ts","../src/variables-registry/variable-type-registry.ts","../src/components/ui/delete-confirmation-dialog.tsx","../src/components/ui/empty-state.tsx","../src/hooks/use-permissions.ts","../src/components/ui/no-search-results.tsx","../src/components/variables-manager/hooks/use-auto-edit.ts","../src/components/variables-manager/hooks/use-error-navigation.ts","../src/components/variables-manager/hooks/use-variables-manager-state.ts","../src/hooks/use-prop-variables.ts","../src/context/variable-type-context.tsx","../src/utils/filter-by-search.ts","../src/utils/variables-to-list.ts","../src/components/variables-manager/variables-manager-create-menu.tsx","../src/sync/license-info.ts","../src/hooks/use-quota-permissions.ts","../src/components/variables-manager/variables-manager-table.tsx","../src/components/fields/label-field.tsx","../src/components/variables-manager/ui/variable-edit-menu.tsx","../src/components/variables-manager/ui/variable-table-cell.tsx","../src/components/variables-manager/variable-editable-cell.tsx","../src/controls/variable-control.tsx","../src/components/ui/variable/assigned-variable.tsx","../src/utils/unlink-variable.ts","../src/components/variable-selection-popover.tsx","../src/context/variable-selection-popover.context.tsx","../src/components/variable-creation.tsx","../src/hooks/use-initial-value.ts","../src/hooks/use-variable-bound-prop.ts","../src/components/ui/form-field.tsx","../src/components/variable-edit.tsx","../src/components/ui/edit-confirmation-dialog.tsx","../src/components/variables-selection.tsx","../src/components/ui/menu-item-content.tsx","../src/components/ui/styled-menu-list.tsx","../src/components/ui/tags/assigned-tag.tsx","../src/components/ui/variable/deleted-variable.tsx","../src/components/variable-restore.tsx","../src/components/ui/deleted-variable-alert.tsx","../src/components/ui/tags/warning-variable-tag.tsx","../src/components/ui/variable/mismatch-variable.tsx","../src/components/ui/mismatch-variable-alert.tsx","../src/components/ui/variable/missing-variable.tsx","../src/components/ui/missing-variable-alert.tsx","../src/hooks/use-prop-variable-action.tsx","../src/mcp/create-variable-tool.ts","../src/mcp/delete-variable-tool.ts","../src/mcp/update-variable-tool.ts","../src/mcp/variables-resource.ts","../src/mcp/index.ts","../src/register-variable-types.tsx","../src/components/fields/color-field.tsx","../src/components/fields/font-field.tsx","../src/prop-types/size-variable-prop-type.ts","../src/transformers/empty-transformer.tsx","../src/renderers/style-variables-renderer.tsx","../src/repeater-injections.ts","../src/components/variables-repeater-item-slot.tsx","../src/utils/llm-propvalue-label-resolver.ts"],"sourcesContent":["export { init } from './init';\nexport { GLOBAL_VARIABLES_URI } from './mcp/variables-resource';\nexport { sizeVariablePropTypeUtil } from './prop-types/size-variable-prop-type';\nexport { registerVariableTypes } from './register-variable-types';\nexport { service } from './service';\nexport { registerVariableType } from './variables-registry/variable-type-registry';\n\nimport { globalVariablesLLMResolvers } from './utils/llm-propvalue-label-resolver';\n\nexport const Utils = {\n\tglobalVariablesLLMResolvers,\n} as const;\n","import { injectIntoTop } from '@elementor/editor';\nimport { controlActionsMenu, registerControlReplacement } from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { isTransformable, type PropValue } from '@elementor/editor-props';\n\nimport { panel } from './components/variables-manager/variables-manager-panel';\nimport { VariableControl } from './controls/variable-control';\nimport { usePropVariableAction } from './hooks/use-prop-variable-action';\nimport { initMcp } from './mcp';\nimport { registerVariableTypes } from './register-variable-types';\nimport { StyleVariablesRenderer } from './renderers/style-variables-renderer';\nimport { registerRepeaterInjections } from './repeater-injections';\nimport { service as variablesService } from './service';\nimport { hasVariableType } from './variables-registry/variable-type-registry';\n\nconst { registerPopoverAction } = controlActionsMenu;\n\nexport function init() {\n\tregisterVariableTypes();\n\tregisterRepeaterInjections();\n\n\tregisterControlReplacement( {\n\t\tcomponent: VariableControl,\n\t\tcondition: ( { value, placeholder } ) => {\n\t\t\tif ( hasVariableAssigned( value ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ( value ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn hasVariableAssigned( placeholder );\n\t\t},\n\t} );\n\n\tregisterPopoverAction( {\n\t\tid: 'variables',\n\t\tuseProps: usePropVariableAction,\n\t} );\n\n\tvariablesService.init().then( () => {\n\t\tinitMcp();\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'canvas-style-variables-render',\n\t\tcomponent: StyleVariablesRenderer,\n\t} );\n\n\tregisterPanel( panel );\n}\n\nfunction hasVariableAssigned( value: PropValue ) {\n\tif ( isTransformable( value ) ) {\n\t\treturn hasVariableType( value.$$type );\n\t}\n\n\treturn false;\n}\n","import * as React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport {\n\t__createPanel as createPanel,\n\tPanel,\n\tPanelBody,\n\tPanelFooter,\n\tPanelHeader,\n\tPanelHeaderTitle,\n} from '@elementor/editor-panels';\nimport { SaveChangesDialog, SearchField, ThemeProvider, useDialog } from '@elementor/editor-ui';\nimport { changeEditMode } from '@elementor/editor-v1-adapters';\nimport { AlertTriangleFilledIcon, ColorFilterIcon, TrashIcon } from '@elementor/icons';\nimport {\n\tAlert,\n\tAlertAction,\n\tAlertTitle,\n\tButton,\n\tCloseButton,\n\tDivider,\n\tInfotip,\n\tStack,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { trackVariablesManagerEvent } from '../../utils/tracking';\nimport { type ErrorResponse, type MappedError, mapServerError } from '../../utils/validations';\nimport { getVariableType } from '../../variables-registry/variable-type-registry';\nimport { DeleteConfirmationDialog } from '../ui/delete-confirmation-dialog';\nimport { EmptyState } from '../ui/empty-state';\nimport { NoSearchResults } from '../ui/no-search-results';\nimport { useAutoEdit } from './hooks/use-auto-edit';\nimport { useErrorNavigation } from './hooks/use-error-navigation';\nimport { useVariablesManagerState } from './hooks/use-variables-manager-state';\nimport { SIZE, VariableManagerCreateMenu } from './variables-manager-create-menu';\nimport { VariablesManagerTable } from './variables-manager-table';\n\nconst id = 'variables-manager';\n\nexport const { panel, usePanelActions } = createPanel( {\n\tid,\n\tcomponent: VariablesManagerPanel,\n\tallowedEditModes: [ 'edit', id ],\n\tonOpen: () => {\n\t\tchangeEditMode( id );\n\t},\n\tonClose: () => {\n\t\tchangeEditMode( 'edit' );\n\t},\n\tisOpenPreviousElement: true,\n} );\n\nexport function VariablesManagerPanel() {\n\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst createMenuState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\tconst {\n\t\tvariables,\n\t\tisDirty,\n\t\tsearchValue,\n\t\tisSaveDisabled,\n\t\thandleOnChange,\n\t\tcreateVariable,\n\t\thandleDeleteVariable,\n\t\thandleSave,\n\t\tisSaving,\n\t\thandleSearch,\n\t\tsetIsSaving,\n\t\tsetIsSaveDisabled,\n\t} = useVariablesManagerState();\n\n\tconst { autoEditVariableId, startAutoEdit, handleAutoEditComplete } = useAutoEdit();\n\tconst { createNavigationCallback, resetNavigation } = useErrorNavigation();\n\n\tconst [ deleteConfirmation, setDeleteConfirmation ] = useState< { id: string; label: string } | null >( null );\n\tconst [ serverError, setServerError ] = useState< MappedError | null >( null );\n\n\tusePreventUnload( isDirty );\n\n\tconst handleClosePanel = () => {\n\t\tif ( isDirty ) {\n\t\t\topenSaveChangesDialog();\n\t\t\treturn;\n\t\t}\n\n\t\tclosePanel();\n\t};\n\n\tconst handleCreateVariable = useCallback(\n\t\t( type: string, defaultName: string, defaultValue: string ) => {\n\t\t\tconst newId = createVariable( type, defaultName, defaultValue );\n\t\t\tif ( newId ) {\n\t\t\t\tstartAutoEdit( newId );\n\t\t\t}\n\t\t},\n\t\t[ createVariable, startAutoEdit ]\n\t);\n\n\tconst handleSaveClick = async () => {\n\t\ttry {\n\t\t\tsetServerError( null );\n\t\t\tresetNavigation();\n\n\t\t\tconst result = await handleSave();\n\t\t\ttrackVariablesManagerEvent( { action: 'saveChanges' } );\n\t\t\treturn result;\n\t\t} catch ( error ) {\n\t\t\tconst mappedError = mapServerError( error as ErrorResponse );\n\t\t\tconst duplicatedIds = mappedError?.action?.data?.duplicatedIds;\n\n\t\t\tif ( mappedError && 'label' === mappedError.field ) {\n\t\t\t\tif ( duplicatedIds && mappedError.action ) {\n\t\t\t\t\tmappedError.action.callback = createNavigationCallback( duplicatedIds, startAutoEdit, () => {\n\t\t\t\t\t\tsetIsSaveDisabled( false );\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tsetServerError( mappedError );\n\t\t\t\tsetIsSaveDisabled( true );\n\t\t\t\tresetNavigation();\n\t\t\t}\n\n\t\t\treturn { success: false, error: mappedError };\n\t\t} finally {\n\t\t\tsetIsSaving( false );\n\t\t}\n\t};\n\n\tconst handleDeleteVariableWithConfirmation = useCallback(\n\t\t( itemId: string ) => {\n\t\t\thandleDeleteVariable( itemId );\n\t\t\tsetDeleteConfirmation( null );\n\t\t},\n\t\t[ handleDeleteVariable ]\n\t);\n\n\tconst menuActions = [\n\t\t{\n\t\t\tname: __( 'Delete', 'elementor' ),\n\t\t\ticon: TrashIcon,\n\t\t\tcolor: 'error.main',\n\t\t\tonClick: ( itemId: string ) => {\n\t\t\t\tconst variable = variables[ itemId ];\n\t\t\t\tif ( variable ) {\n\t\t\t\t\tsetDeleteConfirmation( { id: itemId, label: variable.label } );\n\n\t\t\t\t\tconst variableTypeOptions = getVariableType( variable.type );\n\t\t\t\t\ttrackVariablesManagerEvent( { action: 'delete', varType: variableTypeOptions?.variableType } );\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t];\n\n\tconst hasVariables = Object.keys( variables ).length > 0;\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Panel>\n\t\t\t\t<PanelHeader\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\theight: 'unset',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Stack width=\"100%\" direction=\"column\" alignItems=\"center\">\n\t\t\t\t\t\t<Stack p={ 1 } pl={ 2 } width=\"100%\" direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t\t<Stack width=\"100%\" direction=\"row\" gap={ 1 }>\n\t\t\t\t\t\t\t\t<PanelHeaderTitle sx={ { display: 'flex', alignItems: 'center', gap: 0.5 } }>\n\t\t\t\t\t\t\t\t\t<ColorFilterIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t\t{ __( 'Variables Manager', 'elementor' ) }\n\t\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Stack direction=\"row\" gap={ 0.5 } alignItems=\"center\">\n\t\t\t\t\t\t\t\t<VariableManagerCreateMenu\n\t\t\t\t\t\t\t\t\tonCreate={ handleCreateVariable }\n\t\t\t\t\t\t\t\t\tvariables={ variables }\n\t\t\t\t\t\t\t\t\tmenuState={ createMenuState }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\t\t\tslotProps={ { icon: { fontSize: SIZE } } }\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\thandleClosePanel();\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</Stack>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Stack width=\"100%\" direction=\"row\" gap={ 1 }>\n\t\t\t\t\t\t\t<SearchField\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\t\t\t\tonSearch={ handleSearch }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Divider sx={ { width: '100%' } } />\n\t\t\t\t\t</Stack>\n\t\t\t\t</PanelHeader>\n\t\t\t\t<PanelBody\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ hasVariables && (\n\t\t\t\t\t\t<VariablesManagerTable\n\t\t\t\t\t\t\tmenuActions={ menuActions }\n\t\t\t\t\t\t\tvariables={ variables }\n\t\t\t\t\t\t\tonChange={ handleOnChange }\n\t\t\t\t\t\t\tautoEditVariableId={ autoEditVariableId }\n\t\t\t\t\t\t\tonAutoEditComplete={ handleAutoEditComplete }\n\t\t\t\t\t\t\tonFieldError={ setIsSaveDisabled }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! hasVariables && searchValue && (\n\t\t\t\t\t\t<NoSearchResults\n\t\t\t\t\t\t\tsearchValue={ searchValue }\n\t\t\t\t\t\t\tonClear={ () => handleSearch( '' ) }\n\t\t\t\t\t\t\ticon={ <ColorFilterIcon fontSize=\"large\" /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! hasVariables && ! searchValue && (\n\t\t\t\t\t\t<EmptyState\n\t\t\t\t\t\t\ttitle={ __( 'Create your first variable', 'elementor' ) }\n\t\t\t\t\t\t\tmessage={ __(\n\t\t\t\t\t\t\t\t'Variables are saved attributes that you can apply anywhere on your site.',\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\ticon={ <ColorFilterIcon fontSize=\"large\" /> }\n\t\t\t\t\t\t\tonAdd={ createMenuState.open }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\n\t\t\t\t<PanelFooter>\n\t\t\t\t\t<Infotip\n\t\t\t\t\t\tplacement=\"right\"\n\t\t\t\t\t\topen={ !! serverError }\n\t\t\t\t\t\tcontent={\n\t\t\t\t\t\t\tserverError ? (\n\t\t\t\t\t\t\t\t<Alert\n\t\t\t\t\t\t\t\t\tseverity={ serverError.severity ?? 'error' }\n\t\t\t\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t\t\t\tserverError.action?.label ? (\n\t\t\t\t\t\t\t\t\t\t\t<AlertAction onClick={ serverError.action.callback }>\n\t\t\t\t\t\t\t\t\t\t\t\t{ serverError.action.label }\n\t\t\t\t\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t\t\t\t\t) : undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClose={\n\t\t\t\t\t\t\t\t\t\t! serverError.action?.label\n\t\t\t\t\t\t\t\t\t\t\t? () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetServerError( null );\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetIsSaveDisabled( false );\n\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\tserverError.IconComponent ? (\n\t\t\t\t\t\t\t\t\t\t\t<serverError.IconComponent />\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<AlertTriangleFilledIcon />\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>\n\t\t\t\t\t\t\t\t\t<AlertTitle>{ serverError.message }</AlertTitle>\n\t\t\t\t\t\t\t\t\t{ serverError.action?.message }\n\t\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\tarrow={ false }\n\t\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\t\tpopper: {\n\t\t\t\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: 'offset',\n\t\t\t\t\t\t\t\t\t\toptions: { offset: [ -10, 10 ] },\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},\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\tdisabled={ isSaveDisabled || ! isDirty || isSaving }\n\t\t\t\t\t\t\tonClick={ handleSaveClick }\n\t\t\t\t\t\t\tloading={ isSaving }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Infotip>\n\t\t\t\t</PanelFooter>\n\t\t\t</Panel>\n\n\t\t\t{ deleteConfirmation && (\n\t\t\t\t<DeleteConfirmationDialog\n\t\t\t\t\topen\n\t\t\t\t\tlabel={ deleteConfirmation.label }\n\t\t\t\t\tonConfirm={ () => handleDeleteVariableWithConfirmation( deleteConfirmation.id ) }\n\t\t\t\t\tcloseDialog={ () => setDeleteConfirmation( null ) }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<SaveChangesDialog.Title onClose={ closeSaveChangesDialog }>\n\t\t\t\t\t\t{ __( 'You have unsaved changes', 'elementor' ) }\n\t\t\t\t\t</SaveChangesDialog.Title>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'To avoid losing your updates, save your changes before leaving.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tdiscard: {\n\t\t\t\t\t\t\t\tlabel: __( 'Discard', 'elementor' ),\n\t\t\t\t\t\t\t\taction: () => {\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tconst result = await handleSaveClick();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\tif ( result?.success ) {\n\t\t\t\t\t\t\t\t\t\tclosePanel();\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},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</ThemeProvider>\n\t);\n}\n\nconst usePreventUnload = ( isDirty: boolean ) => {\n\tuseEffect( () => {\n\t\tconst handleBeforeUnload = ( event: BeforeUnloadEvent ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener( 'beforeunload', handleBeforeUnload );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'beforeunload', handleBeforeUnload );\n\t\t};\n\t}, [ isDirty ] );\n};\n","import { getMixpanel } from '@elementor/mixpanel';\n\ntype VariableEventData = {\n\tvarType: string;\n\tcontrolPath: string;\n\taction: 'open' | 'add' | 'connect' | 'save';\n};\n\nexport const trackVariableEvent = ( { varType, controlPath, action }: VariableEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.variables?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.variables[ action ];\n\tdispatchEvent?.( name, {\n\t\tlocation: config?.locations?.variables || '',\n\t\tsecondaryLocation: config?.secondaryLocations?.variablesPopover || '',\n\t\ttrigger: config?.triggers?.click || '',\n\t\tvar_type: varType,\n\t\tcontrol_path: controlPath,\n\t\taction_type: name,\n\t} );\n};\n\ntype VariablesManagerEventData = {\n\taction: 'openManager' | 'add' | 'saveChanges' | 'delete';\n\tvarType?: string;\n\tcontrolPath?: string;\n};\n\nexport const trackVariablesManagerEvent = ( { action, varType, controlPath }: VariablesManagerEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.variables?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.variables[ action ];\n\tconst eventData: Record< string, string > = {\n\t\tlocation: config?.locations?.variablesManager || '',\n\t\ttrigger: config?.triggers?.click || '',\n\t\taction_type: name,\n\t};\n\n\tif ( varType ) {\n\t\teventData.var_type = varType;\n\t}\n\n\tif ( controlPath ) {\n\t\teventData.style_control_path = controlPath;\n\t}\n\n\tdispatchEvent?.( name, eventData );\n};\n","import type * as React from 'react';\nimport { AlertTriangleFilledIcon, InfoCircleFilledIcon } from '@elementor/icons';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport { type TVariable, type TVariablesList } from '../storage';\n\nexport const ERROR_MESSAGES = {\n\tMISSING_VARIABLE_NAME: __( 'Give your variable a name.', 'elementor' ),\n\tMISSING_VARIABLE_VALUE: __( 'Add a value to complete your variable.', 'elementor' ),\n\tINVALID_CHARACTERS: __( 'Use letters, numbers, dashes (-), or underscores (_) for the name.', 'elementor' ),\n\tNO_NON_SPECIAL_CHARACTER: __( 'Names have to include at least one non-special character.', 'elementor' ),\n\tVARIABLE_LABEL_MAX_LENGTH: __( 'Keep names up to 50 characters.', 'elementor' ),\n\tDUPLICATED_LABEL: __( 'This variable name already exists. Please choose a unique name.', 'elementor' ),\n\tUNEXPECTED_ERROR: __( 'There was a glitch. Try saving your variable again.', 'elementor' ),\n\tBATCH: {\n\t\tDUPLICATED_LABELS: ( count: number, name: string ) =>\n\t\t\t// eslint-disable-next-line @wordpress/i18n-translator-comments\n\t\t\tsprintf( __( 'We found %1$d duplicated %2$s.', 'elementor' ), count, name ),\n\t\tUNEXPECTED_ERROR: __( 'There was a glitch.', 'elementor' ),\n\t\tDUPLICATED_LABEL_ACTION: __( 'Take me there', 'elementor' ),\n\t\tDUPLICATED_LABEL_ACTION_MESSAGE: __( 'Please rename the variables.', 'elementor' ),\n\t\tUNEXPECTED_ERROR_ACTION_MESSAGE: __( 'Try saving your variables again.', 'elementor' ),\n\t},\n} as const;\n\nexport const VARIABLE_LABEL_MAX_LENGTH = 50;\n\ntype BatchErrorData = {\n\t[ id: string ]: {\n\t\tstatus?: number;\n\t\tmessage?: string;\n\t};\n};\nexport type ErrorResponse = {\n\tresponse?: {\n\t\tdata?: {\n\t\t\tcode?: string;\n\t\t\tdata?: BatchErrorData;\n\t\t};\n\t};\n};\n\nexport type ErrorAction = {\n\tlabel?: string;\n\tmessage?: string;\n\tcallback?: () => void;\n\tdata?: {\n\t\tduplicatedIds?: string[];\n\t};\n};\n\nexport type MappedError = {\n\tfield: string;\n\tmessage: string;\n\taction?: ErrorAction;\n\tseverity?: 'error' | 'secondary';\n\tIconComponent?: React.ElementType;\n};\n\nexport const mapServerError = ( error: ErrorResponse ): MappedError | undefined => {\n\tif ( error?.response?.data?.code === 'duplicated_label' ) {\n\t\treturn {\n\t\t\tfield: 'label',\n\t\t\tmessage: ERROR_MESSAGES.DUPLICATED_LABEL,\n\t\t};\n\t}\n\n\tif ( error?.response?.data?.code === 'batch_duplicated_label' ) {\n\t\tconst errorData = error?.response?.data?.data ?? {};\n\t\tconst count = Object.keys( errorData ).length;\n\t\tconst name = count === 1 ? 'name' : 'names';\n\t\tconst duplicatedIds = Object.keys( errorData );\n\n\t\treturn {\n\t\t\tfield: 'label',\n\t\t\tmessage: ERROR_MESSAGES.BATCH.DUPLICATED_LABELS( count, name ),\n\t\t\tseverity: 'error',\n\t\t\tIconComponent: AlertTriangleFilledIcon,\n\t\t\taction: {\n\t\t\t\tlabel: ERROR_MESSAGES.BATCH.DUPLICATED_LABEL_ACTION,\n\t\t\t\tmessage: ERROR_MESSAGES.BATCH.DUPLICATED_LABEL_ACTION_MESSAGE,\n\t\t\t\tdata: {\n\t\t\t\t\tduplicatedIds,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( error?.response?.data?.code === 'batch_operation_failed' ) {\n\t\treturn {\n\t\t\tfield: 'label',\n\t\t\tmessage: ERROR_MESSAGES.BATCH.UNEXPECTED_ERROR,\n\t\t\tseverity: 'secondary',\n\t\t\tIconComponent: InfoCircleFilledIcon,\n\t\t\taction: {\n\t\t\t\tmessage: ERROR_MESSAGES.BATCH.UNEXPECTED_ERROR_ACTION_MESSAGE,\n\t\t\t},\n\t\t};\n\t}\n\n\treturn undefined;\n};\n\nexport const validateLabel = ( name: string, variables?: TVariablesList ): string => {\n\tif ( ! name.trim() ) {\n\t\treturn ERROR_MESSAGES.MISSING_VARIABLE_NAME;\n\t}\n\n\tconst allowedChars = /^[a-zA-Z0-9_-]+$/;\n\tif ( ! allowedChars.test( name ) ) {\n\t\treturn ERROR_MESSAGES.INVALID_CHARACTERS;\n\t}\n\n\tconst hasAlphanumeric = /[a-zA-Z0-9]/;\n\tif ( ! hasAlphanumeric.test( name ) ) {\n\t\treturn ERROR_MESSAGES.NO_NON_SPECIAL_CHARACTER;\n\t}\n\n\tif ( VARIABLE_LABEL_MAX_LENGTH < name.length ) {\n\t\treturn ERROR_MESSAGES.VARIABLE_LABEL_MAX_LENGTH;\n\t}\n\n\tif ( Object.values( variables ?? {} ).some( ( variable: TVariable ) => variable.label === name ) ) {\n\t\treturn ERROR_MESSAGES.DUPLICATED_LABEL;\n\t}\n\n\treturn '';\n};\n\nexport const labelHint = ( name: string ): string => {\n\tconst hintThreshold = VARIABLE_LABEL_MAX_LENGTH * 0.8 - 1;\n\tif ( hintThreshold < name.length ) {\n\t\treturn ERROR_MESSAGES.VARIABLE_LABEL_MAX_LENGTH;\n\t}\n\n\treturn '';\n};\n\nexport const validateValue = ( value: string ): string => {\n\tif ( ! value.trim() ) {\n\t\treturn ERROR_MESSAGES.MISSING_VARIABLE_VALUE;\n\t}\n\n\treturn '';\n};\n","import {\n\ttype ForwardRefExoticComponent,\n\ttype JSX,\n\ttype KeyboardEvent,\n\ttype RefAttributes,\n\ttype RefObject,\n} from 'react';\nimport { type AnyTransformer, styleTransformersRegistry } from '@elementor/editor-canvas';\nimport { stylesInheritanceTransformersRegistry } from '@elementor/editor-editing-panel';\nimport {\n\ttype createPropUtils,\n\ttype PropType,\n\ttype PropTypeKey,\n\ttype PropTypeUtil,\n\ttype PropValue,\n} from '@elementor/editor-props';\nimport { type SvgIconProps } from '@elementor/ui';\n\nimport { inheritanceTransformer } from '../transformers/inheritance-transformer';\nimport { variableTransformer } from '../transformers/variable-transformer';\nimport { type NormalizedVariable, type Variable } from '../types';\n\nexport type ValueFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n\tonPropTypeKeyChange?: ( key: string ) => void;\n\tpropTypeKey?: string;\n\tonValidationChange?: ( value: string ) => void;\n\tpropType?: PropType;\n\terror?: { value: string; message: string };\n\tref?: RefObject< HTMLElement | null >;\n\tonKeyDown?: ( event: KeyboardEvent< HTMLElement > ) => void;\n};\n\ntype FallbackPropTypeUtil = ReturnType< typeof createPropUtils >;\n\ntype VariableTypeOptions = {\n\ticon: ForwardRefExoticComponent< Omit< SvgIconProps, 'ref' > & RefAttributes< SVGSVGElement > >;\n\tstartIcon?: ( { value }: { value: string } ) => JSX.Element;\n\tvalueField?: ( props: ValueFieldProps ) => JSX.Element;\n\tvariableType: string;\n\tkey?: string;\n\tdefaultValue?: string;\n\tstyleTransformer?: AnyTransformer;\n\tfallbackPropTypeUtil: FallbackPropTypeUtil;\n\tpropTypeUtil: PropTypeUtil< string, string >;\n\tselectionFilter?: ( variables: NormalizedVariable[], propType?: PropType ) => NormalizedVariable[];\n\tvalueTransformer?: ( value: string, type?: string ) => PropValue;\n\tisCompatible?: ( propType: PropType, variable: Variable ) => boolean;\n\temptyState?: JSX.Element;\n};\n\nexport type VariableTypesMap = Record< string, Omit< VariableTypeOptions, 'key' > >;\n\nexport function createVariableTypeRegistry() {\n\tconst variableTypes: VariableTypesMap = {};\n\n\tconst registerVariableType = ( {\n\t\tkey,\n\t\ticon,\n\t\tstartIcon,\n\t\tvalueField,\n\t\tpropTypeUtil,\n\t\tvariableType,\n\t\tdefaultValue,\n\t\tselectionFilter,\n\t\tvalueTransformer,\n\t\tstyleTransformer,\n\t\tfallbackPropTypeUtil,\n\t\tisCompatible,\n\t\temptyState,\n\t}: VariableTypeOptions ) => {\n\t\tconst variableTypeKey = key ?? propTypeUtil.key;\n\n\t\tif ( ! isCompatible ) {\n\t\t\tisCompatible = ( propType, variable: Variable ) => {\n\t\t\t\tif ( 'union' === propType.kind ) {\n\t\t\t\t\tif ( variable.type in propType.prop_types ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\tvariableTypes[ variableTypeKey ] = {\n\t\t\ticon,\n\t\t\tstartIcon,\n\t\t\tvalueField,\n\t\t\tpropTypeUtil,\n\t\t\tvariableType,\n\t\t\tdefaultValue,\n\t\t\tselectionFilter,\n\t\t\tvalueTransformer,\n\t\t\tfallbackPropTypeUtil,\n\t\t\tisCompatible,\n\t\t\temptyState,\n\t\t};\n\n\t\tregisterTransformer( propTypeUtil.key, styleTransformer );\n\t\tregisterInheritanceTransformer( propTypeUtil.key );\n\t};\n\n\tconst registerTransformer = ( key: PropTypeKey, transformer?: AnyTransformer ) => {\n\t\tstyleTransformersRegistry.register( key, transformer ?? variableTransformer );\n\t};\n\n\tconst registerInheritanceTransformer = ( key: PropTypeKey ) => {\n\t\tstylesInheritanceTransformersRegistry.register( key, inheritanceTransformer );\n\t};\n\n\tconst getVariableType = ( key: string ) => {\n\t\treturn variableTypes[ key ];\n\t};\n\n\tconst getVariableTypes = () => {\n\t\treturn variableTypes;\n\t};\n\n\tconst hasVariableType = ( key: string ) => {\n\t\treturn key in variableTypes;\n\t};\n\n\treturn {\n\t\tregisterVariableType,\n\t\tgetVariableType,\n\t\tgetVariableTypes,\n\t\thasVariableType,\n\t};\n}\n","import * as React from 'react';\nimport { createTransformer } from '@elementor/editor-canvas';\nimport { Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { ColorIndicator } from '../components/ui/color-indicator';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { service } from '../service';\nimport { resolveCssVariable } from './utils/resolve-css-variable';\n\nexport const inheritanceTransformer = createTransformer( ( id: string ) => {\n\tconst variables = service.variables();\n\tconst variable = variables[ id ];\n\n\tif ( ! variable ) {\n\t\treturn <span>{ __( 'Missing variable', 'elementor' ) }</span>;\n\t}\n\n\tconst showColorIndicator = variable.type === colorVariablePropTypeUtil.key;\n\tconst css = resolveCssVariable( id, variable );\n\n\treturn (\n\t\t<Stack direction=\"row\" spacing={ 0.5 } sx={ { paddingInline: '1px' } } alignItems=\"center\">\n\t\t\t{ showColorIndicator && <ColorIndicator size=\"inherit\" value={ variable.value } /> }\n\t\t\t<Typography variant=\"caption\" overflow=\"hidden\" whiteSpace=\"nowrap\" textOverflow=\"ellipsis\">\n\t\t\t\t{ css }\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n} );\n","import { styled, UnstableColorIndicator } from '@elementor/ui';\n\nexport const ColorIndicator = styled( UnstableColorIndicator )( ( { theme } ) => ( {\n\tborderRadius: `${ theme.shape.borderRadius / 2 }px`,\n\tmarginRight: theme.spacing( 0.25 ),\n} ) );\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const colorVariablePropTypeUtil = createPropUtils( 'global-color-variable', z.string() );\n","import { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\nimport { buildOperationsArray, type OperationResult } from './batch-operations';\nimport { OP_RW, Storage, type TVariable, type TVariablesList } from './storage';\nimport { styleVariablesRepository } from './style-variables-repository';\nimport { type Variable } from './types';\n\nconst storage = new Storage();\n\nexport const service = {\n\tvariables: (): TVariablesList => {\n\t\treturn storage.load();\n\t},\n\n\tfindIdByLabel( needle: string ): string {\n\t\tconst variableId = Object.entries( this.variables() ).find( ( [ , variable ] ) => variable.label === needle );\n\t\tif ( ! variableId ) {\n\t\t\tthrow new Error( `Variable with label ${ needle } not found` );\n\t\t}\n\t\treturn variableId[ 0 ];\n\t},\n\n\tfindVariableByLabel( needle: string ): TVariable | null {\n\t\treturn Object.values( this.variables() ).find( ( variable ) => variable.label === needle ) || null;\n\t},\n\n\tgetWatermark: (): number => {\n\t\treturn storage.state.watermark;\n\t},\n\n\tinit: () => {\n\t\treturn service.load();\n\t},\n\n\tload: () => {\n\t\treturn apiClient\n\t\t\t.list()\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tthrow new Error( 'Unexpected response from server' );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variables, watermark } = data;\n\n\t\t\t\tstorage.fill( variables, watermark );\n\n\t\t\t\tstyleVariablesRepository.update( variables );\n\n\t\t\t\treturn variables;\n\t\t\t} );\n\t},\n\n\tcreate: ( { type, label, value }: Variable ) => {\n\t\treturn apiClient\n\t\t\t.create( type, label, value )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tconst errorMessage = payload?.message || __( 'Unexpected response from server', 'elementor' );\n\t\t\t\t\tthrow new Error( errorMessage );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variable, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tconst { id: variableId, ...createdVariable } = variable;\n\n\t\t\t\tstorage.add( variableId, createdVariable );\n\n\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t[ variableId ]: createdVariable,\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tid: variableId,\n\t\t\t\t\tvariable: createdVariable,\n\t\t\t\t};\n\t\t\t} );\n\t},\n\n\tupdate: ( id: string, { label, value, type }: Omit< Variable, 'type' > & { type?: Variable[ 'type' ] } ) => {\n\t\treturn apiClient\n\t\t\t.update( id, label, value, type )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tconst errorMessage = payload?.message || __( 'Unexpected response from server', 'elementor' );\n\t\t\t\t\tthrow new Error( errorMessage );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variable, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tconst { id: variableId, ...updatedVariable } = variable;\n\n\t\t\t\tstorage.update( variableId, updatedVariable );\n\n\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t[ variableId ]: updatedVariable,\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tid: variableId,\n\t\t\t\t\tvariable: updatedVariable,\n\t\t\t\t};\n\t\t\t} );\n\t},\n\n\tdelete: ( id: string ) => {\n\t\treturn apiClient\n\t\t\t.delete( id )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tthrow new Error( 'Unexpected response from server' );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variable, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tconst { id: variableId, ...deletedVariable } = variable;\n\n\t\t\t\tstorage.update( variableId, deletedVariable );\n\n\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t[ variableId ]: deletedVariable,\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tid: variableId,\n\t\t\t\t\tvariable: deletedVariable,\n\t\t\t\t};\n\t\t\t} );\n\t},\n\n\trestore: ( id: string, label?: string, value?: string, type?: string ) => {\n\t\treturn apiClient\n\t\t\t.restore( id, label, value, type )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tthrow new Error( 'Unexpected response from server' );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variable, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tconst { id: variableId, ...restoredVariable } = variable;\n\n\t\t\t\tstorage.update( variableId, restoredVariable );\n\n\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t[ variableId ]: restoredVariable,\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tid: variableId,\n\t\t\t\t\tvariable: restoredVariable,\n\t\t\t\t};\n\t\t\t} );\n\t},\n\n\tbatchSave: ( originalVariables: TVariablesList, currentVariables: TVariablesList ) => {\n\t\tconst operations = buildOperationsArray( originalVariables, currentVariables );\n\t\tconst batchPayload = { operations, watermark: storage.state.watermark };\n\n\t\tif ( operations.length === 0 ) {\n\t\t\treturn Promise.resolve( {\n\t\t\t\tsuccess: true,\n\t\t\t\twatermark: storage.state.watermark,\n\t\t\t\toperations: 0,\n\t\t\t} );\n\t\t}\n\n\t\treturn apiClient\n\t\t\t.batch( batchPayload )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tthrow new Error( 'Unexpected response from server' );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { results, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tif ( results ) {\n\t\t\t\t\tresults.forEach( ( result: OperationResult ) => {\n\t\t\t\t\t\tif ( result.variable ) {\n\t\t\t\t\t\t\tconst { id: variableId, ...variableData } = result.variable;\n\n\t\t\t\t\t\t\tif ( result.type === 'create' ) {\n\t\t\t\t\t\t\t\tstorage.add( variableId, variableData );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstorage.update( variableId, variableData );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t\t\t\t[ variableId ]: variableData,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\twatermark,\n\t\t\t\t\toperations: operations.length,\n\t\t\t\t};\n\t\t\t} );\n\t},\n};\n\nconst handleWatermark = ( operation: string, newWatermark: number ) => {\n\tif ( storage.watermarkDiff( operation, newWatermark ) ) {\n\t\tsetTimeout( () => service.load(), 500 );\n\t}\n\tstorage.watermark( newWatermark );\n};\n","import { httpService } from '@elementor/http-client';\n\nimport { type OperationType } from './batch-operations';\n\nconst BASE_PATH = 'elementor/v1/variables';\n\ntype RestoreVariablePayload = {\n\tid: string;\n\tlabel?: string;\n\tvalue?: string;\n\ttype?: string;\n};\n\nexport type BatchOperation = {\n\ttype: OperationType;\n\tid?: string;\n\tvariable?: {\n\t\tid?: string;\n\t\ttype?: string;\n\t\tlabel?: string;\n\t\tvalue?: string;\n\t};\n\tlabel?: string;\n\tvalue?: string;\n};\n\nexport type BatchPayload = {\n\twatermark: number;\n\toperations: BatchOperation[];\n};\n\nexport const apiClient = {\n\tlist: () => {\n\t\treturn httpService().get( BASE_PATH + '/list' );\n\t},\n\n\tcreate: ( type: string, label: string, value: string ) => {\n\t\treturn httpService().post( BASE_PATH + '/create', {\n\t\t\ttype,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t} );\n\t},\n\n\tupdate: ( id: string, label: string, value: string, type?: string ) => {\n\t\treturn httpService().put( BASE_PATH + '/update', {\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t\ttype,\n\t\t} );\n\t},\n\n\tdelete: ( id: string ) => {\n\t\treturn httpService().post( BASE_PATH + '/delete', { id } );\n\t},\n\n\trestore: ( id: string, label?: string, value?: string, type?: string ) => {\n\t\tconst payload: RestoreVariablePayload = { id };\n\n\t\tif ( label ) {\n\t\t\tpayload.label = label;\n\t\t}\n\n\t\tif ( value ) {\n\t\t\tpayload.value = value;\n\t\t}\n\n\t\tif ( type ) {\n\t\t\tpayload.type = type;\n\t\t}\n\n\t\treturn httpService().post( BASE_PATH + '/restore', payload );\n\t},\n\n\tbatch: ( payload: BatchPayload ) => {\n\t\treturn httpService().post( BASE_PATH + '/batch', payload );\n\t},\n};\n","import { type BatchOperation } from './api';\nimport { type TVariable, type TVariablesList } from './storage';\n\nexport type OperationType = 'create' | 'update' | 'delete' | 'restore';\n\nexport type OperationResult = {\n\tid: string;\n\ttype: OperationType;\n\tvariable?: TVariable & { id: string };\n\tdeleted?: boolean;\n};\n\nexport const generateTempId = (): string => {\n\tconst timestamp = Date.now().toString( 36 );\n\tconst random = Math.random().toString( 36 ).substring( 2, 8 );\n\treturn `tmp-${ timestamp }-${ random }`;\n};\n\nexport const isTempId = ( id: string ): boolean => {\n\treturn id.startsWith( 'tmp-' );\n};\n\nexport const buildOperationsArray = (\n\toriginalVariables: TVariablesList,\n\tcurrentVariables: TVariablesList\n): BatchOperation[] => {\n\tconst operations: BatchOperation[] = [];\n\n\tObject.entries( currentVariables ).forEach( ( [ id, variable ] ) => {\n\t\tif ( isTempId( id ) ) {\n\t\t\toperations.push( {\n\t\t\t\ttype: 'create',\n\t\t\t\tvariable: {\n\t\t\t\t\t...variable,\n\t\t\t\t\tid,\n\t\t\t\t},\n\t\t\t} );\n\t\t} else if ( originalVariables[ id ] ) {\n\t\t\tconst original = originalVariables[ id ];\n\n\t\t\tif ( original.deleted && ! variable.deleted ) {\n\t\t\t\toperations.push( {\n\t\t\t\t\ttype: 'restore',\n\t\t\t\t\tid,\n\t\t\t\t\t...( original.label !== variable.label && { label: variable.label } ),\n\t\t\t\t\t...( original.value !== variable.value && { value: variable.value } ),\n\t\t\t\t} );\n\t\t\t} else if (\n\t\t\t\t! variable.deleted &&\n\t\t\t\t( original.label !== variable.label ||\n\t\t\t\t\toriginal.value !== variable.value ||\n\t\t\t\t\toriginal.order !== variable.order )\n\t\t\t) {\n\t\t\t\toperations.push( {\n\t\t\t\t\ttype: 'update',\n\t\t\t\t\tid,\n\t\t\t\t\tvariable: {\n\t\t\t\t\t\t...( original.label !== variable.label && { label: variable.label } ),\n\t\t\t\t\t\t...( original.value !== variable.value && { value: variable.value } ),\n\t\t\t\t\t\t...( original.order !== variable.order && { order: variable.order } ),\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\n\tObject.entries( originalVariables ).forEach( ( [ id, variable ] ) => {\n\t\tif ( isTempId( id ) || variable.deleted ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentVariable = currentVariables[ id ];\n\n\t\tif ( ! currentVariable || currentVariable.deleted ) {\n\t\t\toperations.push( {\n\t\t\t\ttype: 'delete',\n\t\t\t\tid,\n\t\t\t} );\n\t\t}\n\t} );\n\n\treturn operations.filter( ( op ) => {\n\t\tconst id = op.id || op.variable?.id;\n\t\treturn id && ! ( isTempId( id ) && currentVariables[ id ]?.deleted );\n\t} );\n};\n","export type TVariable = {\n\ttype: string;\n\tlabel: string;\n\tvalue: string;\n\torder?: number;\n\tdeleted?: boolean;\n\tdeleted_at?: string;\n};\n\nexport type TVariablesList = Record< string, TVariable >;\n\nconst STORAGE_KEY = 'elementor-global-variables';\nconst STORAGE_WATERMARK_KEY = 'elementor-global-variables-watermark';\n\nexport const OP_RW = 'RW';\nconst OP_RO = 'RO';\n\nexport class Storage {\n\tstate: {\n\t\twatermark: number;\n\t\tvariables: TVariablesList;\n\t};\n\n\tnotifyChange() {\n\t\twindow.dispatchEvent( new Event( 'variables:updated' ) );\n\t}\n\n\tconstructor() {\n\t\tthis.state = {\n\t\t\twatermark: -1,\n\t\t\tvariables: {},\n\t\t};\n\t}\n\n\tload() {\n\t\tthis.state.watermark = parseInt( localStorage.getItem( STORAGE_WATERMARK_KEY ) || '-1' );\n\t\tthis.state.variables = JSON.parse( localStorage.getItem( STORAGE_KEY ) || '{}' ) as TVariablesList;\n\t\treturn this.state.variables;\n\t}\n\n\tfill( variables: TVariablesList, watermark: number ) {\n\t\tthis.state.variables = {};\n\t\tif ( variables && Object.keys( variables ).length ) {\n\t\t\tthis.state.variables = variables;\n\t\t}\n\n\t\tthis.state.watermark = watermark;\n\n\t\tlocalStorage.setItem( STORAGE_WATERMARK_KEY, this.state.watermark.toString() );\n\t\tlocalStorage.setItem( STORAGE_KEY, JSON.stringify( this.state.variables ) );\n\t\tthis.notifyChange();\n\t}\n\n\tadd( id: string, variable: TVariable ) {\n\t\tthis.load();\n\t\tthis.state.variables[ id ] = variable;\n\t\tlocalStorage.setItem( STORAGE_KEY, JSON.stringify( this.state.variables ) );\n\t\tthis.notifyChange();\n\t}\n\n\tupdate( id: string, variable: TVariable ) {\n\t\tthis.load();\n\t\tthis.state.variables[ id ] = variable;\n\t\tlocalStorage.setItem( STORAGE_KEY, JSON.stringify( this.state.variables ) );\n\t\tthis.notifyChange();\n\t}\n\n\twatermark( watermark: number ) {\n\t\tthis.state.watermark = watermark;\n\t\tlocalStorage.setItem( STORAGE_WATERMARK_KEY, this.state.watermark.toString() );\n\t}\n\n\twatermarkDiff( operation: string, newWatermark: number ) {\n\t\tconst diff = newWatermark - this.state.watermark;\n\n\t\tif ( OP_RW === operation ) {\n\t\t\treturn 1 !== diff;\n\t\t}\n\n\t\tif ( OP_RO === operation ) {\n\t\t\treturn 0 !== diff;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const fontVariablePropTypeUtil = createPropUtils( 'global-font-variable', z.string() );\n","import { type CanvasExtendedWindow, type EnqueueFont } from './types';\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n","import { fontVariablePropTypeUtil } from './prop-types/font-variable-prop-type';\nimport { enqueueFont } from './sync/enqueue-font';\nimport { type StyleVariables, type Variable } from './types';\n\ntype VariablesChangeCallback = ( variables: StyleVariables ) => void;\ntype Variables = Record< string, Variable >;\n\nexport const createStyleVariablesRepository = () => {\n\tconst variables: StyleVariables = {};\n\tlet subscription: VariablesChangeCallback;\n\n\tconst subscribe = ( cb: VariablesChangeCallback ) => {\n\t\tsubscription = cb;\n\n\t\treturn () => {\n\t\t\tsubscription = () => {};\n\t\t};\n\t};\n\n\tconst notify = () => {\n\t\tif ( typeof subscription === 'function' ) {\n\t\t\tsubscription( { ...variables } );\n\t\t}\n\t};\n\n\tconst shouldUpdate = ( key: string, maybeUpdated: Variable ): boolean => {\n\t\tif ( ! ( key in variables ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( variables[ key ].label !== maybeUpdated.label ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( variables[ key ].value !== maybeUpdated.value ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( ! variables[ key ]?.deleted && maybeUpdated?.deleted ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( variables[ key ]?.deleted && ! maybeUpdated?.deleted ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tconst applyUpdates = ( updatedVars: Variables ): boolean => {\n\t\tlet hasChanges = false;\n\n\t\tfor ( const [ key, variable ] of Object.entries( updatedVars ) ) {\n\t\t\tif ( shouldUpdate( key, variable ) ) {\n\t\t\t\tvariables[ key ] = variable;\n\n\t\t\t\tif ( variable.type === fontVariablePropTypeUtil.key ) {\n\t\t\t\t\tfontEnqueue( variable.value );\n\t\t\t\t}\n\n\t\t\t\thasChanges = true;\n\t\t\t}\n\t\t}\n\n\t\treturn hasChanges;\n\t};\n\n\tconst fontEnqueue = ( value: string ): void => {\n\t\tif ( ! value ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tenqueueFont( value );\n\t\t} catch {\n\t\t\t// This prevents font enqueueing failures from breaking variable updates\n\t\t}\n\t};\n\n\tconst update = ( updatedVars: Variables ) => {\n\t\tif ( applyUpdates( updatedVars ) ) {\n\t\t\tnotify();\n\t\t}\n\t};\n\n\treturn {\n\t\tsubscribe,\n\t\tupdate,\n\t};\n};\n","import { createStyleVariablesRepository } from './create-style-variables-repository';\n\nexport const styleVariablesRepository = createStyleVariablesRepository();\n","import { type TVariable } from '../../storage';\n\nexport const resolveCssVariable = ( id: string, variable: TVariable ) => {\n\tlet name = id;\n\tlet fallbackValue = '';\n\n\tif ( variable ) {\n\t\tfallbackValue = variable.value;\n\t}\n\n\tif ( variable && ! variable.deleted ) {\n\t\tname = variable.label;\n\t}\n\n\tif ( ! name.trim() ) {\n\t\treturn null;\n\t}\n\n\tconst validCssVariableName = `--${ name }`;\n\n\tif ( ! fallbackValue.trim() ) {\n\t\treturn `var(${ validCssVariableName })`;\n\t}\n\n\treturn `var(${ validCssVariableName }, ${ fallbackValue })`;\n};\n","import { createTransformer } from '@elementor/editor-canvas';\n\nimport { service } from '../service';\nimport { type TVariable } from '../storage';\nimport { resolveCssVariable } from './utils/resolve-css-variable';\n\nexport const variableTransformer = createTransformer( ( idOrLabel: string ) => {\n\tconst variables = service.variables();\n\n\tconst targetVariable: TVariable | null = variables[ idOrLabel ] || service.findVariableByLabel( idOrLabel );\n\tif ( ! targetVariable ) {\n\t\treturn null;\n\t}\n\tconst id = service.findIdByLabel( targetVariable.label );\n\n\treturn resolveCssVariable( id, targetVariable );\n} );\n","import { createVariableTypeRegistry } from './create-variable-type-registry';\n\nexport const { registerVariableType, getVariableType, getVariableTypes, hasVariableType } =\n\tcreateVariableTypeRegistry();\n","import * as React from 'react';\nimport { ConfirmationDialog } from '@elementor/editor-ui';\nimport { Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype DeleteConfirmationDialogProps = {\n\topen: boolean;\n\tlabel: string;\n\tcloseDialog: () => void;\n\tonConfirm: () => void;\n};\n\nexport const DeleteConfirmationDialog = ( { open, label, closeDialog, onConfirm }: DeleteConfirmationDialogProps ) => {\n\treturn (\n\t\t<ConfirmationDialog open={ open } onClose={ closeDialog }>\n\t\t\t<ConfirmationDialog.Title>{ __( 'Delete this variable?', 'elementor' ) }</ConfirmationDialog.Title>\n\t\t\t<ConfirmationDialog.Content>\n\t\t\t\t<ConfirmationDialog.ContentText>\n\t\t\t\t\t{ __( 'All elements using', 'elementor' ) }\n\t\t\t\t\t&nbsp;\n\t\t\t\t\t<Typography variant=\"subtitle2\" component=\"span\" sx={ { lineBreak: 'anywhere' } }>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t&nbsp;\n\t\t\t\t\t{ __( 'will keep their current values, but the variable itself will be removed.', 'elementor' ) }\n\t\t\t\t</ConfirmationDialog.ContentText>\n\t\t\t</ConfirmationDialog.Content>\n\t\t\t<ConfirmationDialog.Actions onClose={ closeDialog } onConfirm={ onConfirm } />\n\t\t</ConfirmationDialog>\n\t);\n};\n","import * as React from 'react';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { usePermissions } from '../../hooks/use-permissions';\n\ntype Props = {\n\ticon?: React.ReactNode;\n\ttitle: string;\n\tmessage: string;\n\tonAdd?: () => void;\n\tchildren?: React.ReactNode;\n};\n\nexport const EmptyState = ( { icon, title, message, onAdd, children }: Props ) => {\n\tconst canAdd = usePermissions().canAdd();\n\tconst displayTitle = canAdd ? title : __( 'There are no variables', 'elementor' );\n\tconst displayMessage = canAdd\n\t\t? message\n\t\t: __( 'With your current role, you can only connect and detach variables.', 'elementor' );\n\n\treturn (\n\t\t<Content title={ displayTitle } message={ displayMessage } icon={ icon }>\n\t\t\t{ children ||\n\t\t\t\t( onAdd && (\n\t\t\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" onClick={ onAdd }>\n\t\t\t\t\t\t{ __( 'Create a variable', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t) ) }\n\t\t</Content>\n\t);\n};\n\ntype NoVariablesContentProps = {\n\ttitle: string;\n\tmessage: string;\n\ticon?: React.ReactNode;\n\tchildren?: React.ReactNode;\n};\n\nfunction Content( { title, message, icon, children }: NoVariablesContentProps ) {\n\treturn (\n\t\t<Stack\n\t\t\tgap={ 1 }\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"flex-start\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t>\n\t\t\t{ icon }\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ title }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"180px\">\n\t\t\t\t{ message }\n\t\t\t</Typography>\n\n\t\t\t{ children }\n\t\t</Stack>\n\t);\n}\n","import { useCurrentUserCapabilities } from '@elementor/editor-current-user';\n\nexport const usePermissions = () => {\n\tconst { canUser, isAdmin } = useCurrentUserCapabilities();\n\n\treturn {\n\t\tcanAssign: () => canUser( 'edit_posts' ),\n\t\tcanUnlink: () => canUser( 'edit_posts' ),\n\t\tcanAdd: () => isAdmin,\n\t\tcanDelete: () => isAdmin,\n\t\tcanEdit: () => isAdmin,\n\t\tcanRestore: () => isAdmin,\n\t\tcanManageSettings: () => isAdmin,\n\t};\n};\n","import * as React from 'react';\nimport { Link, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype Props = {\n\tsearchValue: string;\n\tonClear?: () => void;\n\ticon?: React.ReactNode;\n};\n\nexport const NoSearchResults = ( { searchValue, onClear, icon }: Props ) => {\n\treturn (\n\t\t<Stack\n\t\t\tgap={ 1 }\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\tp={ 2.5 }\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { pb: 3.5, pt: 8 } }\n\t\t>\n\t\t\t{ icon }\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t<br />\n\t\t\t\t&ldquo;{ searchValue }&rdquo;.\n\t\t\t</Typography>\n\t\t\t<Typography align=\"center\" variant=\"caption\" sx={ { display: 'flex', flexDirection: 'column' } }>\n\t\t\t\t{ __( 'Try something else.', 'elementor' ) }\n\t\t\t\t<Link color=\"text.secondary\" variant=\"caption\" component=\"button\" onClick={ onClear }>\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","import { useCallback, useState } from 'react';\n\nexport const useAutoEdit = () => {\n\tconst [ autoEditVariableId, setAutoEditVariableId ] = useState< string | undefined >( undefined );\n\n\tconst startAutoEdit = useCallback( ( variableId: string ) => {\n\t\tsetAutoEditVariableId( variableId );\n\t}, [] );\n\n\tconst handleAutoEditComplete = useCallback( () => {\n\t\tsetTimeout( () => {\n\t\t\tsetAutoEditVariableId( undefined );\n\t\t}, 100 );\n\t}, [] );\n\n\treturn {\n\t\tautoEditVariableId,\n\t\tstartAutoEdit,\n\t\thandleAutoEditComplete,\n\t};\n};\n","import { useCallback, useRef } from 'react';\n\nexport interface UseErrorNavigationReturn {\n\tcreateNavigationCallback: (\n\t\tids: string[],\n\t\tonNavigate: ( id: string ) => void,\n\t\tonComplete: () => void\n\t) => () => void;\n\tresetNavigation: () => void;\n}\n\nexport const useErrorNavigation = (): UseErrorNavigationReturn => {\n\tconst currentIndexRef = useRef( 0 );\n\n\tconst createNavigationCallback = useCallback(\n\t\t( ids: string[], onNavigate: ( id: string ) => void, onComplete: () => void ) => {\n\t\t\treturn () => {\n\t\t\t\tif ( ! ids?.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst currentIndex = currentIndexRef.current;\n\t\t\t\tconst currentId = ids[ currentIndex ];\n\n\t\t\t\tif ( currentId ) {\n\t\t\t\t\tonNavigate( currentId );\n\n\t\t\t\t\tconst nextIndex = currentIndex + 1;\n\t\t\t\t\tif ( nextIndex >= ids.length ) {\n\t\t\t\t\t\tonComplete();\n\t\t\t\t\t\tcurrentIndexRef.current = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentIndexRef.current = nextIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst resetNavigation = useCallback( () => {\n\t\tcurrentIndexRef.current = 0;\n\t}, [] );\n\n\treturn {\n\t\tcreateNavigationCallback,\n\t\tresetNavigation,\n\t};\n};\n","import { useCallback, useState } from 'react';\n\nimport { generateTempId } from '../../../batch-operations';\nimport { getVariables } from '../../../hooks/use-prop-variables';\nimport { service } from '../../../service';\nimport { type TVariablesList } from '../../../storage';\nimport { filterBySearch } from '../../../utils/filter-by-search';\nimport { applySelectionFilters, variablesToList } from '../../../utils/variables-to-list';\nimport { getVariableTypes } from '../../../variables-registry/variable-type-registry';\n\nexport const useVariablesManagerState = () => {\n\tconst [ variables, setVariables ] = useState( () => getVariables( false ) );\n\tconst [ deletedVariables, setDeletedVariables ] = useState< string[] >( [] );\n\tconst [ isSaveDisabled, setIsSaveDisabled ] = useState( false );\n\tconst [ isDirty, setIsDirty ] = useState( false );\n\tconst [ isSaving, setIsSaving ] = useState( false );\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst handleOnChange = useCallback(\n\t\t( newVariables: TVariablesList ) => {\n\t\t\tsetVariables( { ...variables, ...newVariables } );\n\t\t\tsetIsDirty( true );\n\t\t},\n\t\t[ variables ]\n\t);\n\n\tconst createVariable = useCallback( ( type: string, defaultName: string, defaultValue: string ) => {\n\t\tconst newId = generateTempId();\n\t\tconst newVariable = {\n\t\t\tid: newId,\n\t\t\tlabel: defaultName.trim(),\n\t\t\tvalue: defaultValue.trim(),\n\t\t\ttype,\n\t\t};\n\n\t\tsetVariables( ( prev ) => ( { ...prev, [ newId ]: newVariable } ) );\n\t\tsetIsDirty( true );\n\n\t\treturn newId;\n\t}, [] );\n\n\tconst handleDeleteVariable = useCallback( ( itemId: string ) => {\n\t\tsetDeletedVariables( ( prev ) => [ ...prev, itemId ] );\n\t\tsetVariables( ( prev ) => ( { ...prev, [ itemId ]: { ...prev[ itemId ], deleted: true } } ) );\n\t\tsetIsDirty( true );\n\t}, [] );\n\n\tconst handleSearch = ( searchTerm: string ) => {\n\t\tsetSearchValue( searchTerm );\n\t};\n\n\tconst handleSave = useCallback( async (): Promise< { success: boolean } > => {\n\t\tconst originalVariables = getVariables( false );\n\t\tsetIsSaving( true );\n\t\tconst result = await service.batchSave( originalVariables, variables );\n\n\t\tif ( result.success ) {\n\t\t\tawait service.load();\n\t\t\tconst updatedVariables = service.variables();\n\n\t\t\tsetVariables( updatedVariables );\n\t\t\tsetDeletedVariables( [] );\n\t\t\tsetIsDirty( false );\n\t\t}\n\n\t\treturn { success: result.success };\n\t}, [ variables ] );\n\n\tconst filteredVariables = useCallback( () => {\n\t\tconst list = variablesToList( variables ).filter( ( v ) => ! v.deleted );\n\t\tconst typeFiltered = applySelectionFilters( list, getVariableTypes() );\n\t\tconst searchFiltered = filterBySearch( typeFiltered, searchValue );\n\n\t\treturn Object.fromEntries( searchFiltered.map( ( { key, ...rest } ) => [ key, rest ] ) );\n\t}, [ variables, searchValue ] );\n\n\treturn {\n\t\tvariables: filteredVariables(),\n\t\tdeletedVariables,\n\t\tisDirty,\n\t\tisSaveDisabled,\n\t\thandleOnChange,\n\t\tcreateVariable,\n\t\thandleDeleteVariable,\n\t\thandleSave,\n\t\tisSaving,\n\t\thandleSearch,\n\t\tsearchValue,\n\t\tsetIsSaving,\n\t\tsetIsSaveDisabled,\n\t};\n};\n","import { useMemo } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type PropKey } from '@elementor/editor-props';\n\nimport { useVariableType } from '../context/variable-type-context';\nimport { service } from '../service';\nimport { type NormalizedVariable, type Variable } from '../types';\nimport { filterBySearch } from '../utils/filter-by-search';\nimport { toNormalizedVariable, variablesToList } from '../utils/variables-to-list';\nimport { getVariableType, getVariableTypes } from '../variables-registry/variable-type-registry';\n\nexport const getVariables = ( includeDeleted = true ) => {\n\tconst variables = service.variables();\n\n\tif ( includeDeleted ) {\n\t\treturn variables;\n\t}\n\n\treturn Object.fromEntries( Object.entries( variables ).filter( ( [ , variable ] ) => ! variable.deleted ) );\n};\n\nexport const useVariable = ( key: string ) => {\n\tconst variables = getVariables();\n\n\tif ( ! variables?.[ key ] ) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t...variables[ key ],\n\t\tkey,\n\t};\n};\n\nexport const useFilteredVariables = ( searchValue: string, propTypeKey: string ) => {\n\tconst baseVariables = usePropVariables( propTypeKey );\n\n\tconst typeFilteredVariables = useVariableSelectionFilter( baseVariables );\n\tconst searchFilteredVariables = filterBySearch( typeFilteredVariables, searchValue );\n\tconst sortedVariables = searchFilteredVariables.sort( ( a, b ) => {\n\t\tconst orderA = a.order ?? Number.MAX_SAFE_INTEGER;\n\t\tconst orderB = b.order ?? Number.MAX_SAFE_INTEGER;\n\t\treturn orderA - orderB;\n\t} );\n\n\treturn {\n\t\tlist: sortedVariables,\n\t\thasMatches: searchFilteredVariables.length > 0,\n\t\tisSourceNotEmpty: typeFilteredVariables.length > 0,\n\t\thasNoCompatibleVariables: baseVariables.length > 0 && typeFilteredVariables.length === 0,\n\t};\n};\n\nconst useVariableSelectionFilter = ( variables: NormalizedVariable[] ): NormalizedVariable[] => {\n\tconst { selectionFilter } = useVariableType();\n\tconst { propType } = useBoundProp();\n\n\treturn selectionFilter ? selectionFilter( variables, propType ) : variables;\n};\n\nconst usePropVariables = ( propKey: PropKey ): NormalizedVariable[] => {\n\treturn useMemo( () => normalizeVariables( propKey ), [ propKey ] );\n};\n\nconst getMatchingTypes = ( propKey: string ): string[] => {\n\tconst matchingTypes: string[] = [];\n\tconst allTypes = getVariableTypes();\n\tconst variableType = getVariableType( propKey );\n\n\tObject.entries( allTypes ).forEach( ( [ key, typeOptions ] ) => {\n\t\tif ( variableType.variableType === typeOptions.variableType ) {\n\t\t\tmatchingTypes.push( key );\n\t\t}\n\t} );\n\n\treturn matchingTypes;\n};\n\nconst normalizeVariables = ( propKey: string ): NormalizedVariable[] => {\n\tconst variables = getVariables( false );\n\tconst matchingTypes = getMatchingTypes( propKey );\n\n\treturn variablesToList( variables )\n\t\t.filter( ( variable ) => matchingTypes.includes( variable.type ) )\n\t\t.map( toNormalizedVariable );\n};\n\nconst extractId = ( { id }: { id: string } ): string => id;\n\nexport const createVariable = ( newVariable: Variable ): Promise< string > => {\n\treturn service.create( newVariable ).then( extractId );\n};\n\nexport const updateVariable = (\n\tupdateId: string,\n\t{ value, label, type }: { value: string; label: string; type?: string }\n): Promise< string > => {\n\treturn service.update( updateId, { value, label, type } ).then( extractId );\n};\n\nexport const deleteVariable = ( deleteId: string ): Promise< string > => {\n\treturn service.delete( deleteId ).then( extractId );\n};\n\nexport const restoreVariable = (\n\trestoreId: string,\n\tlabel?: string,\n\tvalue?: string,\n\ttype?: string\n): Promise< string > => {\n\treturn service.restore( restoreId, label, value, type ).then( extractId );\n};\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\nimport { type PropTypeKey } from '@elementor/editor-props';\n\nimport { getVariableType } from '../variables-registry/variable-type-registry';\n\ntype Props = PropsWithChildren< { propTypeKey: PropTypeKey } >;\n\nconst VariableTypeContext = createContext< PropTypeKey | null >( null );\n\nexport function VariableTypeProvider( { children, propTypeKey }: Props ) {\n\treturn <VariableTypeContext.Provider value={ propTypeKey }>{ children }</VariableTypeContext.Provider>;\n}\n\nexport function useVariableType() {\n\tconst context = useContext( VariableTypeContext );\n\n\tif ( context === null ) {\n\t\tthrow new Error( 'useVariableType must be used within a VariableTypeProvider' );\n\t}\n\n\treturn getVariableType( context );\n}\n","export function filterBySearch< T extends { label: string } >( variables: T[], searchValue: string ): T[] {\n\tconst lowerSearchValue = searchValue.toLowerCase();\n\n\treturn variables.filter( ( variable ) => variable.label.toLowerCase().includes( lowerSearchValue ) );\n}\n","import { type TVariable, type TVariablesList } from '../storage';\nimport { type NormalizedVariable } from '../types';\nimport { type VariableTypesMap } from '../variables-registry/create-variable-type-registry';\n\nexport type VariableWithKey = TVariable & { key: string };\n\nexport const variablesToList = ( variables: TVariablesList ): VariableWithKey[] => {\n\treturn Object.entries( variables ).map( ( [ key, variable ] ) => ( { key, ...variable } ) );\n};\n\nexport const toNormalizedVariable = ( { key, label, value, order }: VariableWithKey ): NormalizedVariable => ( {\n\tkey,\n\tlabel,\n\tvalue,\n\torder,\n} );\n\ntype VariableWithType = NormalizedVariable & { type: string };\n\nexport const applySelectionFilters = (\n\tvariables: VariableWithKey[],\n\tvariableTypes: VariableTypesMap\n): VariableWithType[] => {\n\tconst grouped: Record< string, VariableWithKey[] > = {};\n\tvariables.forEach( ( item ) => ( grouped[ item.type ] ??= [] ).push( item ) );\n\n\treturn Object.entries( grouped ).flatMap( ( [ type, vars ] ) => {\n\t\tconst filter = variableTypes[ type ]?.selectionFilter;\n\t\tconst normalized = vars.map( toNormalizedVariable );\n\n\t\treturn ( filter?.( normalized ) ?? normalized ).map( ( v ) => ( { ...v, type } ) );\n\t} );\n};\n","import * as React from 'react';\nimport { createElement, useMemo, useRef, useState } from 'react';\nimport { PromotionChip, PromotionPopover } from '@elementor/editor-ui';\nimport { PlusIcon } from '@elementor/icons';\nimport { bindMenu, bindTrigger, IconButton, Menu, MenuItem, type PopupState, Typography } from '@elementor/ui';\nimport { capitalize } from '@elementor/utils';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport { useQuotaPermissions } from '../../hooks/use-quota-permissions';\nimport { type TVariablesList } from '../../storage';\nimport { trackVariablesManagerEvent } from '../../utils/tracking';\nimport { getVariableTypes } from '../../variables-registry/variable-type-registry';\n\nexport const SIZE = 'tiny';\n\ntype MenuOptionConfig = {\n\tkey: string;\n\tpropTypeKey: string;\n\tvariableType: string;\n\tdefaultValue: string;\n\ticon: React.ElementType;\n};\n\ntype VariableManagerCreateMenuProps = {\n\tvariables: TVariablesList;\n\tonCreate: ( type: string, defaultName: string, defaultValue: string ) => void;\n\tdisabled?: boolean;\n\tmenuState: PopupState;\n};\n\nexport const VariableManagerCreateMenu = ( {\n\tvariables,\n\tonCreate,\n\tdisabled,\n\tmenuState,\n}: VariableManagerCreateMenuProps ) => {\n\tconst buttonRef = useRef< HTMLButtonElement >( null );\n\n\tconst variableTypes = getVariableTypes();\n\n\tconst menuOptionConfigs = useMemo(\n\t\t() =>\n\t\t\tObject.entries( variableTypes )\n\t\t\t\t.filter( ( [ , variable ] ) => !! variable.defaultValue )\n\t\t\t\t.map( ( [ key, variable ] ) => ( {\n\t\t\t\t\tkey,\n\t\t\t\t\tpropTypeKey: variable.propTypeUtil.key,\n\t\t\t\t\tvariableType: variable.variableType,\n\t\t\t\t\tdefaultValue: variable.defaultValue || '',\n\t\t\t\t\ticon: variable.icon,\n\t\t\t\t} ) ),\n\t\t[ variableTypes ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<IconButton\n\t\t\t\t{ ...bindTrigger( menuState ) }\n\t\t\t\tref={ buttonRef }\n\t\t\t\tdisabled={ disabled }\n\t\t\t\tsize={ SIZE }\n\t\t\t\taria-label={ __( 'Add variable', 'elementor' ) }\n\t\t\t>\n\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\n\t\t\t<Menu\n\t\t\t\tdisablePortal\n\t\t\t\tMenuListProps={ {\n\t\t\t\t\tdense: true,\n\t\t\t\t} }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\televation: 6,\n\t\t\t\t} }\n\t\t\t\t{ ...bindMenu( menuState ) }\n\t\t\t\tanchorEl={ buttonRef.current }\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\tdata-testid=\"variable-manager-create-menu\"\n\t\t\t>\n\t\t\t\t{ menuOptionConfigs.map( ( config ) => (\n\t\t\t\t\t<MenuOption\n\t\t\t\t\t\tkey={ config.key }\n\t\t\t\t\t\tconfig={ config }\n\t\t\t\t\t\tvariables={ variables }\n\t\t\t\t\t\tonCreate={ onCreate }\n\t\t\t\t\t\tonClose={ menuState.close }\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n\nconst MenuOption = ( {\n\tconfig,\n\tvariables,\n\tonCreate,\n\tonClose,\n}: {\n\tconfig: MenuOptionConfig;\n\tvariables: TVariablesList;\n\tonCreate: VariableManagerCreateMenuProps[ 'onCreate' ];\n\tonClose: () => void;\n} ) => {\n\tconst [ isPopoverOpen, setIsPopoverOpen ] = useState( false );\n\tconst userQuotaPermissions = useQuotaPermissions( config.propTypeKey );\n\n\tconst displayName = capitalize( config.variableType );\n\tconst isDisabled = ! userQuotaPermissions.canAdd();\n\n\tconst handleClick = () => {\n\t\tif ( isDisabled ) {\n\t\t\tif ( ! isPopoverOpen ) {\n\t\t\t\tsetIsPopoverOpen( true );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst defaultName = getDefaultName( variables, config.key, config.variableType );\n\n\t\tonCreate( config.key, defaultName, config.defaultValue );\n\t\ttrackVariablesManagerEvent( { action: 'add', varType: config.variableType } );\n\t\tonClose();\n\t};\n\n\tconst title = sprintf(\n\t\t/* translators: %s: Variable Type. */\n\t\t__( '%s variables', 'elementor' ),\n\t\tcapitalize( config.variableType )\n\t);\n\n\tconst content = sprintf(\n\t\t/* translators: %s: Variable Type. */\n\t\t__( 'Upgrade to continue creating and editing %s variables.', 'elementor' ),\n\t\tconfig.variableType\n\t);\n\n\treturn (\n\t\t<MenuItem onClick={ handleClick } sx={ { gap: 1.5, cursor: 'pointer' } }>\n\t\t\t{ createElement( config.icon, { fontSize: SIZE, color: isDisabled ? 'disabled' : 'action' } ) }\n\t\t\t<Typography variant=\"caption\" color={ isDisabled ? 'text.disabled' : 'text.primary' }>\n\t\t\t\t{ displayName }\n\t\t\t</Typography>\n\t\t\t{ isDisabled && (\n\t\t\t\t<PromotionPopover\n\t\t\t\t\topen={ isPopoverOpen }\n\t\t\t\t\ttitle={ title }\n\t\t\t\t\tcontent={ content }\n\t\t\t\t\tctaText={ __( 'Upgrade now', 'elementor' ) }\n\t\t\t\t\tctaUrl={ `https://go.elementor.com/go-pro-manager-${ config.variableType }-variable/` }\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tsetIsPopoverOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<PromotionChip />\n\t\t\t\t</PromotionPopover>\n\t\t\t) }\n\t\t</MenuItem>\n\t);\n};\n\nconst getDefaultName = ( variables: TVariablesList, type: string, baseName: string ) => {\n\tconst existingNames = Object.values( variables )\n\t\t.filter( ( variable ) => variable.type === type )\n\t\t.map( ( variable ) => variable.label );\n\n\tlet counter = 1;\n\tlet name = `${ baseName }-${ counter }`;\n\n\twhile ( existingNames.includes( name ) ) {\n\t\tcounter++;\n\t\tname = `${ baseName }-${ counter }`;\n\t}\n\n\treturn name;\n};\n","import { type CanvasExtendedWindow } from './types';\n\nexport function getLicenseInfo() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn {\n\t\thasPro: !! extendedWindow.elementorPro,\n\t};\n}\n","import { getLicenseInfo } from '../sync/license-info';\n\ndeclare global {\n\tinterface Window {\n\t\tElementorVariablesQuotaConfig: Record< string, number >;\n\t}\n}\n\nexport const useQuotaPermissions = ( variableType: string ) => {\n\tconst quotaConfig = window.ElementorVariablesQuotaConfig || {};\n\tconst limit = quotaConfig[ variableType ] || 0;\n\tconst hasQuota = limit > 0;\n\n\treturn {\n\t\tcanAdd: () => hasQuota || getLicenseInfo().hasPro,\n\t\tcanEdit: () => hasQuota || getLicenseInfo().hasPro,\n\t};\n};\n","import * as React from 'react';\nimport { createElement, useEffect, useRef } from 'react';\nimport { EllipsisWithTooltip } from '@elementor/editor-ui';\nimport { GripVerticalIcon } from '@elementor/icons';\nimport {\n\tIconButton,\n\tStack,\n\ttype SxProps,\n\tTable,\n\tTableBody,\n\tTableContainer,\n\tTableHead,\n\tTableRow,\n\tUnstableSortableItem,\n\ttype UnstableSortableItemRenderProps,\n\tUnstableSortableProvider,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type TVariablesList } from '../../storage';\nimport { getVariableType } from '../../variables-registry/variable-type-registry';\nimport { LabelField } from '../fields/label-field';\nimport { VariableEditMenu, type VariableManagerMenuAction } from './ui/variable-edit-menu';\nimport { VariableTableCell } from './ui/variable-table-cell';\nimport { VariableEditableCell } from './variable-editable-cell';\n\ntype Props = {\n\tmenuActions: VariableManagerMenuAction[];\n\tvariables: TVariablesList;\n\tonChange: ( variables: TVariablesList ) => void;\n\tautoEditVariableId?: string;\n\tonAutoEditComplete?: () => void;\n\tonFieldError?: ( hasError: boolean ) => void;\n};\n\ntype Row = ReturnType< typeof getVariableType > & {\n\tid: string;\n\ttype: string;\n\tname: string;\n\tvalue: string;\n};\n\nexport const VariablesManagerTable = ( {\n\tmenuActions,\n\tvariables,\n\tonChange: handleOnChange,\n\tautoEditVariableId,\n\tonAutoEditComplete,\n\tonFieldError,\n}: Props ) => {\n\tconst tableContainerRef = useRef< HTMLDivElement >( null );\n\tconst variableRowRefs = useRef< Map< string, HTMLTableRowElement > >( new Map() );\n\n\tuseEffect( () => {\n\t\tif ( autoEditVariableId && tableContainerRef.current ) {\n\t\t\tconst rowElement = variableRowRefs.current.get( autoEditVariableId );\n\t\t\tif ( rowElement ) {\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\trowElement.scrollIntoView( {\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'center',\n\t\t\t\t\t\tinline: 'nearest',\n\t\t\t\t\t} );\n\t\t\t\t}, 100 );\n\t\t\t}\n\t\t}\n\t}, [ autoEditVariableId ] );\n\n\tconst handleRowRef = ( id: string ) => ( ref: HTMLTableRowElement | null ) => {\n\t\tif ( ref ) {\n\t\t\tvariableRowRefs.current.set( id, ref );\n\t\t} else {\n\t\t\tvariableRowRefs.current.delete( id );\n\t\t}\n\t};\n\n\tconst ids = Object.keys( variables ).sort( sortVariablesOrder( variables ) );\n\tconst rows = ids\n\t\t.map( ( id ) => {\n\t\t\tconst variable = variables[ id ];\n\t\t\tconst variableType = getVariableType( variable.type );\n\n\t\t\tif ( ! variableType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttype: variable.type,\n\t\t\t\tname: variable.label,\n\t\t\t\tvalue: variable.value,\n\t\t\t\t...variableType,\n\t\t\t};\n\t\t} )\n\t\t.filter( Boolean ) as Row[];\n\n\tconst tableSX: SxProps = {\n\t\tminWidth: 250,\n\t\ttableLayout: 'fixed',\n\t};\n\n\tconst handleReorder = ( newIds: string[] ) => {\n\t\tconst updatedVariables = { ...variables };\n\n\t\tnewIds.forEach( ( id, index ) => {\n\t\t\tconst current = updatedVariables[ id ];\n\n\t\t\tif ( ! current ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdatedVariables[ id ] = Object.assign( {}, current, { order: index + 1 } );\n\t\t} );\n\n\t\thandleOnChange( updatedVariables );\n\t};\n\n\treturn (\n\t\t<TableContainer ref={ tableContainerRef } sx={ { overflow: 'initial' } }>\n\t\t\t<Table sx={ tableSX } aria-label=\"Variables manager list with drag and drop reordering\" stickyHeader>\n\t\t\t\t<TableHead>\n\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t<VariableTableCell isHeader noPadding width={ 10 } maxWidth={ 10 } />\n\t\t\t\t\t\t<VariableTableCell isHeader>{ __( 'Name', 'elementor' ) }</VariableTableCell>\n\t\t\t\t\t\t<VariableTableCell isHeader>{ __( 'Value', 'elementor' ) }</VariableTableCell>\n\t\t\t\t\t\t<VariableTableCell isHeader noPadding width={ 16 } maxWidth={ 16 } />\n\t\t\t\t\t</TableRow>\n\t\t\t\t</TableHead>\n\t\t\t\t<TableBody>\n\t\t\t\t\t<UnstableSortableProvider\n\t\t\t\t\t\tvalue={ ids }\n\t\t\t\t\t\tonChange={ handleReorder }\n\t\t\t\t\t\tvariant=\"static\"\n\t\t\t\t\t\trestrictAxis\n\t\t\t\t\t\tdragOverlay={ ( { children: dragOverlayChildren, ...dragOverlayProps } ) => (\n\t\t\t\t\t\t\t<Table sx={ tableSX } { ...dragOverlayProps }>\n\t\t\t\t\t\t\t\t<TableBody>{ dragOverlayChildren }</TableBody>\n\t\t\t\t\t\t\t</Table>\n\t\t\t\t\t\t) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ rows.map( ( row ) => (\n\t\t\t\t\t\t\t<UnstableSortableItem\n\t\t\t\t\t\t\t\tkey={ row.id }\n\t\t\t\t\t\t\t\tid={ row.id }\n\t\t\t\t\t\t\t\trender={ ( {\n\t\t\t\t\t\t\t\t\titemProps,\n\t\t\t\t\t\t\t\t\tshowDropIndication,\n\t\t\t\t\t\t\t\t\ttriggerProps,\n\t\t\t\t\t\t\t\t\titemStyle,\n\t\t\t\t\t\t\t\t\ttriggerStyle,\n\t\t\t\t\t\t\t\t\tisDragged,\n\t\t\t\t\t\t\t\t\tdropPosition,\n\t\t\t\t\t\t\t\t\tsetTriggerRef,\n\t\t\t\t\t\t\t\t\tisSorting,\n\t\t\t\t\t\t\t\t}: UnstableSortableItemRenderProps ) => {\n\t\t\t\t\t\t\t\t\tconst showIndicationBefore = showDropIndication && dropPosition === 'before';\n\t\t\t\t\t\t\t\t\tconst showIndicationAfter = showDropIndication && dropPosition === 'after';\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\t\t\t\t\t\tref={ handleRowRef( 'table-ref-' + row.id ) }\n\t\t\t\t\t\t\t\t\t\t\tselected={ isDragged }\n\t\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\t\t...( showIndicationBefore && {\n\t\t\t\t\t\t\t\t\t\t\t\t\t'& td, & th': {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderTop: '2px solid',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderTopColor: 'primary.main',\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t\t\t\t\t\t...( showIndicationAfter && {\n\t\t\t\t\t\t\t\t\t\t\t\t\t'& td, & th': {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderBottom: '2px solid',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderBottomColor: 'primary.main',\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t\t\t\t\t\t'& [role=\"toolbar\"], & [draggable]': {\n\t\t\t\t\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t'&:hover, &:focus-within': {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'action.hover',\n\t\t\t\t\t\t\t\t\t\t\t\t\t'& [role=\"toolbar\"], & [draggable]': {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\tstyle={ { ...itemStyle, ...triggerStyle } }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<VariableTableCell noPadding width={ 10 } maxWidth={ 10 }>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tref={ setTriggerRef }\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...triggerProps }\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={ isSorting }\n\t\t\t\t\t\t\t\t\t\t\t\t\tdraggable\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<GripVerticalIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t</VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t<VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<VariableEditableCell\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitialValue={ row.name }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ( value !== row.name ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOnChange( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...variables,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ row.id ]: { ...variables[ row.id ], label: value },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\tprefixElement={ createElement( row.icon, { fontSize: 'inherit' } ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\teditableElement={ ( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} ) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LabelField\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={ 'variable-label-' + row.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonErrorChange={ ( errorMsg ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange?.( errorMsg );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonFieldError?.( !! errorMsg );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror={ error }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusOnShow\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectOnShow={ autoEditVariableId === row.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tshowWarningInfotip={ true }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariables={ variables }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\tautoEdit={ autoEditVariableId === row.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonRowRef={ handleRowRef( row.id ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonAutoEditComplete={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tautoEditVariableId === row.id ? onAutoEditComplete : undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfieldType=\"label\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={ row.name }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ { border: '4px solid transparent' } }\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ row.name }\n\t\t\t\t\t\t\t\t\t\t\t\t\t</EllipsisWithTooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t</VariableEditableCell>\n\t\t\t\t\t\t\t\t\t\t\t</VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t<VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<VariableEditableCell\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitialValue={ row.value }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ( value !== row.value ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOnChange( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...variables,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ row.id ]: { ...variables[ row.id ], value },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\teditableElement={ ( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} ) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trow.valueField?.( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tref: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrent: variableRowRefs.current.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'table-ref-' + row.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) as HTMLElement,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonPropTypeKeyChange: ( type ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOnChange( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...variables,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ row.id ]: { ...variables[ row.id ], type },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpropTypeKey: row.type,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange: ( errorMsg ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange?.( errorMsg );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonFieldError?.( !! errorMsg );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} ) ?? <></>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonRowRef={ handleRowRef( row.id ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap={ 0.25 }\n\t\t\t\t\t\t\t\t\t\t\t\t\tfieldType=\"value\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ row.startIcon && row.startIcon( { value: row.value } ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={ row.value }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '4px solid transparent',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: '1',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpt: 0.25,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ row.value }\n\t\t\t\t\t\t\t\t\t\t\t\t\t</EllipsisWithTooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t</VariableEditableCell>\n\t\t\t\t\t\t\t\t\t\t\t</VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t<VariableTableCell\n\t\t\t\t\t\t\t\t\t\t\t\talign=\"right\"\n\t\t\t\t\t\t\t\t\t\t\t\tnoPadding\n\t\t\t\t\t\t\t\t\t\t\t\twidth={ 16 }\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth={ 16 }\n\t\t\t\t\t\t\t\t\t\t\t\tsx={ { paddingInlineEnd: 1 } }\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack role=\"toolbar\" direction=\"row\" justifyContent=\"flex-end\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<VariableEditMenu\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmenuActions={ menuActions }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={ isSorting }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titemId={ row.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\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/>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</UnstableSortableProvider>\n\t\t\t\t</TableBody>\n\t\t\t</Table>\n\t\t</TableContainer>\n\t);\n};\nfunction sortVariablesOrder( variables: TVariablesList ): ( a: string, b: string ) => number {\n\treturn ( a, b ) => {\n\t\tconst orderA = variables[ a ]?.order ?? Number.MAX_SAFE_INTEGER;\n\t\tconst orderB = variables[ b ]?.order ?? Number.MAX_SAFE_INTEGER;\n\t\treturn orderA - orderB;\n\t};\n}\n","import * as React from 'react';\nimport { type KeyboardEvent, useRef, useState } from 'react';\nimport { WarningInfotip } from '@elementor/editor-ui';\nimport { TextField, type TextFieldProps } from '@elementor/ui';\n\nimport { type TVariablesList } from '../../storage';\nimport { labelHint, validateLabel, VARIABLE_LABEL_MAX_LENGTH } from '../../utils/validations';\nfunction isLabelEqual( a: string, b: string ) {\n\treturn a.trim().toLowerCase() === b.trim().toLowerCase();\n}\n\ntype LabelErrorProps = {\n\tvalue: string;\n\tmessage: string;\n};\n\nexport const useLabelError = ( initialError?: LabelErrorProps ) => {\n\tconst [ error, setError ] = useState< LabelErrorProps >( initialError ?? { value: '', message: '' } );\n\n\treturn {\n\t\tlabelFieldError: error,\n\t\tsetLabelFieldError: setError,\n\t};\n};\n\nexport type LabelFieldProps = {\n\tvalue: string;\n\terror?: LabelErrorProps;\n\tonChange: ( value: string ) => void;\n\tid?: string;\n\tonErrorChange?: ( errorMsg: string ) => void;\n\tsize?: TextFieldProps[ 'size' ];\n\tfocusOnShow?: boolean;\n\tselectOnShow?: boolean;\n\tshowWarningInfotip?: boolean;\n\tvariables?: TVariablesList;\n\tonKeyDown?: ( event: KeyboardEvent< HTMLInputElement > ) => void;\n};\n\nexport const LabelField = ( {\n\tvalue,\n\terror,\n\tonChange,\n\tid,\n\tonErrorChange,\n\tsize = 'tiny',\n\tfocusOnShow = false,\n\tselectOnShow = false,\n\tshowWarningInfotip = false,\n\tvariables,\n\tonKeyDown,\n}: LabelFieldProps ) => {\n\tconst [ label, setLabel ] = useState( value );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\n\tconst fieldRef = useRef< HTMLElement >( null );\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetLabel( newValue );\n\n\t\tconst errorMsg = validateLabel( newValue, variables );\n\n\t\tsetErrorMessage( errorMsg );\n\t\tonErrorChange?.( errorMsg );\n\n\t\tonChange( isLabelEqual( newValue, error?.value ?? '' ) || errorMsg ? '' : newValue );\n\t};\n\n\tlet errorMsg = errorMessage;\n\tif ( isLabelEqual( label, error?.value ?? '' ) && error?.message ) {\n\t\terrorMsg = error.message;\n\t}\n\n\tconst hintMsg = ! errorMsg ? labelHint( label ) : '';\n\n\tconst textField = (\n\t\t<TextField\n\t\t\tref={ fieldRef }\n\t\t\tid={ id }\n\t\t\tsize={ size }\n\t\t\tfullWidth\n\t\t\tvalue={ label }\n\t\t\terror={ !! errorMsg }\n\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\tinputProps={ {\n\t\t\t\tmaxLength: VARIABLE_LABEL_MAX_LENGTH,\n\t\t\t\t...( selectOnShow && { onFocus: ( e: React.FocusEvent< HTMLInputElement > ) => e.target.select() } ),\n\t\t\t\t'aria-label': 'Name',\n\t\t\t\tonKeyDown,\n\t\t\t} }\n\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\tautoFocus={ focusOnShow }\n\t\t/>\n\t);\n\n\tif ( showWarningInfotip ) {\n\t\tconst tooltipWidth = Math.max( 240, fieldRef.current?.getBoundingClientRect().width ?? 240 );\n\n\t\treturn (\n\t\t\t<WarningInfotip\n\t\t\t\topen={ Boolean( errorMsg || hintMsg ) }\n\t\t\t\ttext={ errorMsg || hintMsg }\n\t\t\t\tplacement=\"bottom-start\"\n\t\t\t\twidth={ tooltipWidth }\n\t\t\t\toffset={ [ 0, -15 ] }\n\t\t\t\t{ ...( hintMsg && { hasError: false } ) }\n\t\t\t>\n\t\t\t\t{ textField }\n\t\t\t</WarningInfotip>\n\t\t);\n\t}\n\n\treturn textField;\n};\n","import * as React from 'react';\nimport { createElement } from 'react';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport { bindMenu, bindTrigger, IconButton, Menu, MenuItem, type SvgIconProps, usePopupState } from '@elementor/ui';\n\nexport type VariableManagerMenuAction = {\n\tname: string;\n\ticon: React.ForwardRefExoticComponent< Omit< SvgIconProps, 'ref' > & React.RefAttributes< SVGSVGElement > >;\n\tcolor: string;\n\tonClick: ( id: string ) => void;\n};\n\ntype VariableEditMenuProps = {\n\tmenuActions: VariableManagerMenuAction[];\n\tdisabled?: boolean;\n\titemId: string;\n};\n\nexport const VariableEditMenu = ( { menuActions, disabled, itemId }: VariableEditMenuProps ) => {\n\tconst menuState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<IconButton { ...bindTrigger( menuState ) } disabled={ disabled } size=\"tiny\">\n\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t</IconButton>\n\n\t\t\t<Menu\n\t\t\t\tdisablePortal\n\t\t\t\tMenuListProps={ {\n\t\t\t\t\tdense: true,\n\t\t\t\t} }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\televation: 6,\n\t\t\t\t} }\n\t\t\t\t{ ...bindMenu( menuState ) }\n\t\t\t\tanchorEl={ menuState.anchorEl }\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\topen={ menuState.isOpen }\n\t\t\t\tonClose={ menuState.close }\n\t\t\t>\n\t\t\t\t{ menuActions.map( ( action ) => (\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tkey={ action.name }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\taction.onClick?.( itemId );\n\t\t\t\t\t\t\tmenuState.close();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tcolor: action.color,\n\t\t\t\t\t\t\tgap: 1,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ action.icon &&\n\t\t\t\t\t\t\tcreateElement( action.icon, {\n\t\t\t\t\t\t\t\tfontSize: 'inherit',\n\t\t\t\t\t\t\t} ) }{ ' ' }\n\t\t\t\t\t\t{ action.name }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type SxProps, TableCell } from '@elementor/ui';\n\ntype VariableTableCellProps = {\n\tchildren?: React.ReactNode;\n\tisHeader?: boolean;\n\twidth?: number;\n\tmaxWidth?: number;\n\talign?: 'left' | 'right' | 'center';\n\tnoPadding?: boolean;\n\tsx?: SxProps;\n};\n\nexport const VariableTableCell = ( {\n\tchildren,\n\tisHeader,\n\twidth,\n\tmaxWidth,\n\talign,\n\tnoPadding,\n\tsx,\n}: VariableTableCellProps ) => {\n\tconst baseSx: SxProps = {\n\t\tmaxWidth: maxWidth ?? 150,\n\t\tcursor: 'initial',\n\t\ttypography: 'caption',\n\t\t...( isHeader && { color: 'text.primary', fontWeight: 'bold' } ),\n\t\t...( isHeader && ! noPadding && { padding: '10px 16px' } ),\n\t\t...( width && { width } ),\n\t\t...sx,\n\t};\n\n\treturn (\n\t\t<TableCell size=\"small\" padding={ noPadding ? 'none' : undefined } align={ align } sx={ baseSx }>\n\t\t\t{ children }\n\t\t</TableCell>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { ClickAwayListener, Stack } from '@elementor/ui';\n\nimport { type ValueFieldProps } from '../../variables-registry/create-variable-type-registry';\nimport { useLabelError } from '../fields/label-field';\n\ntype VariableEditableCellProps = {\n\tinitialValue: string;\n\tchildren: React.ReactNode;\n\teditableElement: ( { value, onChange, onValidationChange, error }: ValueFieldProps ) => JSX.Element;\n\tonChange: ( newValue: string ) => void;\n\tprefixElement?: React.ReactNode;\n\tautoEdit?: boolean;\n\tonRowRef?: ( ref: HTMLTableRowElement | null ) => void;\n\tonAutoEditComplete?: () => void;\n\tgap?: number;\n\tfieldType?: 'label' | 'value';\n};\n\nexport const VariableEditableCell = React.memo(\n\t( {\n\t\tinitialValue,\n\t\tchildren,\n\t\teditableElement,\n\t\tonChange,\n\t\tprefixElement,\n\t\tautoEdit = false,\n\t\tonRowRef,\n\t\tonAutoEditComplete,\n\t\tgap = 1,\n\t\tfieldType,\n\t}: VariableEditableCellProps ) => {\n\t\tconst [ value, setValue ] = useState( initialValue );\n\t\tconst [ isEditing, setIsEditing ] = useState( false );\n\n\t\tconst { labelFieldError, setLabelFieldError } = useLabelError();\n\t\tconst [ valueFieldError, setValueFieldError ] = useState( '' );\n\n\t\tconst rowRef = useRef< HTMLTableRowElement >( null );\n\n\t\tconst handleSave = useCallback( () => {\n\t\t\tconst hasError =\n\t\t\t\t( fieldType === 'label' && labelFieldError?.message ) || ( fieldType === 'value' && valueFieldError );\n\n\t\t\tif ( ! hasError ) {\n\t\t\t\tonChange( value );\n\t\t\t}\n\t\t\tsetIsEditing( false );\n\t\t}, [ value, onChange, fieldType, labelFieldError, valueFieldError ] );\n\n\t\tuseEffect( () => {\n\t\t\tonRowRef?.( rowRef?.current );\n\t\t}, [ onRowRef ] );\n\n\t\tuseEffect( () => {\n\t\t\tif ( autoEdit && ! isEditing ) {\n\t\t\t\tsetIsEditing( true );\n\t\t\t\tonAutoEditComplete?.();\n\t\t\t}\n\t\t}, [ autoEdit, isEditing, onAutoEditComplete ] );\n\n\t\tconst handleDoubleClick = () => {\n\t\t\tsetIsEditing( true );\n\t\t};\n\n\t\tconst handleKeyDown = ( event: React.KeyboardEvent< HTMLDivElement > ) => {\n\t\t\tif ( event.key === 'Enter' ) {\n\t\t\t\thandleSave();\n\t\t\t} else if ( event.key === 'Escape' ) {\n\t\t\t\tsetIsEditing( false );\n\t\t\t}\n\t\t\tif ( event.key === ' ' && ! isEditing ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetIsEditing( true );\n\t\t\t}\n\t\t};\n\n\t\tconst handleChange = useCallback( ( newValue: string ) => {\n\t\t\tsetValue( newValue );\n\t\t}, [] );\n\n\t\tconst handleValidationChange = useCallback(\n\t\t\t( errorMsg: string ) => {\n\t\t\t\tif ( fieldType === 'label' ) {\n\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tmessage: errorMsg,\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tsetValueFieldError( errorMsg );\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ fieldType, value, setLabelFieldError, setValueFieldError ]\n\t\t);\n\n\t\tlet currentError;\n\t\tif ( fieldType === 'label' ) {\n\t\t\tcurrentError = labelFieldError;\n\t\t} else if ( fieldType === 'value' ) {\n\t\t\tcurrentError = { value, message: valueFieldError };\n\t\t}\n\n\t\tconst editableContent = editableElement( {\n\t\t\tvalue,\n\t\t\tonChange: handleChange,\n\t\t\tonValidationChange: handleValidationChange,\n\t\t\terror: currentError,\n\t\t} );\n\n\t\tif ( isEditing ) {\n\t\t\treturn (\n\t\t\t\t<ClickAwayListener onClickAway={ handleSave }>\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tref={ rowRef }\n\t\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tgap={ gap }\n\t\t\t\t\t\tonDoubleClick={ handleDoubleClick }\n\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\ttabIndex={ 0 }\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\taria-label=\"Double click or press Space to edit\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ prefixElement }\n\t\t\t\t\t\t{ editableContent }\n\t\t\t\t\t</Stack>\n\t\t\t\t</ClickAwayListener>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<Stack\n\t\t\t\tref={ rowRef }\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"center\"\n\t\t\t\tgap={ gap }\n\t\t\t\tonDoubleClick={ handleDoubleClick }\n\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\ttabIndex={ 0 }\n\t\t\t\trole=\"button\"\n\t\t\t\taria-label=\"Double click or press Space to edit\"\n\t\t\t>\n\t\t\t\t{ prefixElement }\n\t\t\t\t{ children }\n\t\t\t</Stack>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type TransformablePropValue } from '@elementor/editor-props';\n\nimport { AssignedVariable } from '../components/ui/variable/assigned-variable';\nimport { DeletedVariable } from '../components/ui/variable/deleted-variable';\nimport { MismatchVariable } from '../components/ui/variable/mismatch-variable';\nimport { MissingVariable } from '../components/ui/variable/missing-variable';\nimport { useVariable } from '../hooks/use-prop-variables';\nimport { getVariableType } from '../variables-registry/variable-type-registry';\n\nexport const VariableControl = () => {\n\tconst boundProp = useBoundProp();\n\n\tconst boundPropValue = ( boundProp.value ?? boundProp.placeholder ) as TransformablePropValue< string, string >;\n\n\tconst assignedVariable = useVariable( boundPropValue?.value );\n\n\tif ( ! assignedVariable ) {\n\t\treturn <MissingVariable />;\n\t}\n\n\tconst { $$type: propTypeKey } = boundPropValue;\n\n\tif ( assignedVariable?.deleted ) {\n\t\treturn <DeletedVariable variable={ assignedVariable } propTypeKey={ propTypeKey } />;\n\t}\n\n\tconst { isCompatible } = getVariableType( assignedVariable.type );\n\n\tif ( isCompatible && ! isCompatible( boundProp?.propType, assignedVariable ) ) {\n\t\treturn <MismatchVariable variable={ assignedVariable } />;\n\t}\n\n\treturn <AssignedVariable variable={ assignedVariable } propTypeKey={ propTypeKey } />;\n};\n","import { useId, useRef } from 'react';\nimport * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type PropTypeKey } from '@elementor/editor-props';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { bindPopover, bindTrigger, Box, Popover, usePopupState } from '@elementor/ui';\n\nimport { type Variable } from '../../../types';\nimport { createUnlinkHandler } from '../../../utils/unlink-variable';\nimport { getVariableType } from '../../../variables-registry/variable-type-registry';\nimport { VariableSelectionPopover } from '../../variable-selection-popover';\nimport { AssignedTag, SIZE } from '../tags/assigned-tag';\n\ntype Props = {\n\tpropTypeKey: PropTypeKey;\n\tvariable: Variable;\n};\n\nexport const AssignedVariable = ( { variable, propTypeKey }: Props ) => {\n\tconst { startIcon, propTypeUtil } = getVariableType( propTypeKey );\n\tconst { setValue } = useBoundProp();\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\n\tconst popupId = useId();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: `elementor-variables-list-${ popupId }`,\n\t} );\n\n\tconst unlinkVariable = createUnlinkHandler( variable, propTypeKey, setValue );\n\n\tconst StartIcon = startIcon || ( () => null );\n\n\treturn (\n\t\t<Box ref={ anchorRef }>\n\t\t\t<AssignedTag\n\t\t\t\tlabel={ variable.label }\n\t\t\t\tstartIcon={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ColorFilterIcon fontSize={ SIZE } />\n\t\t\t\t\t\t<StartIcon value={ variable.value } />\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tonUnlink={ unlinkVariable }\n\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t/>\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorEl={ anchorRef.current }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'right' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\tsx: { my: 1 },\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t>\n\t\t\t\t<VariableSelectionPopover\n\t\t\t\t\tselectedVariable={ variable }\n\t\t\t\t\tclosePopover={ popupState.close }\n\t\t\t\t\tpropTypeKey={ propTypeUtil.key }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</Box>\n\t);\n};\n","import { type PropValue } from '@elementor/editor-props';\n\nimport { type Variable } from '../types';\nimport { getVariableType } from '../variables-registry/variable-type-registry';\n\nexport function transformValueBeforeUnlink( variable: Variable, propTypeKey: string ): string | PropValue {\n\tconst { valueTransformer } = getVariableType( propTypeKey );\n\n\tif ( valueTransformer ) {\n\t\treturn valueTransformer( variable.value, variable.type );\n\t}\n\n\treturn variable.value;\n}\n\nexport function createUnlinkHandler(\n\tvariable: Variable,\n\tpropTypeKey: string,\n\tsetValue: ( value: PropValue ) => void\n): () => void {\n\treturn () => {\n\t\tconst { fallbackPropTypeUtil } = getVariableType( propTypeKey );\n\t\tconst transformedValue = transformValueBeforeUnlink( variable, propTypeKey );\n\n\t\tsetValue( fallbackPropTypeUtil.create( transformedValue ) );\n\t};\n}\n","import * as React from 'react';\nimport { useState } from 'react';\nimport type { PropTypeKey } from '@elementor/editor-props';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nimport { PopoverContentRefContextProvider } from '../context/variable-selection-popover.context';\nimport { VariableTypeProvider } from '../context/variable-type-context';\nimport { usePermissions } from '../hooks/use-permissions';\nimport { useQuotaPermissions } from '../hooks/use-quota-permissions';\nimport { type Variable } from '../types';\nimport { VariableCreation } from './variable-creation';\nimport { VariableEdit } from './variable-edit';\nimport { usePanelActions } from './variables-manager/variables-manager-panel';\nimport { VariablesSelection } from './variables-selection';\n\nconst VIEW_LIST = 'list';\nconst VIEW_ADD = 'add';\nconst VIEW_EDIT = 'edit';\n\ntype View = typeof VIEW_LIST | typeof VIEW_ADD | typeof VIEW_EDIT;\n\ntype Props = {\n\tclosePopover: () => void;\n\tselectedVariable?: Variable;\n\tpropTypeKey: PropTypeKey;\n};\n\nexport const VariableSelectionPopover = ( { closePopover, propTypeKey, selectedVariable }: Props ) => {\n\tconst [ currentView, setCurrentView ] = useState< View >( VIEW_LIST );\n\tconst [ editId, setEditId ] = useState< string >( '' );\n\tconst { open } = usePanelActions();\n\tconst onSettingsAvailable = isExperimentActive( 'e_variables_manager' )\n\t\t? () => {\n\t\t\t\topen();\n\t\t }\n\t\t: undefined;\n\n\treturn (\n\t\t<VariableTypeProvider propTypeKey={ propTypeKey }>\n\t\t\t<PopoverContentRefContextProvider>\n\t\t\t\t{ RenderView( {\n\t\t\t\t\tpropTypeKey,\n\t\t\t\t\tcurrentView,\n\t\t\t\t\tselectedVariable,\n\t\t\t\t\teditId,\n\t\t\t\t\tsetEditId,\n\t\t\t\t\tsetCurrentView,\n\t\t\t\t\tclosePopover,\n\t\t\t\t\tonSettings: onSettingsAvailable,\n\t\t\t\t} ) }\n\t\t\t</PopoverContentRefContextProvider>\n\t\t</VariableTypeProvider>\n\t);\n};\n\ntype ViewProps = {\n\tpropTypeKey: string;\n\tcurrentView: View;\n\tselectedVariable?: Variable;\n\tdisabled?: boolean;\n\teditId: string;\n\tsetEditId: ( id: string ) => void;\n\tsetCurrentView: ( stage: View ) => void;\n\tclosePopover: () => void;\n\tonSettings?: () => void;\n};\n\ntype Handlers = {\n\tonClose: () => void;\n\tonGoBack?: () => void;\n\tonAdd?: () => void;\n\tonEdit?: ( key: string ) => void;\n\tonSettings?: () => void;\n};\n\nfunction RenderView( props: ViewProps ): React.ReactNode {\n\tconst userPermissions = usePermissions();\n\tconst userQuotaPremissions = useQuotaPermissions( props.propTypeKey );\n\n\tconst handlers: Handlers = {\n\t\tonClose: () => {\n\t\t\tprops.closePopover();\n\t\t},\n\t\tonGoBack: () => {\n\t\t\tprops.setCurrentView( VIEW_LIST );\n\t\t},\n\t};\n\n\tif ( userPermissions.canAdd() ) {\n\t\thandlers.onAdd = () => {\n\t\t\tprops.setCurrentView( VIEW_ADD );\n\t\t};\n\t}\n\n\tif ( userPermissions.canEdit() ) {\n\t\thandlers.onEdit = ( key: string ) => {\n\t\t\tprops.setEditId( key );\n\t\t\tprops.setCurrentView( VIEW_EDIT );\n\t\t};\n\t}\n\n\tif ( userPermissions.canManageSettings() && props.onSettings ) {\n\t\thandlers.onSettings = () => {\n\t\t\tprops.closePopover();\n\t\t\tprops.onSettings?.();\n\t\t};\n\t}\n\n\tconst handleSubmitOnEdit = () => {\n\t\tif ( props?.selectedVariable?.key === props.editId ) {\n\t\t\thandlers.onClose();\n\t\t} else {\n\t\t\thandlers.onGoBack?.();\n\t\t}\n\t};\n\n\tif ( VIEW_LIST === props.currentView ) {\n\t\treturn (\n\t\t\t<VariablesSelection\n\t\t\t\tclosePopover={ handlers.onClose }\n\t\t\t\tonAdd={ handlers.onAdd }\n\t\t\t\tonEdit={ handlers.onEdit }\n\t\t\t\tonSettings={ handlers.onSettings }\n\t\t\t\tdisabled={ ! userQuotaPremissions.canAdd() }\n\t\t\t/>\n\t\t);\n\t}\n\n\tif ( VIEW_ADD === props.currentView ) {\n\t\treturn <VariableCreation onGoBack={ handlers.onGoBack } onClose={ handlers.onClose } />;\n\t}\n\n\tif ( VIEW_EDIT === props.currentView ) {\n\t\treturn (\n\t\t\t<VariableEdit\n\t\t\t\teditId={ props.editId }\n\t\t\t\tonGoBack={ handlers.onGoBack }\n\t\t\t\tonClose={ handlers.onClose }\n\t\t\t\tonSubmit={ handleSubmitOnEdit }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n}\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, type RefObject, useContext, useState } from 'react';\nimport { Box } from '@elementor/ui';\n\nconst PopoverContentRefContext = createContext< RefObject< HTMLDivElement > | null >( null );\n\nexport const PopoverContentRefContextProvider = ( { children }: PropsWithChildren ) => {\n\tconst [ anchorRef, setAnchorRef ] = useState< RefObject< HTMLDivElement > | null >( null );\n\n\treturn (\n\t\t<PopoverContentRefContext.Provider value={ anchorRef }>\n\t\t\t<Box ref={ setAnchorRef }>{ children }</Box>\n\t\t</PopoverContentRefContext.Provider>\n\t);\n};\n\nexport const usePopoverContentRef = () => {\n\treturn useContext( PopoverContentRefContext );\n};\n","import * as React from 'react';\nimport { type KeyboardEvent, useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverBody } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon } from '@elementor/icons';\nimport { Button, CardActions, Divider, FormHelperText, IconButton, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useVariableType } from '../context/variable-type-context';\nimport { useInitialValue } from '../hooks/use-initial-value';\nimport { createVariable } from '../hooks/use-prop-variables';\nimport { useVariableBoundProp } from '../hooks/use-variable-bound-prop';\nimport { trackVariableEvent } from '../utils/tracking';\nimport { ERROR_MESSAGES, labelHint, mapServerError } from '../utils/validations';\nimport { LabelField, useLabelError } from './fields/label-field';\nimport { FormField } from './ui/form-field';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tonGoBack?: () => void;\n\tonClose: () => void;\n};\n\nexport const VariableCreation = ( { onGoBack, onClose }: Props ) => {\n\tconst { icon: VariableIcon, valueField: ValueField, variableType, propTypeUtil } = useVariableType();\n\n\tconst { setVariableValue: setVariable, path } = useVariableBoundProp();\n\tconst { propType } = useBoundProp();\n\n\tconst initialValue = useInitialValue();\n\n\tconst [ value, setValue ] = useState( initialValue );\n\tconst [ label, setLabel ] = useState( '' );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\tconst [ valueFieldError, setValueFieldError ] = useState( '' );\n\tconst [ propTypeKey, setPropTypeKey ] = useState( propTypeUtil.key );\n\n\tconst { labelFieldError, setLabelFieldError } = useLabelError();\n\n\tconst resetFields = () => {\n\t\tsetValue( '' );\n\t\tsetLabel( '' );\n\t\tsetErrorMessage( '' );\n\t\tsetValueFieldError( '' );\n\t};\n\n\tconst closePopover = () => {\n\t\tresetFields();\n\t\tonClose();\n\t};\n\n\tconst handleCreateAndTrack = () => {\n\t\tcreateVariable( {\n\t\t\tvalue,\n\t\t\tlabel,\n\t\t\ttype: propTypeKey,\n\t\t} )\n\t\t\t.then( ( key ) => {\n\t\t\t\tsetVariable( key );\n\t\t\t\tclosePopover();\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tconst mappedError = mapServerError( error );\n\t\t\t\tif ( mappedError && 'label' === mappedError.field ) {\n\t\t\t\t\tsetLabel( '' );\n\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\tmessage: mappedError.message,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetErrorMessage( ERROR_MESSAGES.UNEXPECTED_ERROR );\n\t\t\t} );\n\n\t\ttrackVariableEvent( {\n\t\t\tvarType: variableType,\n\t\t\tcontrolPath: path.join( '.' ),\n\t\t\taction: 'save',\n\t\t} );\n\t};\n\n\tconst hasEmptyFields = () => {\n\t\tif ( '' === label.trim() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( 'string' === typeof value ) {\n\t\t\treturn '' === value.trim();\n\t\t}\n\n\t\treturn false === Boolean( value );\n\t};\n\n\tconst hasErrors = () => {\n\t\treturn !! errorMessage;\n\t};\n\n\tconst isSubmitDisabled = hasEmptyFields() || hasErrors();\n\n\tconst handleKeyDown = ( event: KeyboardEvent< HTMLElement > ) => {\n\t\tif ( event.key === 'Enter' && ! isSubmitDisabled ) {\n\t\t\tevent.preventDefault();\n\t\t\thandleCreateAndTrack();\n\t\t}\n\t};\n\n\treturn (\n\t\t<PopoverBody height=\"auto\">\n\t\t\t<PopoverHeader\n\t\t\t\ticon={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ onGoBack && (\n\t\t\t\t\t\t\t<IconButton size={ SIZE } aria-label={ __( 'Go Back', 'elementor' ) } onClick={ onGoBack }>\n\t\t\t\t\t\t\t\t<ArrowLeftIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<VariableIcon fontSize={ SIZE } />\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\ttitle={ __( 'Create variable', 'elementor' ) }\n\t\t\t\tonClose={ closePopover }\n\t\t\t/>\n\n\t\t\t<Divider />\n\n\t\t\t<PopoverContent p={ 2 }>\n\t\t\t\t<FormField\n\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\tlabel={ __( 'Name', 'elementor' ) }\n\t\t\t\t\terrorMsg={ labelFieldError?.message }\n\t\t\t\t\tnoticeMsg={ labelHint( label ) }\n\t\t\t\t>\n\t\t\t\t\t<LabelField\n\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\terror={ labelFieldError }\n\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\tsetLabel( newValue );\n\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonErrorChange={ ( errorMsg ) => {\n\t\t\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\t\t\tmessage: errorMsg,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t/>\n\t\t\t\t</FormField>\n\t\t\t\t{ ValueField && (\n\t\t\t\t\t<FormField errorMsg={ valueFieldError } label={ __( 'Value', 'elementor' ) }>\n\t\t\t\t\t\t<Typography variant=\"h5\" id=\"variable-value-wrapper\">\n\t\t\t\t\t\t\t<ValueField\n\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\tonPropTypeKeyChange={ ( key: string ) => setPropTypeKey( key ) }\n\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\tsetValue( newValue );\n\t\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t\t\tsetValueFieldError( '' );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tonValidationChange={ setValueFieldError }\n\t\t\t\t\t\t\t\tpropType={ propType }\n\t\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</FormField>\n\t\t\t\t) }\n\n\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t</PopoverContent>\n\n\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t<Button\n\t\t\t\t\tid=\"create-variable-button\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\tdisabled={ isSubmitDisabled }\n\t\t\t\t\tonClick={ handleCreateAndTrack }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Create', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardActions>\n\t\t</PopoverBody>\n\t);\n};\n","import { useBoundProp } from '@elementor/editor-controls';\n\nimport { hasVariableType } from '../variables-registry/variable-type-registry';\nimport { useVariable } from './use-prop-variables';\n\ntype PropValue = {\n\t$$type: string;\n\tvalue: string;\n};\n\nexport const useInitialValue = () => {\n\tconst { value: initial }: { value: PropValue } = useBoundProp();\n\n\tconst hasAssignedVariable = hasVariableType( initial?.$$type ) && Boolean( initial?.value );\n\tconst variable = useVariable( hasAssignedVariable ? initial.value : '' );\n\n\tif ( hasAssignedVariable ) {\n\t\treturn variable ? variable.value : '';\n\t}\n\n\treturn initial?.value ?? '';\n};\n","import { useBoundProp } from '@elementor/editor-controls';\nimport { isTransformable, type PropValue } from '@elementor/editor-props';\n\nimport { useVariableType } from '../context/variable-type-context';\n\ntype BoundProp = ReturnType< typeof useBoundProp< PropValue > >;\n\ntype VariableBoundProp = ReturnType< typeof useBoundProp< string > > & {\n\tsetVariableValue: ( value: PropValue ) => void;\n\tvariableId: string | null;\n};\n\nexport const useVariableBoundProp = (): VariableBoundProp => {\n\tconst { propTypeUtil } = useVariableType();\n\tconst boundProp = useBoundProp( propTypeUtil );\n\n\treturn {\n\t\t...boundProp,\n\t\tsetVariableValue: ( value: PropValue ) => resolveBoundPropAndSetValue( value, boundProp as BoundProp ),\n\t\tvariableId: boundProp.value ?? boundProp.placeholder,\n\t};\n};\n\nexport const resolveBoundPropAndSetValue = ( value: PropValue, boundProp: BoundProp ) => {\n\tconst propValue = unwrapValue( boundProp.value );\n\tconst placeholder = unwrapValue( boundProp.placeholder );\n\tconst newValue = unwrapValue( value );\n\n\tif ( ! propValue && placeholder === newValue ) {\n\t\treturn boundProp.setValue( null );\n\t}\n\n\treturn boundProp.setValue( value );\n};\n\nconst unwrapValue = ( input: PropValue ): PropValue => {\n\tif ( isTransformable( input ) ) {\n\t\treturn input.value;\n\t}\n\n\treturn input;\n};\n","import * as React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { FormHelperText, FormLabel, Grid } from '@elementor/ui';\n\ntype Props = PropsWithChildren< {\n\tid?: string;\n\tlabel: string;\n\terrorMsg?: string;\n\tnoticeMsg?: string;\n} >;\n\nexport const FormField = ( { id, label, errorMsg, noticeMsg, children }: Props ) => {\n\treturn (\n\t\t<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<FormLabel htmlFor={ id } size=\"tiny\">\n\t\t\t\t\t{ label }\n\t\t\t\t</FormLabel>\n\t\t\t</Grid>\n\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t{ children }\n\t\t\t\t{ errorMsg && <FormHelperText error>{ errorMsg }</FormHelperText> }\n\t\t\t\t{ noticeMsg && <FormHelperText>{ noticeMsg }</FormHelperText> }\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import * as React from 'react';\nimport { type KeyboardEvent, useEffect, useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { useSuppressedMessage } from '@elementor/editor-current-user';\nimport { PopoverBody } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, TrashIcon } from '@elementor/icons';\nimport { Button, CardActions, Divider, FormHelperText, IconButton, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useVariableType } from '../context/variable-type-context';\nimport { usePermissions } from '../hooks/use-permissions';\nimport { deleteVariable, updateVariable, useVariable } from '../hooks/use-prop-variables';\nimport { useVariableBoundProp } from '../hooks/use-variable-bound-prop';\nimport { styleVariablesRepository } from '../style-variables-repository';\nimport { ERROR_MESSAGES, labelHint, mapServerError } from '../utils/validations';\nimport { LabelField, useLabelError } from './fields/label-field';\nimport { DeleteConfirmationDialog } from './ui/delete-confirmation-dialog';\nimport { EDIT_CONFIRMATION_DIALOG_ID, EditConfirmationDialog } from './ui/edit-confirmation-dialog';\nimport { FormField } from './ui/form-field';\n\nconst SIZE = 'tiny';\nconst DELETE_LABEL = __( 'Delete variable', 'elementor' );\n\ntype Props = {\n\teditId: string;\n\tonClose: () => void;\n\tonGoBack?: () => void;\n\tonSubmit?: () => void;\n};\n\nexport const VariableEdit = ( { onClose, onGoBack, onSubmit, editId }: Props ) => {\n\tconst { icon: VariableIcon, valueField: ValueField, variableType, propTypeUtil } = useVariableType();\n\n\tconst { setVariableValue: notifyBoundPropChange, variableId } = useVariableBoundProp();\n\tconst { propType } = useBoundProp();\n\tconst [ isMessageSuppressed, suppressMessage ] = useSuppressedMessage( EDIT_CONFIRMATION_DIALOG_ID );\n\tconst [ deleteConfirmation, setDeleteConfirmation ] = useState( false );\n\tconst [ editConfirmation, setEditConfirmation ] = useState( false );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\tconst [ valueFieldError, setValueFieldError ] = useState( '' );\n\n\tconst { labelFieldError, setLabelFieldError } = useLabelError();\n\tconst variable = useVariable( editId );\n\n\tconst [ propTypeKey, setPropTypeKey ] = useState( variable?.type ?? propTypeUtil.key );\n\n\tif ( ! variable ) {\n\t\tthrow new Error( `Global ${ variableType } variable not found` );\n\t}\n\n\tconst userPermissions = usePermissions();\n\n\tconst [ value, setValue ] = useState( () => variable.value );\n\tconst [ label, setLabel ] = useState( () => variable.label );\n\n\tuseEffect( () => {\n\t\tstyleVariablesRepository.update( {\n\t\t\t[ editId ]: {\n\t\t\t\t...variable,\n\t\t\t\tvalue,\n\t\t\t},\n\t\t} );\n\n\t\treturn () => {\n\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t[ editId ]: { ...variable },\n\t\t\t} );\n\t\t};\n\t}, [ editId, value, variable ] );\n\n\tconst handleUpdate = () => {\n\t\tif ( isMessageSuppressed ) {\n\t\t\thandleSaveVariable();\n\t\t} else {\n\t\t\tsetEditConfirmation( true );\n\t\t}\n\t};\n\n\tconst handleSaveVariable = () => {\n\t\tconst typeChanged = propTypeKey !== variable.type;\n\t\tconst updatePayload = typeChanged ? { value, label, type: propTypeKey } : { value, label };\n\n\t\tupdateVariable( editId, updatePayload )\n\t\t\t.then( () => {\n\t\t\t\tmaybeTriggerBoundPropChange();\n\t\t\t\tonSubmit?.();\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tconst mappedError = mapServerError( error );\n\t\t\t\tif ( mappedError && 'label' === mappedError.field ) {\n\t\t\t\t\tsetLabel( '' );\n\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\tmessage: mappedError.message,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetErrorMessage( ERROR_MESSAGES.UNEXPECTED_ERROR );\n\t\t\t} );\n\t};\n\n\tconst handleDelete = () => {\n\t\tdeleteVariable( editId ).then( () => {\n\t\t\tmaybeTriggerBoundPropChange();\n\t\t\tonSubmit?.();\n\t\t} );\n\t};\n\n\tconst maybeTriggerBoundPropChange = () => {\n\t\tif ( editId === variableId ) {\n\t\t\tnotifyBoundPropChange( editId );\n\t\t}\n\t};\n\n\tconst handleDeleteConfirmation = () => {\n\t\tsetDeleteConfirmation( true );\n\t};\n\n\tconst closeDeleteDialog = () => () => {\n\t\tsetDeleteConfirmation( false );\n\t};\n\n\tconst closeEditDialog = () => () => {\n\t\tsetEditConfirmation( false );\n\t};\n\n\tconst actions = [];\n\n\tif ( userPermissions.canDelete() ) {\n\t\tactions.push(\n\t\t\t<Tooltip key=\"delete\" placement=\"top\" title={ DELETE_LABEL }>\n\t\t\t\t<IconButton size={ SIZE } onClick={ handleDeleteConfirmation } aria-label={ DELETE_LABEL }>\n\t\t\t\t\t<TrashIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\tconst hasEmptyFields = () => {\n\t\tif ( '' === label.trim() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( 'string' === typeof value ) {\n\t\t\treturn '' === value.trim();\n\t\t}\n\n\t\treturn false === Boolean( value );\n\t};\n\n\tconst noValueChanged = () => {\n\t\treturn value === variable.value && label === variable.label;\n\t};\n\n\tconst hasErrors = () => {\n\t\treturn !! errorMessage;\n\t};\n\n\tconst isSubmitDisabled = noValueChanged() || hasEmptyFields() || hasErrors();\n\n\tconst handleKeyDown = ( event: KeyboardEvent< HTMLElement > ) => {\n\t\tif ( event.key === 'Enter' && ! isSubmitDisabled ) {\n\t\t\tevent.preventDefault();\n\t\t\thandleUpdate();\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PopoverBody height=\"auto\">\n\t\t\t\t<PopoverHeader\n\t\t\t\t\ttitle={ __( 'Edit variable', 'elementor' ) }\n\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\ticon={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ onGoBack && (\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\t\t\taria-label={ __( 'Go Back', 'elementor' ) }\n\t\t\t\t\t\t\t\t\tonClick={ onGoBack }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ArrowLeftIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<VariableIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t\tactions={ actions }\n\t\t\t\t/>\n\n\t\t\t\t<Divider />\n\n\t\t\t\t<PopoverContent p={ 2 }>\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\tlabel={ __( 'Name', 'elementor' ) }\n\t\t\t\t\t\terrorMsg={ labelFieldError?.message }\n\t\t\t\t\t\tnoticeMsg={ labelHint( label ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<LabelField\n\t\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\terror={ labelFieldError }\n\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\tsetLabel( newValue );\n\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonErrorChange={ ( errorMsg ) => {\n\t\t\t\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\t\t\t\tmessage: errorMsg,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t\t{ ValueField && (\n\t\t\t\t\t\t<FormField errorMsg={ valueFieldError } label={ __( 'Value', 'elementor' ) }>\n\t\t\t\t\t\t\t<Typography variant=\"h5\">\n\t\t\t\t\t\t\t\t<ValueField\n\t\t\t\t\t\t\t\t\tpropTypeKey={ variable.type }\n\t\t\t\t\t\t\t\t\tonPropTypeKeyChange={ ( key: string ) => setPropTypeKey( key ) }\n\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\t\tsetValue( newValue );\n\t\t\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t\t\t\tsetValueFieldError( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t\t\t\tonValidationChange={ setValueFieldError }\n\t\t\t\t\t\t\t\t\tpropType={ propType }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t\t</PopoverContent>\n\n\t\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isSubmitDisabled } onClick={ handleUpdate }>\n\t\t\t\t\t\t{ __( 'Save', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</CardActions>\n\t\t\t</PopoverBody>\n\n\t\t\t{ deleteConfirmation && (\n\t\t\t\t<DeleteConfirmationDialog\n\t\t\t\t\topen\n\t\t\t\t\tlabel={ label }\n\t\t\t\t\tonConfirm={ handleDelete }\n\t\t\t\t\tcloseDialog={ closeDeleteDialog() }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ editConfirmation && ! isMessageSuppressed && (\n\t\t\t\t<EditConfirmationDialog\n\t\t\t\t\tcloseDialog={ closeEditDialog() }\n\t\t\t\t\tonConfirm={ handleSaveVariable }\n\t\t\t\t\tonSuppressMessage={ suppressMessage }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { AlertTriangleFilledIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tCheckbox,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogContentText,\n\tDialogTitle,\n\tFormControlLabel,\n\tTypography,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EDIT_CONFIRMATION_DIALOG_ID = 'edit-confirmation-dialog';\n\nexport const EditConfirmationDialog = ( {\n\tcloseDialog,\n\tonConfirm,\n\tonSuppressMessage,\n}: {\n\tcloseDialog: () => void;\n\tonConfirm?: () => void;\n\tonSuppressMessage?: () => void;\n} ) => {\n\tconst [ dontShowAgain, setDontShowAgain ] = useState( false );\n\n\tconst handleSave = () => {\n\t\tif ( dontShowAgain ) {\n\t\t\tonSuppressMessage?.();\n\t\t}\n\t\tonConfirm?.();\n\t};\n\n\treturn (\n\t\t<Dialog open onClose={ closeDialog } maxWidth=\"xs\">\n\t\t\t<DialogTitle display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t<AlertTriangleFilledIcon color=\"secondary\" />\n\t\t\t\t{ __( 'Changes to variables go live right away.', 'elementor' ) }\n\t\t\t</DialogTitle>\n\t\t\t<DialogContent>\n\t\t\t\t<DialogContentText variant=\"body2\" color=\"textPrimary\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t\"Don't worry - all other changes you make will wait until you publish your site.\",\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t</DialogContentText>\n\t\t\t</DialogContent>\n\t\t\t<DialogActions sx={ { justifyContent: 'space-between', alignItems: 'center' } }>\n\t\t\t\t<FormControlLabel\n\t\t\t\t\tcontrol={\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={ dontShowAgain }\n\t\t\t\t\t\t\tonChange={ ( event: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\t\tsetDontShowAgain( event.target.checked )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\tlabel={ <Typography variant=\"body2\">{ __( \"Don't show me again\", 'elementor' ) }</Typography> }\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<Button color=\"secondary\" onClick={ closeDialog }>\n\t\t\t\t\t\t{ __( 'Keep editing', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button variant=\"contained\" color=\"secondary\" onClick={ handleSave } sx={ { ml: 1 } }>\n\t\t\t\t\t\t{ __( 'Save', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</DialogActions>\n\t\t</Dialog>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { PopoverBody } from '@elementor/editor-editing-panel';\nimport { PopoverHeader, PopoverMenuList, SearchField, type VirtualizedItem } from '@elementor/editor-ui';\nimport { ColorFilterIcon, PlusIcon, SettingsIcon } from '@elementor/icons';\nimport { Divider, IconButton, Tooltip } from '@elementor/ui';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport { useVariableType } from '../context/variable-type-context';\nimport { useFilteredVariables } from '../hooks/use-prop-variables';\nimport { useVariableBoundProp } from '../hooks/use-variable-bound-prop';\nimport { type ExtendedVirtualizedItem } from '../types';\nimport { trackVariableEvent, trackVariablesManagerEvent } from '../utils/tracking';\nimport { EmptyState } from './ui/empty-state';\nimport { MenuItemContent } from './ui/menu-item-content';\nimport { NoSearchResults } from './ui/no-search-results';\nimport { VariablesStyledMenuList } from './ui/styled-menu-list';\n\nconst SIZE = 'tiny';\nconst CREATE_LABEL = __( 'Create variable', 'elementor' );\nconst MANAGER_LABEL = __( 'Variables Manager', 'elementor' );\n\ntype Props = {\n\tclosePopover: () => void;\n\tonAdd?: () => void;\n\tonEdit?: ( key: string ) => void;\n\tonSettings?: () => void;\n\tdisabled?: boolean;\n};\n\nexport const VariablesSelection = ( { closePopover, onAdd, onEdit, onSettings, disabled = false }: Props ) => {\n\tconst { icon: VariableIcon, startIcon, variableType, propTypeUtil, emptyState } = useVariableType();\n\n\tconst { value: variable, setValue: setVariable, path } = useVariableBoundProp();\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst {\n\t\tlist: variables,\n\t\thasMatches: hasSearchResults,\n\t\tisSourceNotEmpty: hasVariables,\n\t\thasNoCompatibleVariables,\n\t} = useFilteredVariables( searchValue, propTypeUtil.key );\n\n\tconst handleSetVariable = ( key: string ) => {\n\t\tsetVariable( key );\n\t\ttrackVariableEvent( {\n\t\t\tvarType: variableType,\n\t\t\tcontrolPath: path.join( '.' ),\n\t\t\taction: 'connect',\n\t\t} );\n\t\tclosePopover();\n\t};\n\n\tconst onAddAndTrack = () => {\n\t\tonAdd?.();\n\t\ttrackVariableEvent( {\n\t\t\tvarType: variableType,\n\t\t\tcontrolPath: path.join( '.' ),\n\t\t\taction: 'add',\n\t\t} );\n\t};\n\n\tconst actions = [];\n\n\tif ( onAdd ) {\n\t\tactions.push(\n\t\t\t<Tooltip key=\"add\" placement=\"top\" title={ CREATE_LABEL }>\n\t\t\t\t<span>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tid=\"add-variable-button\"\n\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\tonClick={ onAddAndTrack }\n\t\t\t\t\t\taria-label={ CREATE_LABEL }\n\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</span>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\tif ( onSettings ) {\n\t\tconst handleOpenManager = () => {\n\t\t\tonSettings();\n\t\t\ttrackVariablesManagerEvent( {\n\t\t\t\taction: 'openManager',\n\t\t\t\tvarType: variableType,\n\t\t\t\tcontrolPath: path.join( '.' ),\n\t\t\t} );\n\t\t};\n\n\t\tactions.push(\n\t\t\t<Tooltip key=\"settings\" placement=\"top\" title={ MANAGER_LABEL }>\n\t\t\t\t<IconButton\n\t\t\t\t\tid=\"variables-manager-button\"\n\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\tonClick={ handleOpenManager }\n\t\t\t\t\taria-label={ MANAGER_LABEL }\n\t\t\t\t>\n\t\t\t\t\t<SettingsIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\tconst StartIcon = startIcon || ( () => <VariableIcon fontSize={ SIZE } /> );\n\n\tconst items: ExtendedVirtualizedItem[] = variables.map( ( { value, label, key } ) => ( {\n\t\ttype: 'item' as const,\n\t\tvalue: key,\n\t\tlabel,\n\t\ticon: <StartIcon value={ value } />,\n\t\tsecondaryText: value,\n\t\tonEdit: onEdit ? () => onEdit?.( key ) : undefined,\n\t} ) );\n\n\tconst handleSearch = ( search: string ) => {\n\t\tsetSearchValue( search );\n\t};\n\n\tconst handleClearSearch = () => {\n\t\tsetSearchValue( '' );\n\t};\n\n\treturn (\n\t\t<PopoverBody>\n\t\t\t<PopoverHeader\n\t\t\t\ttitle={ __( 'Variables', 'elementor' ) }\n\t\t\t\ticon={ <ColorFilterIcon fontSize={ SIZE } /> }\n\t\t\t\tonClose={ closePopover }\n\t\t\t\tactions={ actions }\n\t\t\t/>\n\n\t\t\t{ hasVariables && (\n\t\t\t\t<SearchField\n\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\tonSearch={ handleSearch }\n\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t<Divider />\n\n\t\t\t{ hasVariables && hasSearchResults && (\n\t\t\t\t<PopoverMenuList\n\t\t\t\t\titems={ items }\n\t\t\t\t\tonSelect={ handleSetVariable }\n\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\tselectedValue={ variable }\n\t\t\t\t\tdata-testid={ `${ variableType }-variables-list` }\n\t\t\t\t\tmenuListTemplate={ VariablesStyledMenuList }\n\t\t\t\t\tmenuItemContentTemplate={ ( item: VirtualizedItem< 'item', string > ) => (\n\t\t\t\t\t\t<MenuItemContent item={ item } />\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ ! hasSearchResults && hasVariables && (\n\t\t\t\t<NoSearchResults\n\t\t\t\t\tsearchValue={ searchValue }\n\t\t\t\t\tonClear={ handleClearSearch }\n\t\t\t\t\ticon={ <VariableIcon fontSize=\"large\" /> }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ disabled && (\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t/* translators: %s: Variable Type. */\n\t\t\t\t\t\t__( 'No %s variables yet', 'elementor' ),\n\t\t\t\t\t\tvariableType\n\t\t\t\t\t) }\n\t\t\t\t\tmessage={ sprintf(\n\t\t\t\t\t\t/* translators: %s: Variable Type. */\n\t\t\t\t\t\t__( 'Upgrade to create %s variables and maintain consistent element sizing.', 'elementor' ),\n\t\t\t\t\t\tvariableType\n\t\t\t\t\t) }\n\t\t\t\t\ticon={ <VariableIcon fontSize=\"large\" /> }\n\t\t\t\t>\n\t\t\t\t\t{ emptyState }\n\t\t\t\t</EmptyState>\n\t\t\t) }\n\n\t\t\t{ ! hasVariables && ! hasNoCompatibleVariables && ! disabled && (\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t/* translators: %s: Variable Type. */\n\t\t\t\t\t\t__( 'Create your first %s variable', 'elementor' ),\n\t\t\t\t\t\tvariableType\n\t\t\t\t\t) }\n\t\t\t\t\tmessage={ __(\n\t\t\t\t\t\t'Variables are saved attributes that you can apply anywhere on your site.',\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t\ticon={ <VariableIcon fontSize=\"large\" /> }\n\t\t\t\t\tonAdd={ onAdd }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ hasNoCompatibleVariables && ! disabled && (\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={ __( 'No compatible variables', 'elementor' ) }\n\t\t\t\t\tmessage={ __(\n\t\t\t\t\t\t'Looks like none of your variables work with this control. Create a new variable to use it here.',\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t\ticon={ <VariableIcon fontSize=\"large\" /> }\n\t\t\t\t\tonAdd={ onAdd }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</PopoverBody>\n\t);\n};\n","import * as React from 'react';\nimport { EllipsisWithTooltip, type VirtualizedItem } from '@elementor/editor-ui';\nimport { EditIcon } from '@elementor/icons';\nimport { Box, IconButton, ListItemIcon, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\nconst EDIT_LABEL = __( 'Edit variable', 'elementor' );\n\nexport const MenuItemContent = < T, V extends string >( { item }: { item: VirtualizedItem< T, V > } ) => {\n\tconst onEdit = item.onEdit as ( ( value: V ) => void ) | undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<ListItemIcon>{ item.icon }</ListItemIcon>\n\t\t\t<Box\n\t\t\t\tsx={ {\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t\tdisplay: 'flex',\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<EllipsisWithTooltip\n\t\t\t\t\ttitle={ item.label || item.value }\n\t\t\t\t\tas={ Typography }\n\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\tcolor=\"text.primary\"\n\t\t\t\t\tsx={ { marginTop: '1px', lineHeight: '2' } }\n\t\t\t\t\tmaxWidth=\"50%\"\n\t\t\t\t/>\n\t\t\t\t{ item.secondaryText && (\n\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\ttitle={ item.secondaryText }\n\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\tcolor=\"text.tertiary\"\n\t\t\t\t\t\tsx={ { marginTop: '1px', lineHeight: '1' } }\n\t\t\t\t\t\tmaxWidth=\"50%\"\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t\t{ !! onEdit && (\n\t\t\t\t<Tooltip placement=\"top\" title={ EDIT_LABEL }>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tsx={ { mx: 1, opacity: '0' } }\n\t\t\t\t\t\tonClick={ ( e: React.MouseEvent< HTMLButtonElement > ) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tonEdit( item.value );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\taria-label={ EDIT_LABEL }\n\t\t\t\t\t>\n\t\t\t\t\t\t<EditIcon color=\"action\" fontSize={ SIZE } />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t) }\n\t\t</>\n\t);\n};\n","import { MenuList, styled } from '@elementor/ui';\n\nexport const VariablesStyledMenuList = styled( MenuList )( ( { theme } ) => ( {\n\t'& > li': {\n\t\theight: 32,\n\t\twidth: '100%',\n\t\tdisplay: 'flex',\n\t\talignItems: 'center',\n\t},\n\t'& > [role=\"option\"]': {\n\t\t...theme.typography.caption,\n\t\tlineHeight: 'inherit',\n\t\tpadding: theme.spacing( 0.5, 1, 0.5, 2 ),\n\t\t'&:hover, &:focus': {\n\t\t\tbackgroundColor: theme.palette.action.hover,\n\t\t},\n\t\t'&[aria-selected=\"true\"]': {\n\t\t\tbackgroundColor: theme.palette.action.selected,\n\t\t},\n\t\tcursor: 'pointer',\n\t\ttextOverflow: 'ellipsis',\n\t\tposition: 'absolute',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\t'&:hover .MuiIconButton-root, .MuiIconButton-root:focus': {\n\t\t\topacity: 1,\n\t\t},\n\t},\n\twidth: '100%',\n\tposition: 'relative',\n} ) );\n","import * as React from 'react';\nimport { DetachIcon } from '@elementor/icons';\nimport { Box, IconButton, Stack, Tooltip, Typography, UnstableTag as Tag, type UnstableTagProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const SIZE = 'tiny';\nconst UNLINK_LABEL = __( 'Unlink variable', 'elementor' );\n\ninterface VariableTagProps extends UnstableTagProps {\n\tonUnlink?: () => void;\n}\n\nexport const AssignedTag = ( { startIcon, label, onUnlink, ...props }: VariableTagProps ) => {\n\tconst actions = [];\n\n\tif ( onUnlink ) {\n\t\tactions.push(\n\t\t\t<Tooltip key=\"unlink\" title={ UNLINK_LABEL } placement=\"bottom\">\n\t\t\t\t<IconButton size={ SIZE } onClick={ onUnlink } aria-label={ UNLINK_LABEL }>\n\t\t\t\t\t<DetachIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Tooltip title={ label } placement=\"top\">\n\t\t\t<Tag\n\t\t\t\tfullWidth\n\t\t\t\tshowActionsOnHover\n\t\t\t\tstartIcon={\n\t\t\t\t\t<Stack gap={ 0.5 } direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t{ startIcon }\n\t\t\t\t\t</Stack>\n\t\t\t\t}\n\t\t\t\tlabel={\n\t\t\t\t\t<Box sx={ { display: 'inline-grid', minWidth: 0 } }>\n\t\t\t\t\t\t<Typography sx={ { lineHeight: 1.34 } } variant=\"caption\" noWrap>\n\t\t\t\t\t\t\t{ label }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t\tactions={ actions }\n\t\t\t\t{ ...props }\n\t\t\t/>\n\t\t</Tooltip>\n\t);\n};\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type PropTypeKey } from '@elementor/editor-props';\nimport { Backdrop, bindPopover, Box, Infotip, Popover, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { VariableTypeProvider } from '../../../context/variable-type-context';\nimport { usePermissions } from '../../../hooks/use-permissions';\nimport { restoreVariable } from '../../../hooks/use-prop-variables';\nimport { resolveBoundPropAndSetValue } from '../../../hooks/use-variable-bound-prop';\nimport { type Variable } from '../../../types';\nimport { createUnlinkHandler } from '../../../utils/unlink-variable';\nimport { getVariableType } from '../../../variables-registry/variable-type-registry';\nimport { VariableRestore } from '../../variable-restore';\nimport { DeletedVariableAlert } from '../deleted-variable-alert';\nimport { WarningVariableTag } from '../tags/warning-variable-tag';\n\ntype Props = {\n\tvariable: Variable;\n\tpropTypeKey: PropTypeKey;\n};\n\ntype Handlers = {\n\tonUnlink?: () => void;\n\tonRestore?: () => void;\n};\n\nexport const DeletedVariable = ( { variable, propTypeKey }: Props ) => {\n\tconst { propTypeUtil } = getVariableType( propTypeKey );\n\n\tconst boundProp = useBoundProp();\n\n\tconst userPermissions = usePermissions();\n\n\tconst [ showInfotip, setShowInfotip ] = useState< boolean >( false );\n\tconst toggleInfotip = () => setShowInfotip( ( prev ) => ! prev );\n\tconst closeInfotip = () => setShowInfotip( false );\n\n\tconst deletedChipAnchorRef = useRef< HTMLDivElement >( null );\n\n\tconst popupId = useId();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: `elementor-variables-restore-${ popupId }`,\n\t} );\n\n\tconst handlers: Handlers = {};\n\n\tif ( userPermissions.canUnlink() ) {\n\t\thandlers.onUnlink = createUnlinkHandler( variable, propTypeKey, boundProp.setValue );\n\t}\n\n\tif ( userPermissions.canRestore() ) {\n\t\thandlers.onRestore = () => {\n\t\t\tif ( ! variable.key ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trestoreVariable( variable.key )\n\t\t\t\t.then( ( id ) => {\n\t\t\t\t\tresolveBoundPropAndSetValue( propTypeUtil.create( id ), boundProp );\n\n\t\t\t\t\tcloseInfotip();\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\tcloseInfotip();\n\t\t\t\t\tpopupState.setAnchorEl( deletedChipAnchorRef.current );\n\t\t\t\t\tpopupState.open();\n\t\t\t\t} );\n\t\t};\n\t}\n\n\tconst handleRestoreWithOverrides = () => {\n\t\tpopupState.close();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Box ref={ deletedChipAnchorRef }>\n\t\t\t\t{ showInfotip && <Backdrop open onClick={ closeInfotip } invisible /> }\n\t\t\t\t<Infotip\n\t\t\t\t\tcolor=\"warning\"\n\t\t\t\t\tplacement=\"right-start\"\n\t\t\t\t\topen={ showInfotip }\n\t\t\t\t\tdisableHoverListener\n\t\t\t\t\tonClose={ closeInfotip }\n\t\t\t\t\tcontent={\n\t\t\t\t\t\t<DeletedVariableAlert\n\t\t\t\t\t\t\tonClose={ closeInfotip }\n\t\t\t\t\t\t\tonUnlink={ handlers.onUnlink }\n\t\t\t\t\t\t\tonRestore={ handlers.onRestore }\n\t\t\t\t\t\t\tlabel={ variable.label }\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\tpopper: {\n\t\t\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'offset',\n\t\t\t\t\t\t\t\t\toptions: { offset: [ 0, 24 ] },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<WarningVariableTag\n\t\t\t\t\t\tlabel={ variable.label }\n\t\t\t\t\t\tonClick={ toggleInfotip }\n\t\t\t\t\t\tsuffix={ __( 'deleted', 'elementor' ) }\n\t\t\t\t\t/>\n\t\t\t\t</Infotip>\n\n\t\t\t\t<Popover\n\t\t\t\t\tdisableScrollLock\n\t\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'right' } }\n\t\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\t\tPaperProps={ {\n\t\t\t\t\t\tsx: { my: 1 },\n\t\t\t\t\t} }\n\t\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t\t>\n\t\t\t\t\t<VariableTypeProvider propTypeKey={ propTypeKey }>\n\t\t\t\t\t\t<VariableRestore\n\t\t\t\t\t\t\tvariableId={ variable.key ?? '' }\n\t\t\t\t\t\t\tonClose={ popupState.close }\n\t\t\t\t\t\t\tonSubmit={ handleRestoreWithOverrides }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</VariableTypeProvider>\n\t\t\t\t</Popover>\n\t\t\t</Box>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type KeyboardEvent, useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverBody } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { Button, CardActions, Divider, FormHelperText, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { PopoverContentRefContextProvider } from '../context/variable-selection-popover.context';\nimport { useVariableType } from '../context/variable-type-context';\nimport { restoreVariable, useVariable } from '../hooks/use-prop-variables';\nimport { useVariableBoundProp } from '../hooks/use-variable-bound-prop';\nimport { ERROR_MESSAGES, labelHint, mapServerError } from '../utils/validations';\nimport { LabelField, useLabelError } from './fields/label-field';\nimport { FormField } from './ui/form-field';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tvariableId: string;\n\tonClose: () => void;\n\tonSubmit?: () => void;\n};\n\nexport const VariableRestore = ( { variableId, onClose, onSubmit }: Props ) => {\n\tconst { icon: VariableIcon, valueField: ValueField, variableType, propTypeUtil } = useVariableType();\n\n\tconst { setVariableValue: notifyBoundPropChange } = useVariableBoundProp();\n\tconst { propType } = useBoundProp();\n\n\tconst variable = useVariable( variableId );\n\n\tif ( ! variable ) {\n\t\tthrow new Error( `Global ${ variableType } variable not found` );\n\t}\n\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\tconst [ valueFieldError, setValueFieldError ] = useState( '' );\n\tconst [ label, setLabel ] = useState( variable.label );\n\tconst [ value, setValue ] = useState( variable.value );\n\tconst [ propTypeKey, setPropTypeKey ] = useState( variable?.type ?? propTypeUtil.key );\n\n\tconst { labelFieldError, setLabelFieldError } = useLabelError( {\n\t\tvalue: variable.label,\n\t\tmessage: ERROR_MESSAGES.DUPLICATED_LABEL,\n\t} );\n\n\tconst handleRestore = () => {\n\t\tconst typeChanged = propTypeKey !== variable.type;\n\t\tconst restorePromise = typeChanged\n\t\t\t? restoreVariable( variableId, label, value, propTypeKey )\n\t\t\t: restoreVariable( variableId, label, value );\n\n\t\trestorePromise\n\t\t\t.then( () => {\n\t\t\t\tnotifyBoundPropChange( variableId );\n\t\t\t\tonSubmit?.();\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tconst mappedError = mapServerError( error );\n\t\t\t\tif ( mappedError && 'label' === mappedError.field ) {\n\t\t\t\t\tsetLabel( '' );\n\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\tmessage: mappedError.message,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetErrorMessage( ERROR_MESSAGES.UNEXPECTED_ERROR );\n\t\t\t} );\n\t};\n\n\tconst hasEmptyFields = () => {\n\t\tif ( '' === label.trim() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( 'string' === typeof value ) {\n\t\t\treturn '' === value.trim();\n\t\t}\n\n\t\treturn false === Boolean( value );\n\t};\n\n\tconst noValueChanged = () => {\n\t\treturn value === variable.value && label === variable.label;\n\t};\n\n\tconst hasErrors = () => {\n\t\treturn !! errorMessage;\n\t};\n\n\tconst isSubmitDisabled = noValueChanged() || hasEmptyFields() || hasErrors();\n\n\tconst handleKeyDown = ( event: KeyboardEvent< HTMLElement > ) => {\n\t\tif ( event.key === 'Enter' && ! isSubmitDisabled ) {\n\t\t\tevent.preventDefault();\n\t\t\thandleRestore();\n\t\t}\n\t};\n\n\treturn (\n\t\t<PopoverContentRefContextProvider>\n\t\t\t<PopoverBody height=\"auto\">\n\t\t\t\t<PopoverHeader\n\t\t\t\t\ticon={ <VariableIcon fontSize={ SIZE } /> }\n\t\t\t\t\ttitle={ __( 'Restore variable', 'elementor' ) }\n\t\t\t\t\tonClose={ onClose }\n\t\t\t\t/>\n\n\t\t\t\t<Divider />\n\n\t\t\t\t<PopoverContent p={ 2 }>\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\tlabel={ __( 'Name', 'elementor' ) }\n\t\t\t\t\t\terrorMsg={ labelFieldError?.message }\n\t\t\t\t\t\tnoticeMsg={ labelHint( label ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<LabelField\n\t\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\terror={ labelFieldError }\n\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\tsetLabel( newValue );\n\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonErrorChange={ ( errorMsg ) => {\n\t\t\t\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\t\t\t\tmessage: errorMsg,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t\t{ ValueField && (\n\t\t\t\t\t\t<FormField errorMsg={ valueFieldError } label={ __( 'Value', 'elementor' ) }>\n\t\t\t\t\t\t\t<Typography variant=\"h5\">\n\t\t\t\t\t\t\t\t<ValueField\n\t\t\t\t\t\t\t\t\tpropTypeKey={ propTypeKey }\n\t\t\t\t\t\t\t\t\tonPropTypeKeyChange={ ( key: string ) => setPropTypeKey( key ) }\n\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\t\tsetValue( newValue );\n\t\t\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t\t\t\tsetValueFieldError( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tonValidationChange={ setValueFieldError }\n\t\t\t\t\t\t\t\t\tpropType={ propType }\n\t\t\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t\t</PopoverContent>\n\n\t\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isSubmitDisabled } onClick={ handleRestore }>\n\t\t\t\t\t\t{ __( 'Restore', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</CardActions>\n\t\t\t</PopoverBody>\n\t\t</PopoverContentRefContextProvider>\n\t);\n};\n","import * as React from 'react';\nimport { Alert, AlertAction, AlertTitle, ClickAwayListener, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype DeletedVariableAlertProps = {\n\tonClose: () => void;\n\tonUnlink?: () => void;\n\tonRestore?: () => void;\n\tlabel: string;\n};\n\nexport const DeletedVariableAlert = ( { onClose, onUnlink, onRestore, label }: DeletedVariableAlertProps ) => {\n\treturn (\n\t\t<ClickAwayListener onClickAway={ onClose }>\n\t\t\t<Alert\n\t\t\t\tvariant=\"standard\"\n\t\t\t\tseverity=\"warning\"\n\t\t\t\tonClose={ onClose }\n\t\t\t\taction={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ onUnlink && (\n\t\t\t\t\t\t\t<AlertAction variant=\"contained\" onClick={ onUnlink }>\n\t\t\t\t\t\t\t\t{ __( 'Unlink', 'elementor' ) }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ onRestore && (\n\t\t\t\t\t\t\t<AlertAction variant=\"outlined\" onClick={ onRestore }>\n\t\t\t\t\t\t\t\t{ __( 'Restore', 'elementor' ) }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tsx={ { maxWidth: 300 } }\n\t\t\t>\n\t\t\t\t<AlertTitle>{ __( 'Deleted variable', 'elementor' ) }</AlertTitle>\n\t\t\t\t<Typography variant=\"body2\" color=\"textPrimary\">\n\t\t\t\t\t{ __( 'The variable', 'elementor' ) }\n\t\t\t\t\t&nbsp;&apos;\n\t\t\t\t\t<Typography variant=\"body2\" component=\"span\" sx={ { lineBreak: 'anywhere' } }>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t&apos;&nbsp;\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'has been deleted, but it is still referenced in this location. You may restore the variable or unlink it to assign a different value.',\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t</Typography>\n\t\t\t</Alert>\n\t\t</ClickAwayListener>\n\t);\n};\n","import * as React from 'react';\nimport { AlertTriangleFilledIcon } from '@elementor/icons';\nimport { Box, Chip, type ChipProps, type Theme, Tooltip, Typography } from '@elementor/ui';\n\ninterface WarningVariableTagProps extends ChipProps {\n\tlabel: string;\n\tsuffix?: string;\n}\n\nexport const WarningVariableTag = React.forwardRef< HTMLDivElement, WarningVariableTagProps >(\n\t( { label, suffix, onClick, icon, ...props }, ref ) => {\n\t\tconst displayText = suffix ? `${ label } (${ suffix })` : label;\n\n\t\treturn (\n\t\t\t<Chip\n\t\t\t\tref={ ref }\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tcolor=\"warning\"\n\t\t\t\tshape=\"rounded\"\n\t\t\t\tvariant=\"standard\"\n\t\t\t\tonClick={ onClick }\n\t\t\t\ticon={ <AlertTriangleFilledIcon /> }\n\t\t\t\tlabel={\n\t\t\t\t\t<Tooltip title={ displayText } placement=\"top\">\n\t\t\t\t\t\t<Box sx={ { display: 'inline-grid', minWidth: 0 } }>\n\t\t\t\t\t\t\t<Typography variant=\"caption\" noWrap sx={ { lineHeight: 1.34 } }>\n\t\t\t\t\t\t\t\t{ displayText }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t}\n\t\t\t\tsx={ {\n\t\t\t\t\theight: ( theme: Theme ) => theme.spacing( 3.5 ),\n\t\t\t\t\tborderRadius: ( theme: Theme ) => theme.spacing( 1 ),\n\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} }\n\t\t\t\t{ ...props }\n\t\t\t/>\n\t\t);\n\t}\n);\n\nWarningVariableTag.displayName = 'WarningVariableTag';\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { Backdrop, bindPopover, Box, Infotip, Popover, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type Variable } from '../../../types';\nimport { VariableSelectionPopover } from '../../variable-selection-popover';\nimport { MismatchVariableAlert } from '../mismatch-variable-alert';\nimport { WarningVariableTag } from '../tags/warning-variable-tag';\n\ntype Props = {\n\tvariable: Variable;\n};\n\nexport const MismatchVariable = ( { variable }: Props ) => {\n\tconst { setValue, value } = useBoundProp();\n\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\n\tconst popupId = useId();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: `elementor-variables-list-${ popupId }`,\n\t} );\n\n\tconst [ infotipVisible, setInfotipVisible ] = useState( false );\n\n\tconst toggleInfotip = () => setInfotipVisible( ( prev ) => ! prev );\n\tconst closeInfotip = () => setInfotipVisible( false );\n\n\tconst triggerSelect = () => {\n\t\tcloseInfotip();\n\n\t\tpopupState.setAnchorEl( anchorRef.current );\n\t\tpopupState.open();\n\t};\n\n\tconst clearValue = () => {\n\t\tcloseInfotip();\n\t\tsetValue( null );\n\t};\n\n\tconst showClearButton = !! value;\n\n\treturn (\n\t\t<Box ref={ anchorRef }>\n\t\t\t{ infotipVisible && <Backdrop open onClick={ closeInfotip } invisible /> }\n\t\t\t<Infotip\n\t\t\t\tcolor=\"warning\"\n\t\t\t\tplacement=\"right-start\"\n\t\t\t\topen={ infotipVisible }\n\t\t\t\tdisableHoverListener\n\t\t\t\tonClose={ closeInfotip }\n\t\t\t\tcontent={\n\t\t\t\t\t<MismatchVariableAlert\n\t\t\t\t\t\tonClose={ closeInfotip }\n\t\t\t\t\t\tonClear={ showClearButton ? clearValue : undefined }\n\t\t\t\t\t\ttriggerSelect={ triggerSelect }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpopper: {\n\t\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'offset',\n\t\t\t\t\t\t\t\toptions: { offset: [ 0, 24 ] },\n\t\t\t\t\t\t\t},\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\t\t<WarningVariableTag\n\t\t\t\t\tlabel={ variable.label }\n\t\t\t\t\tonClick={ toggleInfotip }\n\t\t\t\t\tsuffix={ __( 'changed', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Infotip>\n\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorEl={ anchorRef.current }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'right' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\tsx: { my: 1 },\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t>\n\t\t\t\t<VariableSelectionPopover\n\t\t\t\t\tselectedVariable={ variable }\n\t\t\t\t\tclosePopover={ popupState.close }\n\t\t\t\t\tpropTypeKey={ variable.type }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</Box>\n\t);\n};\n","import * as React from 'react';\nimport { Alert, AlertAction, AlertTitle, ClickAwayListener, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype AlertProps = {\n\tonClose: () => void;\n\tonClear?: () => void;\n\ttriggerSelect?: () => void;\n};\n\nconst i18n = {\n\ttitle: __( 'Variable has changed', 'elementor' ),\n\tmessage: __(\n\t\t`This variable is no longer compatible with this property. You can clear it or select a different one.`,\n\t\t'elementor'\n\t),\n\tbuttons: {\n\t\tclear: __( 'Clear', 'elementor' ),\n\t\tselect: __( 'Select variable', 'elementor' ),\n\t},\n};\n\nexport const MismatchVariableAlert = ( { onClose, onClear, triggerSelect }: AlertProps ) => {\n\treturn (\n\t\t<ClickAwayListener onClickAway={ onClose }>\n\t\t\t<Alert\n\t\t\t\tvariant=\"standard\"\n\t\t\t\tseverity=\"warning\"\n\t\t\t\tonClose={ onClose }\n\t\t\t\taction={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ onClear && (\n\t\t\t\t\t\t\t<AlertAction variant=\"contained\" onClick={ onClear }>\n\t\t\t\t\t\t\t\t{ i18n.buttons.clear }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ triggerSelect && (\n\t\t\t\t\t\t\t<AlertAction variant=\"outlined\" onClick={ triggerSelect }>\n\t\t\t\t\t\t\t\t{ i18n.buttons.select }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tsx={ { maxWidth: 300 } }\n\t\t\t>\n\t\t\t\t<AlertTitle>{ i18n.title }</AlertTitle>\n\t\t\t\t<Typography variant=\"body2\" color=\"textPrimary\">\n\t\t\t\t\t{ i18n.message }\n\t\t\t\t</Typography>\n\t\t\t</Alert>\n\t\t</ClickAwayListener>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { Backdrop, Infotip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { MissingVariableAlert } from '../missing-variable-alert';\nimport { WarningVariableTag } from '../tags/warning-variable-tag';\n\nexport const MissingVariable = () => {\n\tconst { setValue } = useBoundProp();\n\n\tconst [ infotipVisible, setInfotipVisible ] = useState< boolean >( false );\n\tconst toggleInfotip = () => setInfotipVisible( ( prev ) => ! prev );\n\tconst closeInfotip = () => setInfotipVisible( false );\n\n\tconst clearValue = () => setValue( null );\n\n\treturn (\n\t\t<>\n\t\t\t{ infotipVisible && <Backdrop open onClick={ closeInfotip } invisible /> }\n\t\t\t<Infotip\n\t\t\t\tcolor=\"warning\"\n\t\t\t\tplacement=\"right-start\"\n\t\t\t\topen={ infotipVisible }\n\t\t\t\tdisableHoverListener\n\t\t\t\tonClose={ closeInfotip }\n\t\t\t\tcontent={ <MissingVariableAlert onClose={ closeInfotip } onClear={ clearValue } /> }\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpopper: {\n\t\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'offset',\n\t\t\t\t\t\t\t\toptions: { offset: [ 0, 24 ] },\n\t\t\t\t\t\t\t},\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\t\t<WarningVariableTag label={ __( 'Missing variable', 'elementor' ) } onClick={ toggleInfotip } />\n\t\t\t</Infotip>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { Alert, AlertAction, AlertTitle, ClickAwayListener, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype MissingVariableAlertProps = {\n\tonClose: () => void;\n\tonClear?: () => void;\n};\n\nexport const MissingVariableAlert = ( { onClose, onClear }: MissingVariableAlertProps ) => {\n\treturn (\n\t\t<ClickAwayListener onClickAway={ onClose }>\n\t\t\t<Alert\n\t\t\t\tvariant=\"standard\"\n\t\t\t\tseverity=\"warning\"\n\t\t\t\tonClose={ onClose }\n\t\t\t\taction={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ onClear && (\n\t\t\t\t\t\t\t<AlertAction variant=\"contained\" onClick={ onClear }>\n\t\t\t\t\t\t\t\t{ __( 'Clear', 'elementor' ) }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tsx={ { maxWidth: 300 } }\n\t\t\t>\n\t\t\t\t<AlertTitle>{ __( 'This variable is missing', 'elementor' ) }</AlertTitle>\n\t\t\t\t<Typography variant=\"body2\" color=\"textPrimary\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'It may have been deleted. Try clearing this field and select a different value or variable.',\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t</Typography>\n\t\t\t</Alert>\n\t\t</ClickAwayListener>\n\t);\n};\n","import * as React from 'react';\nimport { type PopoverActionProps, useBoundProp } from '@elementor/editor-editing-panel';\nimport { type PropType } from '@elementor/editor-props';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { VariableSelectionPopover } from '../components/variable-selection-popover';\nimport { trackVariableEvent } from '../utils/tracking';\nimport { getVariableType } from '../variables-registry/variable-type-registry';\n\nexport const usePropVariableAction = (): PopoverActionProps => {\n\tconst { propType, path } = useBoundProp();\n\tconst variable = resolveVariableFromPropType( propType );\n\n\treturn {\n\t\tvisible: Boolean( variable ),\n\t\ticon: ColorFilterIcon,\n\t\ttitle: __( 'Variables', 'elementor' ),\n\t\tcontent: ( { close: closePopover } ) => {\n\t\t\tif ( ! variable ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttrackOpenVariablePopover( path, variable.variableType );\n\n\t\t\treturn <VariableSelectionPopover closePopover={ closePopover } propTypeKey={ variable.propTypeUtil.key } />;\n\t\t},\n\t};\n};\n\nconst resolveVariableFromPropType = ( propType: PropType ) => {\n\tif ( propType.kind !== 'union' ) {\n\t\treturn undefined;\n\t}\n\n\tfor ( const key of Object.keys( propType.prop_types ) ) {\n\t\tconst variable = getVariableType( key );\n\n\t\tif ( variable ) {\n\t\t\treturn variable;\n\t\t}\n\t}\n\n\treturn undefined;\n};\n\nconst trackOpenVariablePopover = ( path: string[], variableType: string ) => {\n\ttrackVariableEvent( {\n\t\tvarType: variableType,\n\t\tcontrolPath: path.join( '.' ),\n\t\taction: 'open',\n\t} );\n};\n","import { getMCPByDomain } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nimport { service } from '../service';\n\nconst InputSchema = {\n\ttype: z\n\t\t.string()\n\t\t.describe( 'The type of the variable. Example values: \"global-color-variable\" or \"global-font-variable\".' ),\n\tlabel: z.string().describe( 'The label of the variable, displayed to the user' ),\n\tvalue: z.string().describe( 'The value of the variable, should correspond to the type' ),\n};\n\nconst OutputSchema = {\n\tstatus: z.enum( [ 'ok', 'error' ] ).describe( 'The status of the operation' ),\n\tmessage: z.string().optional().describe( 'Optional message providing additional information about the operation' ),\n};\n\nexport const initCreateVariableTool = () => {\n\tgetMCPByDomain( 'canvas' ).addTool( {\n\t\tname: 'create-global-variable',\n\t\tschema: InputSchema,\n\t\toutputSchema: OutputSchema,\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.7,\n\t\t\tspeedPriority: 0.7,\n\t\t},\n\t\tdescription: `Create a new global variable\n## When to use this tool:\n- When a user requests to create a new global variable in the Elementor editor.\n- When you need to add a new variable to be used in the editor.\n\n## Prequisites:\n- Ensure you have the most up-to-date list of existing global variables to avoid label duplication. You can use the \"list-global-variables\" tool to fetch the current variables.\n- Make sure when creating a new variable, the label is unique and not already in use.\n- If the user does not provide a label, ask them to provide one before proceeding.\n- If the user does not provide a type, ask them to provide one before proceeding.\n- If the user does not provide a value, ask them to provide one before proceeding.\n\n## Required parameters:\n- type: The type of the variable. Possible values are 'global-color-variable' or 'global-font-variable'.\n- label: The label of the variable, displayed to the user. Must be unique and not already in use.\n- value: The value of the variable. For color variables, this should be a valid CSS color (e.g., 'rgb(255,0,0)', '#ff0000', 'red'). For font variables, this should be a valid font family (e.g., 'Arial', 'serif').\n\n## Example tool call (JSON format):\n\\`\\`\\`json\n{ \"type\": \"global-color-variable\", \"label\": \"My Cool Color\", \"value\": \"rgb(1,2,3)\" }\n\\`\\`\\`\n\n## Example tool response (JSON format):\n\\`\\`\\`json\n{ \"status\": \"ok\" }\n\\`\\`\\`\n\n## Example to a failed tool response, which must be displayed to the end user. If the error message is not plain, attempt to find the most useful part of the message and display it.\n{ \"status\": \"error\", \"message\": \"Unsupported type 'global-kuku-variable'\" }\n\nIn that case, inform the user the type is unsupported and they should try another type, perhaps consult to online documentation.\n`,\n\t\thandler: async ( params ) => {\n\t\t\tconst { type, label, value } = params;\n\t\t\ttry {\n\t\t\t\tawait service.create( { type, label, value } );\n\t\t\t} catch ( error ) {\n\t\t\t\tconst message: string = ( error as Error ).message || 'Unknown server error';\n\t\t\t\treturn {\n\t\t\t\t\tstatus: 'error',\n\t\t\t\t\tmessage: `There was an error creating the variable: ${ message }`,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn { status: 'ok' };\n\t\t},\n\t} );\n};\n","import { getMCPByDomain } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nimport { service } from '../service';\n\nexport const initDeleteVariableTool = () => {\n\tgetMCPByDomain( 'canvas' ).addTool( {\n\t\tname: 'delete-global-variable',\n\t\tschema: {\n\t\t\tid: z.string().describe( 'The unique identifier of the variable to be deleted.' ),\n\t\t},\n\t\toutputSchema: {\n\t\t\tstatus: z.enum( [ 'ok', 'error' ] ).describe( 'The status of the operation' ),\n\t\t},\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.7,\n\t\t\tspeedPriority: 0.8,\n\t\t},\n\t\tdescription: `Delete an existing global variable\n \n## When to use this tool:\n- When a user requests to delete an existing global variable in the Elementor editor.\n- When you need to remove a variable that is no longer needed or relevant, with the user's confirmation.\n\n## Prerequisites:\n- Ensure you have the most up-to-date list of existing global variables. You can use the \"list-global-variables\" tool to fetch the current variables.\n- Reference the variable by the \"id\" property, given from the \"list-global-variables\" tool.\n- Make sure you have the unique identifier of the variable to be deleted before using this tool.\n- Confirm with the user that they want to proceed with the deletion, as this action is irreversible.\n\n<notice>\nA use might reference a variable by it's label, but you must always use the unique identifier (id) to delete it.\nIf you only have the label, use the \"list-global-variables\" tool to find the corresponding id.\n</notice>\n\n<important>\nThis operation is destructive and cannot be undone. Ensure that the user is fully aware of the consequences before proceeding.\nWhen a variable is deleted, all references to it in all pages accross the website will lose their effect.\n</important>`,\n\t\thandler: async ( params ) => {\n\t\t\tconst { id } = params;\n\t\t\ttry {\n\t\t\t\tawait service.delete( id );\n\t\t\t\treturn { status: 'ok' };\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\t\t} catch ( err: unknown ) {\n\t\t\t\treturn {\n\t\t\t\t\tstatus: 'error',\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\tisDestrcutive: true,\n\t} );\n};\n","import { getMCPByDomain } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nimport { service } from '../service';\n\nexport const initUpdateVariableTool = () => {\n\tgetMCPByDomain( 'canvas' ).addTool( {\n\t\tschema: {\n\t\t\tid: z.string().describe( 'The unique identifier of the variable to be updated or renamed.' ),\n\t\t\tlabel: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\n\t\t\t\t\t'The label of the variable to be stored after the change. If the user only wishes to update the value, this must be strictly equal to the current label.'\n\t\t\t\t),\n\t\t\tvalue: z\n\t\t\t\t.string()\n\t\t\t\t.describe(\n\t\t\t\t\t\"The new value for the variable. For color variables, this should be a valid CSS color (e.g., 'rgb(255,0,0)', '#ff0000', 'red'). For font variables, this should be a valid font family (e.g., 'Arial', 'serif'). If the user wishes to rename only, make sure you provide the existing value.\"\n\t\t\t\t),\n\t\t},\n\t\toutputSchema: {\n\t\t\tstatus: z.enum( [ 'ok', 'error' ] ).describe( 'The status of the operation' ),\n\t\t\tmessage: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe( 'Optional message providing additional information about the operation' ),\n\t\t},\n\t\tname: 'update-global-variable',\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.75,\n\t\t\tspeedPriority: 0.7,\n\t\t},\n\t\tdescription: `Update an existing global variable\n\n## When to use this tool:\n- When a user requests to update an existing global variable in the Elementor editor.\n- When you need to modify the value of an existing variable.\n- When you want to rename an existing variable (change its label).\n- When you want to both rename and modify the value of an existing variable.\n\n## Prerequisites:\n- Ensure you have the most up-to-date list of existing global variables to avoid label duplication. You can use the \"list-global-variables\" tool to fetch the current variables.\n- Make sure when updating a variable, the new label is unique and not already in use by another variable.\n- Make sure you understand whether you are updating a value, renaming, or both.\n- Reference the variable by the \"id\" property, given from the \"list-global-variables\" tool.\n- If the user wishes to rename, make sure you have the existing value.\n- If the user wishes to update the value, make sure you have to **correct label**.\n- You must have the unique identifier, the current label, the current value, and the new value or label or both, before using this tool.\n\n## Required parameters:\n- id: The unique identifier of the variable to be updated or renamed.\n- label: The label of the variable to be stored after the change. If the user only wishes to update the value, this must be strictly equal to the current label.\n- value: The new value for the variable. For color variables, this should be a valid CSS color (e.g., 'rgb(255,0,0)', '#ff0000', 'red'). For font variables, this should be a valid font family (e.g., 'Arial', 'serif'). If the user wishes to rename only, make sure you provide the existing value.\n\n## Example tool call (JSON format):\n\\`\\`\\`json\n{ \"id\": \"some-unique-id\", \"label\": \"Cool\", \"value\": \"rgb(0,140,250)\" }\n\\`\\`\\`\n\n## Example responses (JSON format):\nSuccessful update:\n\\`\\`\\`json\n{ \"status\": \"ok\" }\n\\`\\`\\`\n\nFailed update, which must be displayed to the end user. If the error message is not plain, attempt to find the most useful part of the message and display it.\n\\`\\`\\`json\n{ \"status\": \"error\", \"message\": \"Label 'Cool' is already in use by another variable.\" }\n\\`\\`\\`\n`,\n\t\thandler: async ( params ) => {\n\t\t\tconst { id, label, value } = params;\n\t\t\ttry {\n\t\t\t\tawait service.update( id, { label, value } );\n\t\t\t\treturn { status: 'ok' };\n\t\t\t} catch ( error ) {\n\t\t\t\tconst message: string = ( error as Error ).message || 'Unknown server error';\n\t\t\t\treturn {\n\t\t\t\t\tstatus: 'error',\n\t\t\t\t\tmessage: `There was an error creating the variable: ${ message }`,\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t} );\n};\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { service } from '../service';\nimport { type TVariable } from '../storage';\n\nexport const GLOBAL_VARIABLES_URI = 'elementor://global-variables';\n\nexport const initVariablesResource = () => {\n\tconst { mcpServer } = getMCPByDomain( 'canvas' );\n\n\tmcpServer.resource(\n\t\t'global-variables',\n\t\tGLOBAL_VARIABLES_URI,\n\t\t{\n\t\t\tdescription:\n\t\t\t\t'List of Global variables. Defined as a key-value store (ID as key, global-variable object as value)',\n\t\t},\n\t\tasync () => {\n\t\t\tconst variables: Record< string, TVariable > = {};\n\t\t\tObject.entries( service.variables() ).forEach( ( [ id, variable ] ) => {\n\t\t\t\tif ( ! variable.deleted ) {\n\t\t\t\t\tvariables[ id ] = variable;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn {\n\t\t\t\tcontents: [ { uri: GLOBAL_VARIABLES_URI, text: JSON.stringify( variables ) } ],\n\t\t\t};\n\t\t}\n\t);\n\n\twindow.addEventListener( 'variables:updated', () => {\n\t\tmcpServer.server.sendResourceUpdated( {\n\t\t\turi: GLOBAL_VARIABLES_URI,\n\t\t\tcontents: [ { uri: GLOBAL_VARIABLES_URI, text: localStorage[ 'elementor-global-variables' ] } ],\n\t\t} );\n\t} );\n};\n","import { initCreateVariableTool } from './create-variable-tool';\nimport { initDeleteVariableTool } from './delete-variable-tool';\nimport { initUpdateVariableTool } from './update-variable-tool';\nimport { initVariablesResource } from './variables-resource';\n\nexport function initMcp() {\n\tinitCreateVariableTool();\n\tinitUpdateVariableTool();\n\tinitDeleteVariableTool();\n\tinitVariablesResource();\n}\n","import * as React from 'react';\nimport { colorPropTypeUtil, sizePropTypeUtil, stringPropTypeUtil } from '@elementor/editor-props';\nimport { CtaButton } from '@elementor/editor-ui';\nimport { BrushIcon, ExpandDiagonalIcon, TextIcon } from '@elementor/icons';\n\nimport { ColorField } from './components/fields/color-field';\nimport { FontField } from './components/fields/font-field';\nimport { ColorIndicator } from './components/ui/color-indicator';\nimport { colorVariablePropTypeUtil } from './prop-types/color-variable-prop-type';\nimport { fontVariablePropTypeUtil } from './prop-types/font-variable-prop-type';\nimport { sizeVariablePropTypeUtil } from './prop-types/size-variable-prop-type';\nimport { EmptyTransformer } from './transformers/empty-transformer';\nimport { registerVariableType } from './variables-registry/variable-type-registry';\n\nexport function registerVariableTypes() {\n\tregisterVariableType( {\n\t\tkey: colorVariablePropTypeUtil.key,\n\t\tvalueField: ColorField,\n\t\ticon: BrushIcon,\n\t\tpropTypeUtil: colorVariablePropTypeUtil,\n\t\tfallbackPropTypeUtil: colorPropTypeUtil,\n\t\tvariableType: 'color',\n\t\tstartIcon: ( { value } ) => <ColorIndicator size=\"inherit\" component=\"span\" value={ value } />,\n\t\tdefaultValue: '#ffffff',\n\t} );\n\n\tregisterVariableType( {\n\t\tkey: fontVariablePropTypeUtil.key,\n\t\tvalueField: FontField,\n\t\ticon: TextIcon,\n\t\tpropTypeUtil: fontVariablePropTypeUtil,\n\t\tfallbackPropTypeUtil: stringPropTypeUtil,\n\t\tvariableType: 'font',\n\t\tdefaultValue: 'Roboto',\n\t} );\n\n\tconst sizePromotions = {\n\t\ticon: ExpandDiagonalIcon,\n\t\tpropTypeUtil: sizeVariablePropTypeUtil,\n\t\tfallbackPropTypeUtil: sizePropTypeUtil,\n\t\tstyleTransformer: EmptyTransformer,\n\t\tvariableType: 'size',\n\t\tselectionFilter: () => [],\n\t\temptyState: <CtaButton size=\"small\" href={ 'https://go.elementor.com/go-pro-panel-size-variable/' } />,\n\t};\n\n\tregisterVariableType( {\n\t\t...sizePromotions,\n\t\tkey: sizeVariablePropTypeUtil.key,\n\t\tdefaultValue: '0px',\n\t} );\n\n\tregisterVariableType( {\n\t\t...sizePromotions,\n\t\tkey: 'global-custom-size-variable',\n\t} );\n}\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { UnstableColorField } from '@elementor/ui';\n\nimport { usePopoverContentRef } from '../../context/variable-selection-popover.context';\nimport { validateValue } from '../../utils/validations';\n\ntype ColorFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n\tonValidationChange?: ( errorMessage: string ) => void;\n};\n\nexport const ColorField = ( { value, onChange, onValidationChange }: ColorFieldProps ) => {\n\tconst [ color, setColor ] = useState( value );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\n\tconst defaultRef = useRef< HTMLDivElement >( null );\n\tconst anchorRef = usePopoverContentRef() ?? defaultRef.current;\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetColor( newValue );\n\n\t\tconst errorMsg = validateValue( newValue );\n\t\tsetErrorMessage( errorMsg );\n\t\tonValidationChange?.( errorMsg );\n\n\t\tonChange( errorMsg ? '' : newValue );\n\t};\n\n\treturn (\n\t\t<UnstableColorField\n\t\t\tid=\"color-variable-field\"\n\t\t\tsize=\"tiny\"\n\t\t\tfullWidth\n\t\t\tvalue={ color }\n\t\t\tonChange={ handleChange }\n\t\t\terror={ errorMessage || undefined }\n\t\t\tslotProps={ {\n\t\t\t\tcolorPicker: {\n\t\t\t\t\tanchorEl: anchorRef,\n\t\t\t\t\tanchorOrigin: { vertical: 'top', horizontal: 'right' },\n\t\t\t\t\ttransformOrigin: { vertical: 'top', horizontal: -10 },\n\t\t\t\t\tslotProps: {\n\t\t\t\t\t\tcolorIndicator: {\n\t\t\t\t\t\t\tsize: 'inherit',\n\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\tborderRadius: 0.5,\n\t\t\t\t\t\t\t},\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 * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { enqueueFont, ItemSelector } from '@elementor/editor-controls';\nimport { useFontFamilies, useSectionWidth } from '@elementor/editor-editing-panel';\nimport { ChevronDownIcon, TextIcon } from '@elementor/icons';\nimport { bindPopover, bindTrigger, Popover, UnstableTag, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { usePopoverContentRef } from '../../context/variable-selection-popover.context';\nimport { validateValue } from '../../utils/validations';\n\ntype FontFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n\tonValidationChange?: ( errorMessage: string ) => void;\n};\n\nexport const FontField = ( { value, onChange, onValidationChange }: FontFieldProps ) => {\n\tconst [ fontFamily, setFontFamily ] = useState( value );\n\n\tconst defaultRef = useRef< HTMLDivElement >( null );\n\tconst anchorRef = usePopoverContentRef() ?? defaultRef.current;\n\n\tconst fontPopoverState = usePopupState( { variant: 'popover' } );\n\n\tconst fontFamilies = useFontFamilies();\n\tconst sectionWidth = useSectionWidth();\n\n\tconst mapFontSubs = React.useMemo( () => {\n\t\treturn fontFamilies.map( ( { label, fonts } ) => ( {\n\t\t\tlabel,\n\t\t\titems: fonts,\n\t\t} ) );\n\t}, [ fontFamilies ] );\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetFontFamily( newValue );\n\n\t\tconst errorMsg = validateValue( newValue );\n\t\tonValidationChange?.( errorMsg );\n\n\t\tonChange( errorMsg ? '' : newValue );\n\t};\n\n\tconst handleFontFamilyChange = ( newFontFamily: string ) => {\n\t\thandleChange( newFontFamily );\n\t\tfontPopoverState.close();\n\t};\n\n\tconst id = useId();\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tid={ id }\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\tlabel={ fontFamily }\n\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t{ ...bindTrigger( fontPopoverState ) }\n\t\t\t\tfullWidth\n\t\t\t/>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorEl={ anchorRef }\n\t\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: -28 } }\n\t\t\t\t{ ...bindPopover( fontPopoverState ) }\n\t\t\t>\n\t\t\t\t<ItemSelector\n\t\t\t\t\tid=\"font-family-variables-selector\"\n\t\t\t\t\titemsList={ mapFontSubs }\n\t\t\t\t\tselectedItem={ fontFamily }\n\t\t\t\t\tonItemChange={ handleFontFamilyChange }\n\t\t\t\t\tonClose={ fontPopoverState.close }\n\t\t\t\t\tsectionWidth={ sectionWidth }\n\t\t\t\t\ttitle={ __( 'Font family', 'elementor' ) }\n\t\t\t\t\titemStyle={ ( item ) => ( { fontFamily: item.value } ) }\n\t\t\t\t\tonDebounce={ enqueueFont }\n\t\t\t\t\ticon={ TextIcon as React.ElementType< { fontSize: string } > }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const sizeVariablePropTypeUtil = createPropUtils( 'global-size-variable', z.string() );\n","import { createTransformer } from '@elementor/editor-canvas';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const EmptyTransformer = createTransformer( ( _value: string ) => {\n\treturn null;\n} );\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport {\n\t__privateUseListenTo as useListenTo,\n\tcommandEndEvent,\n\tgetCanvasIframeDocument,\n} from '@elementor/editor-v1-adapters';\nimport { Portal } from '@elementor/ui';\n\nimport { styleVariablesRepository } from '../style-variables-repository';\nimport { type StyleVariables, type Variable } from '../types';\n\nconst VARIABLES_WRAPPER = 'body';\n\nexport function StyleVariablesRenderer() {\n\tconst container = usePortalContainer();\n\tconst styleVariables = useStyleVariables();\n\n\tconst hasVariables = Object.keys( styleVariables ).length > 0;\n\n\tif ( ! container || ! hasVariables ) {\n\t\treturn null;\n\t}\n\n\tconst cssVariables = convertToCssVariables( styleVariables );\n\tconst wrappedCss = `${ VARIABLES_WRAPPER }{${ cssVariables }}`;\n\n\treturn (\n\t\t<Portal container={ container }>\n\t\t\t<style data-e-style-id=\"e-variables\" key={ wrappedCss }>\n\t\t\t\t{ wrappedCss }\n\t\t\t</style>\n\t\t</Portal>\n\t);\n}\n\nfunction usePortalContainer() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument()?.head );\n}\n\nfunction useStyleVariables() {\n\tconst [ variables, setVariables ] = useState< StyleVariables >( {} );\n\n\tuseEffect( () => {\n\t\tconst unsubscribe = styleVariablesRepository.subscribe( setVariables );\n\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t};\n\t}, [] );\n\n\treturn variables;\n}\n\nfunction cssVariableDeclaration( key: string, variable: Variable ) {\n\tconst variableName = variable?.deleted ? key : variable.label;\n\tconst value = variable.value;\n\n\treturn `--${ variableName }:${ value };`;\n}\n\nfunction convertToCssVariables( variables: StyleVariables ): string {\n\tconst listOfVariables = Object.entries( variables );\n\treturn listOfVariables.map( ( [ key, variable ] ) => cssVariableDeclaration( key, variable ) ).join( '' );\n}\n","import { injectIntoRepeaterItemIcon, injectIntoRepeaterItemLabel } from '@elementor/editor-controls';\nimport { backgroundColorOverlayPropTypeUtil, type PropValue, shadowPropTypeUtil } from '@elementor/editor-props';\n\nimport {\n\tBackgroundRepeaterColorIndicator,\n\tBackgroundRepeaterLabel,\n\tBoxShadowRepeaterColorIndicator,\n} from './components/variables-repeater-item-slot';\nimport { colorVariablePropTypeUtil } from './prop-types/color-variable-prop-type';\n\nexport function registerRepeaterInjections() {\n\tinjectIntoRepeaterItemIcon( {\n\t\tid: 'color-variables-background-icon',\n\t\tcomponent: BackgroundRepeaterColorIndicator,\n\t\tcondition: ( { value: prop }: { value: PropValue } ) => {\n\t\t\treturn hasAssignedColorVariable( backgroundColorOverlayPropTypeUtil.extract( prop )?.color );\n\t\t},\n\t} );\n\n\tinjectIntoRepeaterItemIcon( {\n\t\tid: 'color-variables-icon',\n\t\tcomponent: BoxShadowRepeaterColorIndicator,\n\t\tcondition: ( { value: prop }: { value: PropValue } ) => {\n\t\t\treturn hasAssignedColorVariable( shadowPropTypeUtil.extract( prop )?.color );\n\t\t},\n\t} );\n\n\tinjectIntoRepeaterItemLabel( {\n\t\tid: 'color-variables-label',\n\t\tcomponent: BackgroundRepeaterLabel,\n\t\tcondition: ( { value: prop }: { value: PropValue } ) => {\n\t\t\treturn hasAssignedColorVariable( backgroundColorOverlayPropTypeUtil.extract( prop )?.color );\n\t\t},\n\t} );\n}\n\nconst hasAssignedColorVariable = ( propValue: PropValue ): boolean => {\n\treturn !! colorVariablePropTypeUtil.isValid( propValue );\n};\n","import * as React from 'react';\nimport { type BackgroundColorOverlayPropValue, type BoxShadowPropValue, type PropValue } from '@elementor/editor-props';\n\nimport { useVariable } from '../hooks/use-prop-variables';\nimport { ColorIndicator } from './ui/color-indicator';\n\nconst useColorVariable = ( value: BackgroundColorOverlayPropValue | BoxShadowPropValue ) => {\n\tconst variableId = value?.value?.color?.value;\n\n\treturn useVariable( variableId || '' );\n};\n\nexport const BackgroundRepeaterColorIndicator = ( { value }: { value: PropValue } ) => {\n\tconst colorVariable = useColorVariable( value as BackgroundColorOverlayPropValue );\n\n\treturn <ColorIndicator component=\"span\" size=\"inherit\" value={ colorVariable?.value } />;\n};\n\nexport const BackgroundRepeaterLabel = ( { value }: { value: PropValue } ) => {\n\tconst colorVariable = useColorVariable( value as BackgroundColorOverlayPropValue );\n\n\treturn <span>{ colorVariable?.label }</span>;\n};\n\nexport const BoxShadowRepeaterColorIndicator = ( { value }: { value: PropValue } ) => {\n\tconst colorVariable = useColorVariable( value as BoxShadowPropValue );\n\n\treturn <ColorIndicator component=\"span\" size=\"inherit\" value={ colorVariable?.value } />;\n};\n","import { service } from '../service';\n\nexport const globalVariablesLLMResolvers = {\n\t'global-color-variable': ( value: unknown ) => {\n\t\tconst idOrLabel = String( value );\n\t\treturn {\n\t\t\t$$type: 'global-color-variable',\n\t\t\tvalue: service.variables()[ idOrLabel ] ? idOrLabel : service.findIdByLabel( idOrLabel ),\n\t\t};\n\t},\n\t'global-font-variable': ( value: unknown ) => {\n\t\tconst idOrLabel = String( value );\n\t\treturn {\n\t\t\t$$type: 'global-font-variable',\n\t\t\tvalue: service.variables()[ idOrLabel ] ? idOrLabel : service.findIdByLabel( idOrLabel ),\n\t\t};\n\t},\n\t'global-size-variable': ( value: unknown ) => {\n\t\tconst idOrLabel = String( value );\n\t\treturn {\n\t\t\t$$type: 'global-size-variable',\n\t\t\tvalue: service.variables()[ idOrLabel ] ? idOrLabel : service.findIdByLabel( idOrLabel ),\n\t\t};\n\t},\n};\n"],"mappings":"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","names":["import_editor_editing_panel","import_editor_panels","import_editor_props","React","import_react","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_canvas","import_ui","import_i18n","import_i18n","id","id","id","import_editor_props","import_schema","id","id","id","import_editor_canvas","id","registerVariableType","getVariableType","getVariableTypes","hasVariableType","React","import_ui","import_i18n","React","import_ui","import_i18n","React","import_ui","import_i18n","import_react","import_react","import_react","React","import_react","id","createVariable","React","import_react","import_editor_ui","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_ui","id","errorMsg","React","import_react","import_icons","import_ui","React","import_ui","React","import_react","import_ui","id","createPanel","createVariable","React","import_editor_controls","import_react","React","import_editor_controls","import_icons","import_ui","React","import_react","import_editor_v1_adapters","React","import_react","import_ui","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_controls","import_editor_controls","import_editor_props","React","import_ui","id","SIZE","React","import_react","import_editor_controls","import_editor_current_user","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","React","import_react","import_icons","import_ui","import_i18n","SIZE","React","import_react","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","import_ui","SIZE","React","import_icons","import_ui","import_i18n","SIZE","Tag","SIZE","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_ui","import_i18n","SIZE","React","import_ui","import_i18n","React","import_icons","import_ui","id","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_ui","import_i18n","React","import_editor_editing_panel","import_icons","import_i18n","import_schema","import_editor_mcp","import_schema","id","import_editor_mcp","import_schema","id","import_editor_mcp","id","React","import_editor_props","import_editor_ui","import_icons","React","import_react","import_ui","React","import_react","import_editor_controls","import_editor_editing_panel","import_icons","import_ui","import_i18n","id","import_editor_props","import_schema","import_editor_canvas","React","import_react","import_editor_v1_adapters","import_ui","useListenTo","import_editor_controls","import_editor_props","React","registerPanel"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/init.ts","../src/components/variables-manager/variables-manager-panel.tsx","../src/utils/tracking.ts","../src/utils/validations.ts","../src/variables-registry/create-variable-type-registry.ts","../src/transformers/inheritance-transformer.tsx","../src/components/ui/color-indicator.tsx","../src/prop-types/color-variable-prop-type.ts","../src/service.ts","../src/api.ts","../src/batch-operations.ts","../src/storage.ts","../src/prop-types/font-variable-prop-type.ts","../src/sync/enqueue-font.ts","../src/create-style-variables-repository.ts","../src/style-variables-repository.ts","../src/transformers/utils/resolve-css-variable.ts","../src/transformers/variable-transformer.ts","../src/variables-registry/variable-type-registry.ts","../src/components/ui/delete-confirmation-dialog.tsx","../src/components/ui/empty-state.tsx","../src/hooks/use-permissions.ts","../src/components/ui/no-search-results.tsx","../src/components/variables-manager/hooks/use-auto-edit.ts","../src/components/variables-manager/hooks/use-error-navigation.ts","../src/components/variables-manager/hooks/use-variables-manager-state.ts","../src/hooks/use-prop-variables.ts","../src/context/variable-type-context.tsx","../src/utils/filter-by-search.ts","../src/utils/variables-to-list.ts","../src/components/variables-manager/variables-manager-create-menu.tsx","../src/sync/license-info.ts","../src/hooks/use-quota-permissions.ts","../src/components/variables-manager/variables-manager-table.tsx","../src/components/fields/label-field.tsx","../src/components/variables-manager/ui/variable-edit-menu.tsx","../src/components/variables-manager/ui/variable-table-cell.tsx","../src/components/variables-manager/variable-editable-cell.tsx","../src/controls/variable-control.tsx","../src/components/ui/variable/assigned-variable.tsx","../src/utils/unlink-variable.ts","../src/components/variable-selection-popover.tsx","../src/context/variable-selection-popover.context.tsx","../src/components/variable-creation.tsx","../src/hooks/use-initial-value.ts","../src/hooks/use-variable-bound-prop.ts","../src/components/ui/form-field.tsx","../src/components/variable-edit.tsx","../src/components/ui/edit-confirmation-dialog.tsx","../src/components/variables-selection.tsx","../src/components/ui/menu-item-content.tsx","../src/components/ui/styled-menu-list.tsx","../src/components/ui/tags/assigned-tag.tsx","../src/components/ui/variable/deleted-variable.tsx","../src/components/variable-restore.tsx","../src/components/ui/deleted-variable-alert.tsx","../src/components/ui/tags/warning-variable-tag.tsx","../src/components/ui/variable/mismatch-variable.tsx","../src/components/ui/mismatch-variable-alert.tsx","../src/components/ui/variable/missing-variable.tsx","../src/components/ui/missing-variable-alert.tsx","../src/hooks/use-prop-variable-action.tsx","../src/mcp/manage-variable-tool.ts","../src/mcp/variables-resource.ts","../src/mcp/index.ts","../src/register-variable-types.tsx","../src/components/fields/color-field.tsx","../src/components/fields/font-field.tsx","../src/prop-types/size-variable-prop-type.ts","../src/transformers/empty-transformer.tsx","../src/renderers/style-variables-renderer.tsx","../src/repeater-injections.ts","../src/components/variables-repeater-item-slot.tsx","../src/utils/llm-propvalue-label-resolver.ts"],"sourcesContent":["export { init } from './init';\nexport { GLOBAL_VARIABLES_URI } from './mcp/variables-resource';\nexport { sizeVariablePropTypeUtil } from './prop-types/size-variable-prop-type';\nexport { registerVariableTypes } from './register-variable-types';\nexport { service } from './service';\nexport { registerVariableType } from './variables-registry/variable-type-registry';\n\nimport { globalVariablesLLMResolvers } from './utils/llm-propvalue-label-resolver';\n\nexport const Utils = {\n\tglobalVariablesLLMResolvers,\n} as const;\n","import { injectIntoTop } from '@elementor/editor';\nimport { controlActionsMenu, registerControlReplacement } from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { isTransformable, type PropValue } from '@elementor/editor-props';\n\nimport { panel } from './components/variables-manager/variables-manager-panel';\nimport { VariableControl } from './controls/variable-control';\nimport { usePropVariableAction } from './hooks/use-prop-variable-action';\nimport { initMcp } from './mcp';\nimport { registerVariableTypes } from './register-variable-types';\nimport { StyleVariablesRenderer } from './renderers/style-variables-renderer';\nimport { registerRepeaterInjections } from './repeater-injections';\nimport { service as variablesService } from './service';\nimport { hasVariableType } from './variables-registry/variable-type-registry';\n\nconst { registerPopoverAction } = controlActionsMenu;\n\nexport function init() {\n\tregisterVariableTypes();\n\tregisterRepeaterInjections();\n\n\tregisterControlReplacement( {\n\t\tcomponent: VariableControl,\n\t\tcondition: ( { value, placeholder } ) => {\n\t\t\tif ( hasVariableAssigned( value ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif ( value ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn hasVariableAssigned( placeholder );\n\t\t},\n\t} );\n\n\tregisterPopoverAction( {\n\t\tid: 'variables',\n\t\tuseProps: usePropVariableAction,\n\t} );\n\n\tvariablesService.init().then( () => {\n\t\tinitMcp();\n\t} );\n\n\tinjectIntoTop( {\n\t\tid: 'canvas-style-variables-render',\n\t\tcomponent: StyleVariablesRenderer,\n\t} );\n\n\tregisterPanel( panel );\n}\n\nfunction hasVariableAssigned( value: PropValue ) {\n\tif ( isTransformable( value ) ) {\n\t\treturn hasVariableType( value.$$type );\n\t}\n\n\treturn false;\n}\n","import * as React from 'react';\nimport { useCallback, useEffect, useState } from 'react';\nimport {\n\t__createPanel as createPanel,\n\tPanel,\n\tPanelBody,\n\tPanelFooter,\n\tPanelHeader,\n\tPanelHeaderTitle,\n} from '@elementor/editor-panels';\nimport { SaveChangesDialog, SearchField, ThemeProvider, useDialog } from '@elementor/editor-ui';\nimport { changeEditMode } from '@elementor/editor-v1-adapters';\nimport { AlertTriangleFilledIcon, ColorFilterIcon, TrashIcon } from '@elementor/icons';\nimport {\n\tAlert,\n\tAlertAction,\n\tAlertTitle,\n\tButton,\n\tCloseButton,\n\tDivider,\n\tInfotip,\n\tStack,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { trackVariablesManagerEvent } from '../../utils/tracking';\nimport { type ErrorResponse, type MappedError, mapServerError } from '../../utils/validations';\nimport { getVariableType } from '../../variables-registry/variable-type-registry';\nimport { DeleteConfirmationDialog } from '../ui/delete-confirmation-dialog';\nimport { EmptyState } from '../ui/empty-state';\nimport { NoSearchResults } from '../ui/no-search-results';\nimport { useAutoEdit } from './hooks/use-auto-edit';\nimport { useErrorNavigation } from './hooks/use-error-navigation';\nimport { useVariablesManagerState } from './hooks/use-variables-manager-state';\nimport { SIZE, VariableManagerCreateMenu } from './variables-manager-create-menu';\nimport { VariablesManagerTable } from './variables-manager-table';\n\nconst id = 'variables-manager';\n\nexport const { panel, usePanelActions } = createPanel( {\n\tid,\n\tcomponent: VariablesManagerPanel,\n\tallowedEditModes: [ 'edit', id ],\n\tonOpen: () => {\n\t\tchangeEditMode( id );\n\t},\n\tonClose: () => {\n\t\tchangeEditMode( 'edit' );\n\t},\n\tisOpenPreviousElement: true,\n} );\n\nexport function VariablesManagerPanel() {\n\tconst { close: closePanel } = usePanelActions();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst createMenuState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\tconst {\n\t\tvariables,\n\t\tisDirty,\n\t\tsearchValue,\n\t\tisSaveDisabled,\n\t\thandleOnChange,\n\t\tcreateVariable,\n\t\thandleDeleteVariable,\n\t\thandleSave,\n\t\tisSaving,\n\t\thandleSearch,\n\t\tsetIsSaving,\n\t\tsetIsSaveDisabled,\n\t} = useVariablesManagerState();\n\n\tconst { autoEditVariableId, startAutoEdit, handleAutoEditComplete } = useAutoEdit();\n\tconst { createNavigationCallback, resetNavigation } = useErrorNavigation();\n\n\tconst [ deleteConfirmation, setDeleteConfirmation ] = useState< { id: string; label: string } | null >( null );\n\tconst [ serverError, setServerError ] = useState< MappedError | null >( null );\n\n\tusePreventUnload( isDirty );\n\n\tconst handleClosePanel = () => {\n\t\tif ( isDirty ) {\n\t\t\topenSaveChangesDialog();\n\t\t\treturn;\n\t\t}\n\n\t\tclosePanel();\n\t};\n\n\tconst handleCreateVariable = useCallback(\n\t\t( type: string, defaultName: string, defaultValue: string ) => {\n\t\t\tconst newId = createVariable( type, defaultName, defaultValue );\n\t\t\tif ( newId ) {\n\t\t\t\tstartAutoEdit( newId );\n\t\t\t}\n\t\t},\n\t\t[ createVariable, startAutoEdit ]\n\t);\n\n\tconst handleSaveClick = async () => {\n\t\ttry {\n\t\t\tsetServerError( null );\n\t\t\tresetNavigation();\n\n\t\t\tconst result = await handleSave();\n\t\t\ttrackVariablesManagerEvent( { action: 'saveChanges' } );\n\t\t\treturn result;\n\t\t} catch ( error ) {\n\t\t\tconst mappedError = mapServerError( error as ErrorResponse );\n\t\t\tconst duplicatedIds = mappedError?.action?.data?.duplicatedIds;\n\n\t\t\tif ( mappedError && 'label' === mappedError.field ) {\n\t\t\t\tif ( duplicatedIds && mappedError.action ) {\n\t\t\t\t\tmappedError.action.callback = createNavigationCallback( duplicatedIds, startAutoEdit, () => {\n\t\t\t\t\t\tsetIsSaveDisabled( false );\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tsetServerError( mappedError );\n\t\t\t\tsetIsSaveDisabled( true );\n\t\t\t\tresetNavigation();\n\t\t\t}\n\n\t\t\treturn { success: false, error: mappedError };\n\t\t} finally {\n\t\t\tsetIsSaving( false );\n\t\t}\n\t};\n\n\tconst handleDeleteVariableWithConfirmation = useCallback(\n\t\t( itemId: string ) => {\n\t\t\thandleDeleteVariable( itemId );\n\t\t\tsetDeleteConfirmation( null );\n\t\t},\n\t\t[ handleDeleteVariable ]\n\t);\n\n\tconst menuActions = [\n\t\t{\n\t\t\tname: __( 'Delete', 'elementor' ),\n\t\t\ticon: TrashIcon,\n\t\t\tcolor: 'error.main',\n\t\t\tonClick: ( itemId: string ) => {\n\t\t\t\tconst variable = variables[ itemId ];\n\t\t\t\tif ( variable ) {\n\t\t\t\t\tsetDeleteConfirmation( { id: itemId, label: variable.label } );\n\n\t\t\t\t\tconst variableTypeOptions = getVariableType( variable.type );\n\t\t\t\t\ttrackVariablesManagerEvent( { action: 'delete', varType: variableTypeOptions?.variableType } );\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\t];\n\n\tconst hasVariables = Object.keys( variables ).length > 0;\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<Panel>\n\t\t\t\t<PanelHeader\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\theight: 'unset',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<Stack width=\"100%\" direction=\"column\" alignItems=\"center\">\n\t\t\t\t\t\t<Stack p={ 1 } pl={ 2 } width=\"100%\" direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t\t<Stack width=\"100%\" direction=\"row\" gap={ 1 }>\n\t\t\t\t\t\t\t\t<PanelHeaderTitle sx={ { display: 'flex', alignItems: 'center', gap: 0.5 } }>\n\t\t\t\t\t\t\t\t\t<ColorFilterIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t\t{ __( 'Variables Manager', 'elementor' ) }\n\t\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t<Stack direction=\"row\" gap={ 0.5 } alignItems=\"center\">\n\t\t\t\t\t\t\t\t<VariableManagerCreateMenu\n\t\t\t\t\t\t\t\t\tonCreate={ handleCreateVariable }\n\t\t\t\t\t\t\t\t\tvariables={ variables }\n\t\t\t\t\t\t\t\t\tmenuState={ createMenuState }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\t\taria-label=\"Close\"\n\t\t\t\t\t\t\t\t\tslotProps={ { icon: { fontSize: SIZE } } }\n\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\thandleClosePanel();\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</Stack>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Stack width=\"100%\" direction=\"row\" gap={ 1 }>\n\t\t\t\t\t\t\t<SearchField\n\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\t\t\t\tonSearch={ handleSearch }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Divider sx={ { width: '100%' } } />\n\t\t\t\t\t</Stack>\n\t\t\t\t</PanelHeader>\n\t\t\t\t<PanelBody\n\t\t\t\t\tsx={ {\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ hasVariables && (\n\t\t\t\t\t\t<VariablesManagerTable\n\t\t\t\t\t\t\tmenuActions={ menuActions }\n\t\t\t\t\t\t\tvariables={ variables }\n\t\t\t\t\t\t\tonChange={ handleOnChange }\n\t\t\t\t\t\t\tautoEditVariableId={ autoEditVariableId }\n\t\t\t\t\t\t\tonAutoEditComplete={ handleAutoEditComplete }\n\t\t\t\t\t\t\tonFieldError={ setIsSaveDisabled }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! hasVariables && searchValue && (\n\t\t\t\t\t\t<NoSearchResults\n\t\t\t\t\t\t\tsearchValue={ searchValue }\n\t\t\t\t\t\t\tonClear={ () => handleSearch( '' ) }\n\t\t\t\t\t\t\ticon={ <ColorFilterIcon fontSize=\"large\" /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ ! hasVariables && ! searchValue && (\n\t\t\t\t\t\t<EmptyState\n\t\t\t\t\t\t\ttitle={ __( 'Create your first variable', 'elementor' ) }\n\t\t\t\t\t\t\tmessage={ __(\n\t\t\t\t\t\t\t\t'Variables are saved attributes that you can apply anywhere on your site.',\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\ticon={ <ColorFilterIcon fontSize=\"large\" /> }\n\t\t\t\t\t\t\tonAdd={ createMenuState.open }\n\t\t\t\t\t\t/>\n\t\t\t\t\t) }\n\t\t\t\t</PanelBody>\n\n\t\t\t\t<PanelFooter>\n\t\t\t\t\t<Infotip\n\t\t\t\t\t\tplacement=\"right\"\n\t\t\t\t\t\topen={ !! serverError }\n\t\t\t\t\t\tcontent={\n\t\t\t\t\t\t\tserverError ? (\n\t\t\t\t\t\t\t\t<Alert\n\t\t\t\t\t\t\t\t\tseverity={ serverError.severity ?? 'error' }\n\t\t\t\t\t\t\t\t\taction={\n\t\t\t\t\t\t\t\t\t\tserverError.action?.label ? (\n\t\t\t\t\t\t\t\t\t\t\t<AlertAction onClick={ serverError.action.callback }>\n\t\t\t\t\t\t\t\t\t\t\t\t{ serverError.action.label }\n\t\t\t\t\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t\t\t\t\t) : undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tonClose={\n\t\t\t\t\t\t\t\t\t\t! serverError.action?.label\n\t\t\t\t\t\t\t\t\t\t\t? () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetServerError( null );\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetIsSaveDisabled( false );\n\t\t\t\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t\t\t\t: undefined\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\ticon={\n\t\t\t\t\t\t\t\t\t\tserverError.IconComponent ? (\n\t\t\t\t\t\t\t\t\t\t\t<serverError.IconComponent />\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<AlertTriangleFilledIcon />\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>\n\t\t\t\t\t\t\t\t\t<AlertTitle>{ serverError.message }</AlertTitle>\n\t\t\t\t\t\t\t\t\t{ serverError.action?.message }\n\t\t\t\t\t\t\t\t</Alert>\n\t\t\t\t\t\t\t) : null\n\t\t\t\t\t\t}\n\t\t\t\t\t\tarrow={ false }\n\t\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\t\tpopper: {\n\t\t\t\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tname: 'offset',\n\t\t\t\t\t\t\t\t\t\toptions: { offset: [ -10, 10 ] },\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},\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\tdisabled={ isSaveDisabled || ! isDirty || isSaving }\n\t\t\t\t\t\t\tonClick={ handleSaveClick }\n\t\t\t\t\t\t\tloading={ isSaving }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Infotip>\n\t\t\t\t</PanelFooter>\n\t\t\t</Panel>\n\n\t\t\t{ deleteConfirmation && (\n\t\t\t\t<DeleteConfirmationDialog\n\t\t\t\t\topen\n\t\t\t\t\tlabel={ deleteConfirmation.label }\n\t\t\t\t\tonConfirm={ () => handleDeleteVariableWithConfirmation( deleteConfirmation.id ) }\n\t\t\t\t\tcloseDialog={ () => setDeleteConfirmation( null ) }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t<SaveChangesDialog.Title onClose={ closeSaveChangesDialog }>\n\t\t\t\t\t\t{ __( 'You have unsaved changes', 'elementor' ) }\n\t\t\t\t\t</SaveChangesDialog.Title>\n\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t{ __( 'To avoid losing your updates, save your changes before leaving.', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\tdiscard: {\n\t\t\t\t\t\t\t\tlabel: __( 'Discard', 'elementor' ),\n\t\t\t\t\t\t\t\taction: () => {\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\tclosePanel();\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\tlabel: __( 'Save', 'elementor' ),\n\t\t\t\t\t\t\t\taction: async () => {\n\t\t\t\t\t\t\t\t\tconst result = await handleSaveClick();\n\t\t\t\t\t\t\t\t\tcloseSaveChangesDialog();\n\t\t\t\t\t\t\t\t\tif ( result?.success ) {\n\t\t\t\t\t\t\t\t\t\tclosePanel();\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},\n\t\t\t\t\t\t} }\n\t\t\t\t\t/>\n\t\t\t\t</SaveChangesDialog>\n\t\t\t) }\n\t\t</ThemeProvider>\n\t);\n}\n\nconst usePreventUnload = ( isDirty: boolean ) => {\n\tuseEffect( () => {\n\t\tconst handleBeforeUnload = ( event: BeforeUnloadEvent ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener( 'beforeunload', handleBeforeUnload );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'beforeunload', handleBeforeUnload );\n\t\t};\n\t}, [ isDirty ] );\n};\n","import { getMixpanel } from '@elementor/mixpanel';\n\ntype VariableEventData = {\n\tvarType: string;\n\tcontrolPath: string;\n\taction: 'open' | 'add' | 'connect' | 'save';\n};\n\nexport const trackVariableEvent = ( { varType, controlPath, action }: VariableEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.variables?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.variables[ action ];\n\tdispatchEvent?.( name, {\n\t\tlocation: config?.locations?.variables || '',\n\t\tsecondaryLocation: config?.secondaryLocations?.variablesPopover || '',\n\t\ttrigger: config?.triggers?.click || '',\n\t\tvar_type: varType,\n\t\tcontrol_path: controlPath,\n\t\taction_type: name,\n\t} );\n};\n\ntype VariablesManagerEventData = {\n\taction: 'openManager' | 'add' | 'saveChanges' | 'delete';\n\tvarType?: string;\n\tcontrolPath?: string;\n};\n\nexport const trackVariablesManagerEvent = ( { action, varType, controlPath }: VariablesManagerEventData ) => {\n\tconst { dispatchEvent, config } = getMixpanel();\n\tif ( ! config?.names?.variables?.[ action ] ) {\n\t\treturn;\n\t}\n\n\tconst name = config.names.variables[ action ];\n\tconst eventData: Record< string, string > = {\n\t\tlocation: config?.locations?.variablesManager || '',\n\t\ttrigger: config?.triggers?.click || '',\n\t\taction_type: name,\n\t};\n\n\tif ( varType ) {\n\t\teventData.var_type = varType;\n\t}\n\n\tif ( controlPath ) {\n\t\teventData.style_control_path = controlPath;\n\t}\n\n\tdispatchEvent?.( name, eventData );\n};\n","import type * as React from 'react';\nimport { AlertTriangleFilledIcon, InfoCircleFilledIcon } from '@elementor/icons';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport { type TVariable, type TVariablesList } from '../storage';\n\nexport const ERROR_MESSAGES = {\n\tMISSING_VARIABLE_NAME: __( 'Give your variable a name.', 'elementor' ),\n\tMISSING_VARIABLE_VALUE: __( 'Add a value to complete your variable.', 'elementor' ),\n\tINVALID_CHARACTERS: __( 'Use letters, numbers, dashes (-), or underscores (_) for the name.', 'elementor' ),\n\tNO_NON_SPECIAL_CHARACTER: __( 'Names have to include at least one non-special character.', 'elementor' ),\n\tVARIABLE_LABEL_MAX_LENGTH: __( 'Keep names up to 50 characters.', 'elementor' ),\n\tDUPLICATED_LABEL: __( 'This variable name already exists. Please choose a unique name.', 'elementor' ),\n\tUNEXPECTED_ERROR: __( 'There was a glitch. Try saving your variable again.', 'elementor' ),\n\tBATCH: {\n\t\tDUPLICATED_LABELS: ( count: number, name: string ) =>\n\t\t\t// eslint-disable-next-line @wordpress/i18n-translator-comments\n\t\t\tsprintf( __( 'We found %1$d duplicated %2$s.', 'elementor' ), count, name ),\n\t\tUNEXPECTED_ERROR: __( 'There was a glitch.', 'elementor' ),\n\t\tDUPLICATED_LABEL_ACTION: __( 'Take me there', 'elementor' ),\n\t\tDUPLICATED_LABEL_ACTION_MESSAGE: __( 'Please rename the variables.', 'elementor' ),\n\t\tUNEXPECTED_ERROR_ACTION_MESSAGE: __( 'Try saving your variables again.', 'elementor' ),\n\t},\n} as const;\n\nexport const VARIABLE_LABEL_MAX_LENGTH = 50;\n\ntype BatchErrorData = {\n\t[ id: string ]: {\n\t\tstatus?: number;\n\t\tmessage?: string;\n\t};\n};\nexport type ErrorResponse = {\n\tresponse?: {\n\t\tdata?: {\n\t\t\tcode?: string;\n\t\t\tdata?: BatchErrorData;\n\t\t};\n\t};\n};\n\nexport type ErrorAction = {\n\tlabel?: string;\n\tmessage?: string;\n\tcallback?: () => void;\n\tdata?: {\n\t\tduplicatedIds?: string[];\n\t};\n};\n\nexport type MappedError = {\n\tfield: string;\n\tmessage: string;\n\taction?: ErrorAction;\n\tseverity?: 'error' | 'secondary';\n\tIconComponent?: React.ElementType;\n};\n\nexport const mapServerError = ( error: ErrorResponse ): MappedError | undefined => {\n\tif ( error?.response?.data?.code === 'duplicated_label' ) {\n\t\treturn {\n\t\t\tfield: 'label',\n\t\t\tmessage: ERROR_MESSAGES.DUPLICATED_LABEL,\n\t\t};\n\t}\n\n\tif ( error?.response?.data?.code === 'batch_duplicated_label' ) {\n\t\tconst errorData = error?.response?.data?.data ?? {};\n\t\tconst count = Object.keys( errorData ).length;\n\t\tconst name = count === 1 ? 'name' : 'names';\n\t\tconst duplicatedIds = Object.keys( errorData );\n\n\t\treturn {\n\t\t\tfield: 'label',\n\t\t\tmessage: ERROR_MESSAGES.BATCH.DUPLICATED_LABELS( count, name ),\n\t\t\tseverity: 'error',\n\t\t\tIconComponent: AlertTriangleFilledIcon,\n\t\t\taction: {\n\t\t\t\tlabel: ERROR_MESSAGES.BATCH.DUPLICATED_LABEL_ACTION,\n\t\t\t\tmessage: ERROR_MESSAGES.BATCH.DUPLICATED_LABEL_ACTION_MESSAGE,\n\t\t\t\tdata: {\n\t\t\t\t\tduplicatedIds,\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t}\n\n\tif ( error?.response?.data?.code === 'batch_operation_failed' ) {\n\t\treturn {\n\t\t\tfield: 'label',\n\t\t\tmessage: ERROR_MESSAGES.BATCH.UNEXPECTED_ERROR,\n\t\t\tseverity: 'secondary',\n\t\t\tIconComponent: InfoCircleFilledIcon,\n\t\t\taction: {\n\t\t\t\tmessage: ERROR_MESSAGES.BATCH.UNEXPECTED_ERROR_ACTION_MESSAGE,\n\t\t\t},\n\t\t};\n\t}\n\n\treturn undefined;\n};\n\nexport const validateLabel = ( name: string, variables?: TVariablesList ): string => {\n\tif ( ! name.trim() ) {\n\t\treturn ERROR_MESSAGES.MISSING_VARIABLE_NAME;\n\t}\n\n\tconst allowedChars = /^[a-zA-Z0-9_-]+$/;\n\tif ( ! allowedChars.test( name ) ) {\n\t\treturn ERROR_MESSAGES.INVALID_CHARACTERS;\n\t}\n\n\tconst hasAlphanumeric = /[a-zA-Z0-9]/;\n\tif ( ! hasAlphanumeric.test( name ) ) {\n\t\treturn ERROR_MESSAGES.NO_NON_SPECIAL_CHARACTER;\n\t}\n\n\tif ( VARIABLE_LABEL_MAX_LENGTH < name.length ) {\n\t\treturn ERROR_MESSAGES.VARIABLE_LABEL_MAX_LENGTH;\n\t}\n\n\tif ( Object.values( variables ?? {} ).some( ( variable: TVariable ) => variable.label === name ) ) {\n\t\treturn ERROR_MESSAGES.DUPLICATED_LABEL;\n\t}\n\n\treturn '';\n};\n\nexport const labelHint = ( name: string ): string => {\n\tconst hintThreshold = VARIABLE_LABEL_MAX_LENGTH * 0.8 - 1;\n\tif ( hintThreshold < name.length ) {\n\t\treturn ERROR_MESSAGES.VARIABLE_LABEL_MAX_LENGTH;\n\t}\n\n\treturn '';\n};\n\nexport const validateValue = ( value: string ): string => {\n\tif ( ! value.trim() ) {\n\t\treturn ERROR_MESSAGES.MISSING_VARIABLE_VALUE;\n\t}\n\n\treturn '';\n};\n","import {\n\ttype ForwardRefExoticComponent,\n\ttype JSX,\n\ttype KeyboardEvent,\n\ttype RefAttributes,\n\ttype RefObject,\n} from 'react';\nimport { type AnyTransformer, styleTransformersRegistry } from '@elementor/editor-canvas';\nimport { stylesInheritanceTransformersRegistry } from '@elementor/editor-editing-panel';\nimport {\n\ttype createPropUtils,\n\ttype PropType,\n\ttype PropTypeKey,\n\ttype PropTypeUtil,\n\ttype PropValue,\n} from '@elementor/editor-props';\nimport { type SvgIconProps } from '@elementor/ui';\n\nimport { inheritanceTransformer } from '../transformers/inheritance-transformer';\nimport { variableTransformer } from '../transformers/variable-transformer';\nimport { type NormalizedVariable, type Variable } from '../types';\n\nexport type ValueFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n\tonPropTypeKeyChange?: ( key: string ) => void;\n\tpropTypeKey?: string;\n\tonValidationChange?: ( value: string ) => void;\n\tpropType?: PropType;\n\terror?: { value: string; message: string };\n\tref?: RefObject< HTMLElement | null >;\n\tonKeyDown?: ( event: KeyboardEvent< HTMLElement > ) => void;\n};\n\ntype FallbackPropTypeUtil = ReturnType< typeof createPropUtils >;\n\ntype VariableTypeOptions = {\n\ticon: ForwardRefExoticComponent< Omit< SvgIconProps, 'ref' > & RefAttributes< SVGSVGElement > >;\n\tstartIcon?: ( { value }: { value: string } ) => JSX.Element;\n\tvalueField?: ( props: ValueFieldProps ) => JSX.Element;\n\tvariableType: string;\n\tkey?: string;\n\tdefaultValue?: string;\n\tstyleTransformer?: AnyTransformer;\n\tfallbackPropTypeUtil: FallbackPropTypeUtil;\n\tpropTypeUtil: PropTypeUtil< string, string >;\n\tselectionFilter?: ( variables: NormalizedVariable[], propType?: PropType ) => NormalizedVariable[];\n\tvalueTransformer?: ( value: string, type?: string ) => PropValue;\n\tisCompatible?: ( propType: PropType, variable: Variable ) => boolean;\n\temptyState?: JSX.Element;\n};\n\nexport type VariableTypesMap = Record< string, Omit< VariableTypeOptions, 'key' > >;\n\nexport function createVariableTypeRegistry() {\n\tconst variableTypes: VariableTypesMap = {};\n\n\tconst registerVariableType = ( {\n\t\tkey,\n\t\ticon,\n\t\tstartIcon,\n\t\tvalueField,\n\t\tpropTypeUtil,\n\t\tvariableType,\n\t\tdefaultValue,\n\t\tselectionFilter,\n\t\tvalueTransformer,\n\t\tstyleTransformer,\n\t\tfallbackPropTypeUtil,\n\t\tisCompatible,\n\t\temptyState,\n\t}: VariableTypeOptions ) => {\n\t\tconst variableTypeKey = key ?? propTypeUtil.key;\n\n\t\tif ( ! isCompatible ) {\n\t\t\tisCompatible = ( propType, variable: Variable ) => {\n\t\t\t\tif ( 'union' === propType.kind ) {\n\t\t\t\t\tif ( variable.type in propType.prop_types ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}\n\n\t\tvariableTypes[ variableTypeKey ] = {\n\t\t\ticon,\n\t\t\tstartIcon,\n\t\t\tvalueField,\n\t\t\tpropTypeUtil,\n\t\t\tvariableType,\n\t\t\tdefaultValue,\n\t\t\tselectionFilter,\n\t\t\tvalueTransformer,\n\t\t\tfallbackPropTypeUtil,\n\t\t\tisCompatible,\n\t\t\temptyState,\n\t\t};\n\n\t\tregisterTransformer( propTypeUtil.key, styleTransformer );\n\t\tregisterInheritanceTransformer( propTypeUtil.key );\n\t};\n\n\tconst registerTransformer = ( key: PropTypeKey, transformer?: AnyTransformer ) => {\n\t\tstyleTransformersRegistry.register( key, transformer ?? variableTransformer );\n\t};\n\n\tconst registerInheritanceTransformer = ( key: PropTypeKey ) => {\n\t\tstylesInheritanceTransformersRegistry.register( key, inheritanceTransformer );\n\t};\n\n\tconst getVariableType = ( key: string ) => {\n\t\treturn variableTypes[ key ];\n\t};\n\n\tconst getVariableTypes = () => {\n\t\treturn variableTypes;\n\t};\n\n\tconst hasVariableType = ( key: string ) => {\n\t\treturn key in variableTypes;\n\t};\n\n\treturn {\n\t\tregisterVariableType,\n\t\tgetVariableType,\n\t\tgetVariableTypes,\n\t\thasVariableType,\n\t};\n}\n","import * as React from 'react';\nimport { createTransformer } from '@elementor/editor-canvas';\nimport { Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { ColorIndicator } from '../components/ui/color-indicator';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { service } from '../service';\nimport { resolveCssVariable } from './utils/resolve-css-variable';\n\nexport const inheritanceTransformer = createTransformer( ( id: string ) => {\n\tconst variables = service.variables();\n\tconst variable = variables[ id ];\n\n\tif ( ! variable ) {\n\t\treturn <span>{ __( 'Missing variable', 'elementor' ) }</span>;\n\t}\n\n\tconst showColorIndicator = variable.type === colorVariablePropTypeUtil.key;\n\tconst css = resolveCssVariable( id, variable );\n\n\treturn (\n\t\t<Stack direction=\"row\" spacing={ 0.5 } sx={ { paddingInline: '1px' } } alignItems=\"center\">\n\t\t\t{ showColorIndicator && <ColorIndicator size=\"inherit\" value={ variable.value } /> }\n\t\t\t<Typography variant=\"caption\" overflow=\"hidden\" whiteSpace=\"nowrap\" textOverflow=\"ellipsis\">\n\t\t\t\t{ css }\n\t\t\t</Typography>\n\t\t</Stack>\n\t);\n} );\n","import { styled, UnstableColorIndicator } from '@elementor/ui';\n\nexport const ColorIndicator = styled( UnstableColorIndicator )( ( { theme } ) => ( {\n\tborderRadius: `${ theme.shape.borderRadius / 2 }px`,\n\tmarginRight: theme.spacing( 0.25 ),\n} ) );\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const colorVariablePropTypeUtil = createPropUtils( 'global-color-variable', z.string() );\n","import { __ } from '@wordpress/i18n';\n\nimport { apiClient } from './api';\nimport { buildOperationsArray, type OperationResult } from './batch-operations';\nimport { OP_RW, Storage, type TVariable, type TVariablesList } from './storage';\nimport { styleVariablesRepository } from './style-variables-repository';\nimport { type Variable } from './types';\n\nconst storage = new Storage();\n\nexport const service = {\n\tvariables: (): TVariablesList => {\n\t\treturn storage.load();\n\t},\n\n\tfindIdByLabel( needle: string ): string {\n\t\tconst variableId = Object.entries( this.variables() ).find( ( [ , variable ] ) => variable.label === needle );\n\t\tif ( ! variableId ) {\n\t\t\tthrow new Error( `Variable with label ${ needle } not found` );\n\t\t}\n\t\treturn variableId[ 0 ];\n\t},\n\n\tfindVariableByLabel( needle: string ): TVariable | null {\n\t\treturn Object.values( this.variables() ).find( ( variable ) => variable.label === needle ) || null;\n\t},\n\n\tgetWatermark: (): number => {\n\t\treturn storage.state.watermark;\n\t},\n\n\tinit: () => {\n\t\treturn service.load();\n\t},\n\n\tload: () => {\n\t\treturn apiClient\n\t\t\t.list()\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tthrow new Error( 'Unexpected response from server' );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variables, watermark } = data;\n\n\t\t\t\tstorage.fill( variables, watermark );\n\n\t\t\t\tstyleVariablesRepository.update( variables );\n\n\t\t\t\treturn variables;\n\t\t\t} );\n\t},\n\n\tcreate: ( { type, label, value }: Variable ) => {\n\t\treturn apiClient\n\t\t\t.create( type, label, value )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tconst errorMessage = payload?.message || __( 'Unexpected response from server', 'elementor' );\n\t\t\t\t\tthrow new Error( errorMessage );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variable, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tconst { id: variableId, ...createdVariable } = variable;\n\n\t\t\t\tstorage.add( variableId, createdVariable );\n\n\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t[ variableId ]: createdVariable,\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tid: variableId,\n\t\t\t\t\tvariable: createdVariable,\n\t\t\t\t};\n\t\t\t} );\n\t},\n\n\tupdate: ( id: string, { label, value, type }: Omit< Variable, 'type' > & { type?: Variable[ 'type' ] } ) => {\n\t\treturn apiClient\n\t\t\t.update( id, label, value, type )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tconst errorMessage = payload?.message || __( 'Unexpected response from server', 'elementor' );\n\t\t\t\t\tthrow new Error( errorMessage );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variable, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tconst { id: variableId, ...updatedVariable } = variable;\n\n\t\t\t\tstorage.update( variableId, updatedVariable );\n\n\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t[ variableId ]: updatedVariable,\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tid: variableId,\n\t\t\t\t\tvariable: updatedVariable,\n\t\t\t\t};\n\t\t\t} );\n\t},\n\n\tdelete: ( id: string ) => {\n\t\treturn apiClient\n\t\t\t.delete( id )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tthrow new Error( 'Unexpected response from server' );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variable, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tconst { id: variableId, ...deletedVariable } = variable;\n\n\t\t\t\tstorage.update( variableId, deletedVariable );\n\n\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t[ variableId ]: deletedVariable,\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tid: variableId,\n\t\t\t\t\tvariable: deletedVariable,\n\t\t\t\t};\n\t\t\t} );\n\t},\n\n\trestore: ( id: string, label?: string, value?: string, type?: string ) => {\n\t\treturn apiClient\n\t\t\t.restore( id, label, value, type )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tthrow new Error( 'Unexpected response from server' );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { variable, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tconst { id: variableId, ...restoredVariable } = variable;\n\n\t\t\t\tstorage.update( variableId, restoredVariable );\n\n\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t[ variableId ]: restoredVariable,\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tid: variableId,\n\t\t\t\t\tvariable: restoredVariable,\n\t\t\t\t};\n\t\t\t} );\n\t},\n\n\tbatchSave: ( originalVariables: TVariablesList, currentVariables: TVariablesList ) => {\n\t\tconst operations = buildOperationsArray( originalVariables, currentVariables );\n\t\tconst batchPayload = { operations, watermark: storage.state.watermark };\n\n\t\tif ( operations.length === 0 ) {\n\t\t\treturn Promise.resolve( {\n\t\t\t\tsuccess: true,\n\t\t\t\twatermark: storage.state.watermark,\n\t\t\t\toperations: 0,\n\t\t\t} );\n\t\t}\n\n\t\treturn apiClient\n\t\t\t.batch( batchPayload )\n\t\t\t.then( ( response ) => {\n\t\t\t\tconst { success, data: payload } = response.data;\n\n\t\t\t\tif ( ! success ) {\n\t\t\t\t\tthrow new Error( 'Unexpected response from server' );\n\t\t\t\t}\n\n\t\t\t\treturn payload;\n\t\t\t} )\n\t\t\t.then( ( data ) => {\n\t\t\t\tconst { results, watermark } = data;\n\n\t\t\t\thandleWatermark( OP_RW, watermark );\n\n\t\t\t\tif ( results ) {\n\t\t\t\t\tresults.forEach( ( result: OperationResult ) => {\n\t\t\t\t\t\tif ( result.variable ) {\n\t\t\t\t\t\t\tconst { id: variableId, ...variableData } = result.variable;\n\n\t\t\t\t\t\t\tif ( result.type === 'create' ) {\n\t\t\t\t\t\t\t\tstorage.add( variableId, variableData );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstorage.update( variableId, variableData );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t\t\t\t\t[ variableId ]: variableData,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tsuccess: true,\n\t\t\t\t\twatermark,\n\t\t\t\t\toperations: operations.length,\n\t\t\t\t};\n\t\t\t} );\n\t},\n};\n\nconst handleWatermark = ( operation: string, newWatermark: number ) => {\n\tif ( storage.watermarkDiff( operation, newWatermark ) ) {\n\t\tsetTimeout( () => service.load(), 500 );\n\t}\n\tstorage.watermark( newWatermark );\n};\n","import { httpService } from '@elementor/http-client';\n\nimport { type OperationType } from './batch-operations';\n\nconst BASE_PATH = 'elementor/v1/variables';\n\ntype RestoreVariablePayload = {\n\tid: string;\n\tlabel?: string;\n\tvalue?: string;\n\ttype?: string;\n};\n\nexport type BatchOperation = {\n\ttype: OperationType;\n\tid?: string;\n\tvariable?: {\n\t\tid?: string;\n\t\ttype?: string;\n\t\tlabel?: string;\n\t\tvalue?: string;\n\t};\n\tlabel?: string;\n\tvalue?: string;\n};\n\nexport type BatchPayload = {\n\twatermark: number;\n\toperations: BatchOperation[];\n};\n\nexport const apiClient = {\n\tlist: () => {\n\t\treturn httpService().get( BASE_PATH + '/list' );\n\t},\n\n\tcreate: ( type: string, label: string, value: string ) => {\n\t\treturn httpService().post( BASE_PATH + '/create', {\n\t\t\ttype,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t} );\n\t},\n\n\tupdate: ( id: string, label: string, value: string, type?: string ) => {\n\t\treturn httpService().put( BASE_PATH + '/update', {\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t\ttype,\n\t\t} );\n\t},\n\n\tdelete: ( id: string ) => {\n\t\treturn httpService().post( BASE_PATH + '/delete', { id } );\n\t},\n\n\trestore: ( id: string, label?: string, value?: string, type?: string ) => {\n\t\tconst payload: RestoreVariablePayload = { id };\n\n\t\tif ( label ) {\n\t\t\tpayload.label = label;\n\t\t}\n\n\t\tif ( value ) {\n\t\t\tpayload.value = value;\n\t\t}\n\n\t\tif ( type ) {\n\t\t\tpayload.type = type;\n\t\t}\n\n\t\treturn httpService().post( BASE_PATH + '/restore', payload );\n\t},\n\n\tbatch: ( payload: BatchPayload ) => {\n\t\treturn httpService().post( BASE_PATH + '/batch', payload );\n\t},\n};\n","import { type BatchOperation } from './api';\nimport { type TVariable, type TVariablesList } from './storage';\n\nexport type OperationType = 'create' | 'update' | 'delete' | 'restore';\n\nexport type OperationResult = {\n\tid: string;\n\ttype: OperationType;\n\tvariable?: TVariable & { id: string };\n\tdeleted?: boolean;\n};\n\nexport const generateTempId = (): string => {\n\tconst timestamp = Date.now().toString( 36 );\n\tconst random = Math.random().toString( 36 ).substring( 2, 8 );\n\treturn `tmp-${ timestamp }-${ random }`;\n};\n\nexport const isTempId = ( id: string ): boolean => {\n\treturn id.startsWith( 'tmp-' );\n};\n\nexport const buildOperationsArray = (\n\toriginalVariables: TVariablesList,\n\tcurrentVariables: TVariablesList\n): BatchOperation[] => {\n\tconst operations: BatchOperation[] = [];\n\n\tObject.entries( currentVariables ).forEach( ( [ id, variable ] ) => {\n\t\tif ( isTempId( id ) ) {\n\t\t\toperations.push( {\n\t\t\t\ttype: 'create',\n\t\t\t\tvariable: {\n\t\t\t\t\t...variable,\n\t\t\t\t\tid,\n\t\t\t\t},\n\t\t\t} );\n\t\t} else if ( originalVariables[ id ] ) {\n\t\t\tconst original = originalVariables[ id ];\n\n\t\t\tif ( original.deleted && ! variable.deleted ) {\n\t\t\t\toperations.push( {\n\t\t\t\t\ttype: 'restore',\n\t\t\t\t\tid,\n\t\t\t\t\t...( original.label !== variable.label && { label: variable.label } ),\n\t\t\t\t\t...( original.value !== variable.value && { value: variable.value } ),\n\t\t\t\t} );\n\t\t\t} else if (\n\t\t\t\t! variable.deleted &&\n\t\t\t\t( original.label !== variable.label ||\n\t\t\t\t\toriginal.value !== variable.value ||\n\t\t\t\t\toriginal.order !== variable.order )\n\t\t\t) {\n\t\t\t\toperations.push( {\n\t\t\t\t\ttype: 'update',\n\t\t\t\t\tid,\n\t\t\t\t\tvariable: {\n\t\t\t\t\t\t...( original.label !== variable.label && { label: variable.label } ),\n\t\t\t\t\t\t...( original.value !== variable.value && { value: variable.value } ),\n\t\t\t\t\t\t...( original.order !== variable.order && { order: variable.order } ),\n\t\t\t\t\t},\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\n\tObject.entries( originalVariables ).forEach( ( [ id, variable ] ) => {\n\t\tif ( isTempId( id ) || variable.deleted ) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst currentVariable = currentVariables[ id ];\n\n\t\tif ( ! currentVariable || currentVariable.deleted ) {\n\t\t\toperations.push( {\n\t\t\t\ttype: 'delete',\n\t\t\t\tid,\n\t\t\t} );\n\t\t}\n\t} );\n\n\treturn operations.filter( ( op ) => {\n\t\tconst id = op.id || op.variable?.id;\n\t\treturn id && ! ( isTempId( id ) && currentVariables[ id ]?.deleted );\n\t} );\n};\n","export type TVariable = {\n\ttype: string;\n\tlabel: string;\n\tvalue: string;\n\torder?: number;\n\tdeleted?: boolean;\n\tdeleted_at?: string;\n};\n\nexport type TVariablesList = Record< string, TVariable >;\n\nconst STORAGE_KEY = 'elementor-global-variables';\nconst STORAGE_WATERMARK_KEY = 'elementor-global-variables-watermark';\n\nexport const OP_RW = 'RW';\nconst OP_RO = 'RO';\n\nexport class Storage {\n\tstate: {\n\t\twatermark: number;\n\t\tvariables: TVariablesList;\n\t};\n\n\tnotifyChange() {\n\t\twindow.dispatchEvent( new Event( 'variables:updated' ) );\n\t}\n\n\tconstructor() {\n\t\tthis.state = {\n\t\t\twatermark: -1,\n\t\t\tvariables: {},\n\t\t};\n\t}\n\n\tload() {\n\t\tthis.state.watermark = parseInt( localStorage.getItem( STORAGE_WATERMARK_KEY ) || '-1' );\n\t\tthis.state.variables = JSON.parse( localStorage.getItem( STORAGE_KEY ) || '{}' ) as TVariablesList;\n\t\treturn this.state.variables;\n\t}\n\n\tfill( variables: TVariablesList, watermark: number ) {\n\t\tthis.state.variables = {};\n\t\tif ( variables && Object.keys( variables ).length ) {\n\t\t\tthis.state.variables = variables;\n\t\t}\n\n\t\tthis.state.watermark = watermark;\n\n\t\tlocalStorage.setItem( STORAGE_WATERMARK_KEY, this.state.watermark.toString() );\n\t\tlocalStorage.setItem( STORAGE_KEY, JSON.stringify( this.state.variables ) );\n\t\tthis.notifyChange();\n\t}\n\n\tadd( id: string, variable: TVariable ) {\n\t\tthis.load();\n\t\tthis.state.variables[ id ] = variable;\n\t\tlocalStorage.setItem( STORAGE_KEY, JSON.stringify( this.state.variables ) );\n\t\tthis.notifyChange();\n\t}\n\n\tupdate( id: string, variable: TVariable ) {\n\t\tthis.load();\n\t\tthis.state.variables[ id ] = variable;\n\t\tlocalStorage.setItem( STORAGE_KEY, JSON.stringify( this.state.variables ) );\n\t\tthis.notifyChange();\n\t}\n\n\twatermark( watermark: number ) {\n\t\tthis.state.watermark = watermark;\n\t\tlocalStorage.setItem( STORAGE_WATERMARK_KEY, this.state.watermark.toString() );\n\t}\n\n\twatermarkDiff( operation: string, newWatermark: number ) {\n\t\tconst diff = newWatermark - this.state.watermark;\n\n\t\tif ( OP_RW === operation ) {\n\t\t\treturn 1 !== diff;\n\t\t}\n\n\t\tif ( OP_RO === operation ) {\n\t\t\treturn 0 !== diff;\n\t\t}\n\n\t\treturn false;\n\t}\n}\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const fontVariablePropTypeUtil = createPropUtils( 'global-font-variable', z.string() );\n","import { type CanvasExtendedWindow, type EnqueueFont } from './types';\n\nexport const enqueueFont: EnqueueFont = ( fontFamily, context = 'preview' ) => {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.helpers?.enqueueFont?.( fontFamily, context ) ?? null;\n};\n","import { fontVariablePropTypeUtil } from './prop-types/font-variable-prop-type';\nimport { enqueueFont } from './sync/enqueue-font';\nimport { type StyleVariables, type Variable } from './types';\n\ntype VariablesChangeCallback = ( variables: StyleVariables ) => void;\ntype Variables = Record< string, Variable >;\n\nexport const createStyleVariablesRepository = () => {\n\tconst variables: StyleVariables = {};\n\tlet subscription: VariablesChangeCallback;\n\n\tconst subscribe = ( cb: VariablesChangeCallback ) => {\n\t\tsubscription = cb;\n\n\t\treturn () => {\n\t\t\tsubscription = () => {};\n\t\t};\n\t};\n\n\tconst notify = () => {\n\t\tif ( typeof subscription === 'function' ) {\n\t\t\tsubscription( { ...variables } );\n\t\t}\n\t};\n\n\tconst shouldUpdate = ( key: string, maybeUpdated: Variable ): boolean => {\n\t\tif ( ! ( key in variables ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( variables[ key ].label !== maybeUpdated.label ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( variables[ key ].value !== maybeUpdated.value ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( ! variables[ key ]?.deleted && maybeUpdated?.deleted ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( variables[ key ]?.deleted && ! maybeUpdated?.deleted ) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tconst applyUpdates = ( updatedVars: Variables ): boolean => {\n\t\tlet hasChanges = false;\n\n\t\tfor ( const [ key, variable ] of Object.entries( updatedVars ) ) {\n\t\t\tif ( shouldUpdate( key, variable ) ) {\n\t\t\t\tvariables[ key ] = variable;\n\n\t\t\t\tif ( variable.type === fontVariablePropTypeUtil.key ) {\n\t\t\t\t\tfontEnqueue( variable.value );\n\t\t\t\t}\n\n\t\t\t\thasChanges = true;\n\t\t\t}\n\t\t}\n\n\t\treturn hasChanges;\n\t};\n\n\tconst fontEnqueue = ( value: string ): void => {\n\t\tif ( ! value ) {\n\t\t\treturn;\n\t\t}\n\n\t\ttry {\n\t\t\tenqueueFont( value );\n\t\t} catch {\n\t\t\t// This prevents font enqueueing failures from breaking variable updates\n\t\t}\n\t};\n\n\tconst update = ( updatedVars: Variables ) => {\n\t\tif ( applyUpdates( updatedVars ) ) {\n\t\t\tnotify();\n\t\t}\n\t};\n\n\treturn {\n\t\tsubscribe,\n\t\tupdate,\n\t};\n};\n","import { createStyleVariablesRepository } from './create-style-variables-repository';\n\nexport const styleVariablesRepository = createStyleVariablesRepository();\n","import { type TVariable } from '../../storage';\n\nexport const resolveCssVariable = ( id: string, variable: TVariable ) => {\n\tlet name = id;\n\tlet fallbackValue = '';\n\n\tif ( variable ) {\n\t\tfallbackValue = variable.value;\n\t}\n\n\tif ( variable && ! variable.deleted ) {\n\t\tname = variable.label;\n\t}\n\n\tif ( ! name.trim() ) {\n\t\treturn null;\n\t}\n\n\tconst validCssVariableName = `--${ name }`;\n\n\tif ( ! fallbackValue.trim() ) {\n\t\treturn `var(${ validCssVariableName })`;\n\t}\n\n\treturn `var(${ validCssVariableName }, ${ fallbackValue })`;\n};\n","import { createTransformer } from '@elementor/editor-canvas';\n\nimport { service } from '../service';\nimport { type TVariable } from '../storage';\nimport { resolveCssVariable } from './utils/resolve-css-variable';\n\nexport const variableTransformer = createTransformer( ( idOrLabel: string ) => {\n\tconst variables = service.variables();\n\n\tconst targetVariable: TVariable | null = variables[ idOrLabel ] || service.findVariableByLabel( idOrLabel );\n\tif ( ! targetVariable ) {\n\t\treturn null;\n\t}\n\tconst id = service.findIdByLabel( targetVariable.label );\n\n\treturn resolveCssVariable( id, targetVariable );\n} );\n","import { createVariableTypeRegistry } from './create-variable-type-registry';\n\nexport const { registerVariableType, getVariableType, getVariableTypes, hasVariableType } =\n\tcreateVariableTypeRegistry();\n","import * as React from 'react';\nimport { ConfirmationDialog } from '@elementor/editor-ui';\nimport { Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype DeleteConfirmationDialogProps = {\n\topen: boolean;\n\tlabel: string;\n\tcloseDialog: () => void;\n\tonConfirm: () => void;\n};\n\nexport const DeleteConfirmationDialog = ( { open, label, closeDialog, onConfirm }: DeleteConfirmationDialogProps ) => {\n\treturn (\n\t\t<ConfirmationDialog open={ open } onClose={ closeDialog }>\n\t\t\t<ConfirmationDialog.Title>{ __( 'Delete this variable?', 'elementor' ) }</ConfirmationDialog.Title>\n\t\t\t<ConfirmationDialog.Content>\n\t\t\t\t<ConfirmationDialog.ContentText>\n\t\t\t\t\t{ __( 'All elements using', 'elementor' ) }\n\t\t\t\t\t&nbsp;\n\t\t\t\t\t<Typography variant=\"subtitle2\" component=\"span\" sx={ { lineBreak: 'anywhere' } }>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t&nbsp;\n\t\t\t\t\t{ __( 'will keep their current values, but the variable itself will be removed.', 'elementor' ) }\n\t\t\t\t</ConfirmationDialog.ContentText>\n\t\t\t</ConfirmationDialog.Content>\n\t\t\t<ConfirmationDialog.Actions onClose={ closeDialog } onConfirm={ onConfirm } />\n\t\t</ConfirmationDialog>\n\t);\n};\n","import * as React from 'react';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { usePermissions } from '../../hooks/use-permissions';\n\ntype Props = {\n\ticon?: React.ReactNode;\n\ttitle: string;\n\tmessage: string;\n\tonAdd?: () => void;\n\tchildren?: React.ReactNode;\n};\n\nexport const EmptyState = ( { icon, title, message, onAdd, children }: Props ) => {\n\tconst canAdd = usePermissions().canAdd();\n\tconst displayTitle = canAdd ? title : __( 'There are no variables', 'elementor' );\n\tconst displayMessage = canAdd\n\t\t? message\n\t\t: __( 'With your current role, you can only connect and detach variables.', 'elementor' );\n\n\treturn (\n\t\t<Content title={ displayTitle } message={ displayMessage } icon={ icon }>\n\t\t\t{ children ||\n\t\t\t\t( onAdd && (\n\t\t\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" onClick={ onAdd }>\n\t\t\t\t\t\t{ __( 'Create a variable', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t) ) }\n\t\t</Content>\n\t);\n};\n\ntype NoVariablesContentProps = {\n\ttitle: string;\n\tmessage: string;\n\ticon?: React.ReactNode;\n\tchildren?: React.ReactNode;\n};\n\nfunction Content( { title, message, icon, children }: NoVariablesContentProps ) {\n\treturn (\n\t\t<Stack\n\t\t\tgap={ 1 }\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"flex-start\"\n\t\t\theight=\"100%\"\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { p: 2.5, pt: 8, pb: 5.5 } }\n\t\t>\n\t\t\t{ icon }\n\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ title }\n\t\t\t</Typography>\n\n\t\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"180px\">\n\t\t\t\t{ message }\n\t\t\t</Typography>\n\n\t\t\t{ children }\n\t\t</Stack>\n\t);\n}\n","import { useCurrentUserCapabilities } from '@elementor/editor-current-user';\n\nexport const usePermissions = () => {\n\tconst { canUser, isAdmin } = useCurrentUserCapabilities();\n\n\treturn {\n\t\tcanAssign: () => canUser( 'edit_posts' ),\n\t\tcanUnlink: () => canUser( 'edit_posts' ),\n\t\tcanAdd: () => isAdmin,\n\t\tcanDelete: () => isAdmin,\n\t\tcanEdit: () => isAdmin,\n\t\tcanRestore: () => isAdmin,\n\t\tcanManageSettings: () => isAdmin,\n\t};\n};\n","import * as React from 'react';\nimport { Link, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype Props = {\n\tsearchValue: string;\n\tonClear?: () => void;\n\ticon?: React.ReactNode;\n};\n\nexport const NoSearchResults = ( { searchValue, onClear, icon }: Props ) => {\n\treturn (\n\t\t<Stack\n\t\t\tgap={ 1 }\n\t\t\talignItems=\"center\"\n\t\t\tjustifyContent=\"center\"\n\t\t\tp={ 2.5 }\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { pb: 3.5, pt: 8 } }\n\t\t>\n\t\t\t{ icon }\n\t\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t<br />\n\t\t\t\t&ldquo;{ searchValue }&rdquo;.\n\t\t\t</Typography>\n\t\t\t<Typography align=\"center\" variant=\"caption\" sx={ { display: 'flex', flexDirection: 'column' } }>\n\t\t\t\t{ __( 'Try something else.', 'elementor' ) }\n\t\t\t\t<Link color=\"text.secondary\" variant=\"caption\" component=\"button\" onClick={ onClear }>\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","import { useCallback, useState } from 'react';\n\nexport const useAutoEdit = () => {\n\tconst [ autoEditVariableId, setAutoEditVariableId ] = useState< string | undefined >( undefined );\n\n\tconst startAutoEdit = useCallback( ( variableId: string ) => {\n\t\tsetAutoEditVariableId( variableId );\n\t}, [] );\n\n\tconst handleAutoEditComplete = useCallback( () => {\n\t\tsetTimeout( () => {\n\t\t\tsetAutoEditVariableId( undefined );\n\t\t}, 100 );\n\t}, [] );\n\n\treturn {\n\t\tautoEditVariableId,\n\t\tstartAutoEdit,\n\t\thandleAutoEditComplete,\n\t};\n};\n","import { useCallback, useRef } from 'react';\n\nexport interface UseErrorNavigationReturn {\n\tcreateNavigationCallback: (\n\t\tids: string[],\n\t\tonNavigate: ( id: string ) => void,\n\t\tonComplete: () => void\n\t) => () => void;\n\tresetNavigation: () => void;\n}\n\nexport const useErrorNavigation = (): UseErrorNavigationReturn => {\n\tconst currentIndexRef = useRef( 0 );\n\n\tconst createNavigationCallback = useCallback(\n\t\t( ids: string[], onNavigate: ( id: string ) => void, onComplete: () => void ) => {\n\t\t\treturn () => {\n\t\t\t\tif ( ! ids?.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst currentIndex = currentIndexRef.current;\n\t\t\t\tconst currentId = ids[ currentIndex ];\n\n\t\t\t\tif ( currentId ) {\n\t\t\t\t\tonNavigate( currentId );\n\n\t\t\t\t\tconst nextIndex = currentIndex + 1;\n\t\t\t\t\tif ( nextIndex >= ids.length ) {\n\t\t\t\t\t\tonComplete();\n\t\t\t\t\t\tcurrentIndexRef.current = 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentIndexRef.current = nextIndex;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t},\n\t\t[]\n\t);\n\n\tconst resetNavigation = useCallback( () => {\n\t\tcurrentIndexRef.current = 0;\n\t}, [] );\n\n\treturn {\n\t\tcreateNavigationCallback,\n\t\tresetNavigation,\n\t};\n};\n","import { useCallback, useState } from 'react';\n\nimport { generateTempId } from '../../../batch-operations';\nimport { getVariables } from '../../../hooks/use-prop-variables';\nimport { service } from '../../../service';\nimport { type TVariablesList } from '../../../storage';\nimport { filterBySearch } from '../../../utils/filter-by-search';\nimport { applySelectionFilters, variablesToList } from '../../../utils/variables-to-list';\nimport { getVariableTypes } from '../../../variables-registry/variable-type-registry';\n\nexport const useVariablesManagerState = () => {\n\tconst [ variables, setVariables ] = useState( () => getVariables( false ) );\n\tconst [ deletedVariables, setDeletedVariables ] = useState< string[] >( [] );\n\tconst [ isSaveDisabled, setIsSaveDisabled ] = useState( false );\n\tconst [ isDirty, setIsDirty ] = useState( false );\n\tconst [ isSaving, setIsSaving ] = useState( false );\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst handleOnChange = useCallback(\n\t\t( newVariables: TVariablesList ) => {\n\t\t\tsetVariables( { ...variables, ...newVariables } );\n\t\t\tsetIsDirty( true );\n\t\t},\n\t\t[ variables ]\n\t);\n\n\tconst createVariable = useCallback( ( type: string, defaultName: string, defaultValue: string ) => {\n\t\tconst newId = generateTempId();\n\t\tconst newVariable = {\n\t\t\tid: newId,\n\t\t\tlabel: defaultName.trim(),\n\t\t\tvalue: defaultValue.trim(),\n\t\t\ttype,\n\t\t};\n\n\t\tsetVariables( ( prev ) => ( { ...prev, [ newId ]: newVariable } ) );\n\t\tsetIsDirty( true );\n\n\t\treturn newId;\n\t}, [] );\n\n\tconst handleDeleteVariable = useCallback( ( itemId: string ) => {\n\t\tsetDeletedVariables( ( prev ) => [ ...prev, itemId ] );\n\t\tsetVariables( ( prev ) => ( { ...prev, [ itemId ]: { ...prev[ itemId ], deleted: true } } ) );\n\t\tsetIsDirty( true );\n\t}, [] );\n\n\tconst handleSearch = ( searchTerm: string ) => {\n\t\tsetSearchValue( searchTerm );\n\t};\n\n\tconst handleSave = useCallback( async (): Promise< { success: boolean } > => {\n\t\tconst originalVariables = getVariables( false );\n\t\tsetIsSaving( true );\n\t\tconst result = await service.batchSave( originalVariables, variables );\n\n\t\tif ( result.success ) {\n\t\t\tawait service.load();\n\t\t\tconst updatedVariables = service.variables();\n\n\t\t\tsetVariables( updatedVariables );\n\t\t\tsetDeletedVariables( [] );\n\t\t\tsetIsDirty( false );\n\t\t}\n\n\t\treturn { success: result.success };\n\t}, [ variables ] );\n\n\tconst filteredVariables = useCallback( () => {\n\t\tconst list = variablesToList( variables ).filter( ( v ) => ! v.deleted );\n\t\tconst typeFiltered = applySelectionFilters( list, getVariableTypes() );\n\t\tconst searchFiltered = filterBySearch( typeFiltered, searchValue );\n\n\t\treturn Object.fromEntries( searchFiltered.map( ( { key, ...rest } ) => [ key, rest ] ) );\n\t}, [ variables, searchValue ] );\n\n\treturn {\n\t\tvariables: filteredVariables(),\n\t\tdeletedVariables,\n\t\tisDirty,\n\t\tisSaveDisabled,\n\t\thandleOnChange,\n\t\tcreateVariable,\n\t\thandleDeleteVariable,\n\t\thandleSave,\n\t\tisSaving,\n\t\thandleSearch,\n\t\tsearchValue,\n\t\tsetIsSaving,\n\t\tsetIsSaveDisabled,\n\t};\n};\n","import { useMemo } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type PropKey } from '@elementor/editor-props';\n\nimport { useVariableType } from '../context/variable-type-context';\nimport { service } from '../service';\nimport { type NormalizedVariable, type Variable } from '../types';\nimport { filterBySearch } from '../utils/filter-by-search';\nimport { toNormalizedVariable, variablesToList } from '../utils/variables-to-list';\nimport { getVariableType, getVariableTypes } from '../variables-registry/variable-type-registry';\n\nexport const getVariables = ( includeDeleted = true ) => {\n\tconst variables = service.variables();\n\n\tif ( includeDeleted ) {\n\t\treturn variables;\n\t}\n\n\treturn Object.fromEntries( Object.entries( variables ).filter( ( [ , variable ] ) => ! variable.deleted ) );\n};\n\nexport const useVariable = ( key: string ) => {\n\tconst variables = getVariables();\n\n\tif ( ! variables?.[ key ] ) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\t...variables[ key ],\n\t\tkey,\n\t};\n};\n\nexport const useFilteredVariables = ( searchValue: string, propTypeKey: string ) => {\n\tconst baseVariables = usePropVariables( propTypeKey );\n\n\tconst typeFilteredVariables = useVariableSelectionFilter( baseVariables );\n\tconst searchFilteredVariables = filterBySearch( typeFilteredVariables, searchValue );\n\tconst sortedVariables = searchFilteredVariables.sort( ( a, b ) => {\n\t\tconst orderA = a.order ?? Number.MAX_SAFE_INTEGER;\n\t\tconst orderB = b.order ?? Number.MAX_SAFE_INTEGER;\n\t\treturn orderA - orderB;\n\t} );\n\n\treturn {\n\t\tlist: sortedVariables,\n\t\thasMatches: searchFilteredVariables.length > 0,\n\t\tisSourceNotEmpty: typeFilteredVariables.length > 0,\n\t\thasNoCompatibleVariables: baseVariables.length > 0 && typeFilteredVariables.length === 0,\n\t};\n};\n\nconst useVariableSelectionFilter = ( variables: NormalizedVariable[] ): NormalizedVariable[] => {\n\tconst { selectionFilter } = useVariableType();\n\tconst { propType } = useBoundProp();\n\n\treturn selectionFilter ? selectionFilter( variables, propType ) : variables;\n};\n\nconst usePropVariables = ( propKey: PropKey ): NormalizedVariable[] => {\n\treturn useMemo( () => normalizeVariables( propKey ), [ propKey ] );\n};\n\nconst getMatchingTypes = ( propKey: string ): string[] => {\n\tconst matchingTypes: string[] = [];\n\tconst allTypes = getVariableTypes();\n\tconst variableType = getVariableType( propKey );\n\n\tObject.entries( allTypes ).forEach( ( [ key, typeOptions ] ) => {\n\t\tif ( variableType.variableType === typeOptions.variableType ) {\n\t\t\tmatchingTypes.push( key );\n\t\t}\n\t} );\n\n\treturn matchingTypes;\n};\n\nconst normalizeVariables = ( propKey: string ): NormalizedVariable[] => {\n\tconst variables = getVariables( false );\n\tconst matchingTypes = getMatchingTypes( propKey );\n\n\treturn variablesToList( variables )\n\t\t.filter( ( variable ) => matchingTypes.includes( variable.type ) )\n\t\t.map( toNormalizedVariable );\n};\n\nconst extractId = ( { id }: { id: string } ): string => id;\n\nexport const createVariable = ( newVariable: Variable ): Promise< string > => {\n\treturn service.create( newVariable ).then( extractId );\n};\n\nexport const updateVariable = (\n\tupdateId: string,\n\t{ value, label, type }: { value: string; label: string; type?: string }\n): Promise< string > => {\n\treturn service.update( updateId, { value, label, type } ).then( extractId );\n};\n\nexport const deleteVariable = ( deleteId: string ): Promise< string > => {\n\treturn service.delete( deleteId ).then( extractId );\n};\n\nexport const restoreVariable = (\n\trestoreId: string,\n\tlabel?: string,\n\tvalue?: string,\n\ttype?: string\n): Promise< string > => {\n\treturn service.restore( restoreId, label, value, type ).then( extractId );\n};\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\nimport { type PropTypeKey } from '@elementor/editor-props';\n\nimport { getVariableType } from '../variables-registry/variable-type-registry';\n\ntype Props = PropsWithChildren< { propTypeKey: PropTypeKey } >;\n\nconst VariableTypeContext = createContext< PropTypeKey | null >( null );\n\nexport function VariableTypeProvider( { children, propTypeKey }: Props ) {\n\treturn <VariableTypeContext.Provider value={ propTypeKey }>{ children }</VariableTypeContext.Provider>;\n}\n\nexport function useVariableType() {\n\tconst context = useContext( VariableTypeContext );\n\n\tif ( context === null ) {\n\t\tthrow new Error( 'useVariableType must be used within a VariableTypeProvider' );\n\t}\n\n\treturn getVariableType( context );\n}\n","export function filterBySearch< T extends { label: string } >( variables: T[], searchValue: string ): T[] {\n\tconst lowerSearchValue = searchValue.toLowerCase();\n\n\treturn variables.filter( ( variable ) => variable.label.toLowerCase().includes( lowerSearchValue ) );\n}\n","import { type TVariable, type TVariablesList } from '../storage';\nimport { type NormalizedVariable } from '../types';\nimport { type VariableTypesMap } from '../variables-registry/create-variable-type-registry';\n\nexport type VariableWithKey = TVariable & { key: string };\n\nexport const variablesToList = ( variables: TVariablesList ): VariableWithKey[] => {\n\treturn Object.entries( variables ).map( ( [ key, variable ] ) => ( { key, ...variable } ) );\n};\n\nexport const toNormalizedVariable = ( { key, label, value, order }: VariableWithKey ): NormalizedVariable => ( {\n\tkey,\n\tlabel,\n\tvalue,\n\torder,\n} );\n\ntype VariableWithType = NormalizedVariable & { type: string };\n\nexport const applySelectionFilters = (\n\tvariables: VariableWithKey[],\n\tvariableTypes: VariableTypesMap\n): VariableWithType[] => {\n\tconst grouped: Record< string, VariableWithKey[] > = {};\n\tvariables.forEach( ( item ) => ( grouped[ item.type ] ??= [] ).push( item ) );\n\n\treturn Object.entries( grouped ).flatMap( ( [ type, vars ] ) => {\n\t\tconst filter = variableTypes[ type ]?.selectionFilter;\n\t\tconst normalized = vars.map( toNormalizedVariable );\n\n\t\treturn ( filter?.( normalized ) ?? normalized ).map( ( v ) => ( { ...v, type } ) );\n\t} );\n};\n","import * as React from 'react';\nimport { createElement, useMemo, useRef, useState } from 'react';\nimport { PromotionChip, PromotionPopover } from '@elementor/editor-ui';\nimport { PlusIcon } from '@elementor/icons';\nimport { bindMenu, bindTrigger, IconButton, Menu, MenuItem, type PopupState, Typography } from '@elementor/ui';\nimport { capitalize } from '@elementor/utils';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport { useQuotaPermissions } from '../../hooks/use-quota-permissions';\nimport { type TVariablesList } from '../../storage';\nimport { trackVariablesManagerEvent } from '../../utils/tracking';\nimport { getVariableTypes } from '../../variables-registry/variable-type-registry';\n\nexport const SIZE = 'tiny';\n\ntype MenuOptionConfig = {\n\tkey: string;\n\tpropTypeKey: string;\n\tvariableType: string;\n\tdefaultValue: string;\n\ticon: React.ElementType;\n};\n\ntype VariableManagerCreateMenuProps = {\n\tvariables: TVariablesList;\n\tonCreate: ( type: string, defaultName: string, defaultValue: string ) => void;\n\tdisabled?: boolean;\n\tmenuState: PopupState;\n};\n\nexport const VariableManagerCreateMenu = ( {\n\tvariables,\n\tonCreate,\n\tdisabled,\n\tmenuState,\n}: VariableManagerCreateMenuProps ) => {\n\tconst buttonRef = useRef< HTMLButtonElement >( null );\n\n\tconst variableTypes = getVariableTypes();\n\n\tconst menuOptionConfigs = useMemo(\n\t\t() =>\n\t\t\tObject.entries( variableTypes )\n\t\t\t\t.filter( ( [ , variable ] ) => !! variable.defaultValue )\n\t\t\t\t.map( ( [ key, variable ] ) => ( {\n\t\t\t\t\tkey,\n\t\t\t\t\tpropTypeKey: variable.propTypeUtil.key,\n\t\t\t\t\tvariableType: variable.variableType,\n\t\t\t\t\tdefaultValue: variable.defaultValue || '',\n\t\t\t\t\ticon: variable.icon,\n\t\t\t\t} ) ),\n\t\t[ variableTypes ]\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<IconButton\n\t\t\t\t{ ...bindTrigger( menuState ) }\n\t\t\t\tref={ buttonRef }\n\t\t\t\tdisabled={ disabled }\n\t\t\t\tsize={ SIZE }\n\t\t\t\taria-label={ __( 'Add variable', 'elementor' ) }\n\t\t\t>\n\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\n\t\t\t<Menu\n\t\t\t\tdisablePortal\n\t\t\t\tMenuListProps={ {\n\t\t\t\t\tdense: true,\n\t\t\t\t} }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\televation: 6,\n\t\t\t\t} }\n\t\t\t\t{ ...bindMenu( menuState ) }\n\t\t\t\tanchorEl={ buttonRef.current }\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\tdata-testid=\"variable-manager-create-menu\"\n\t\t\t>\n\t\t\t\t{ menuOptionConfigs.map( ( config ) => (\n\t\t\t\t\t<MenuOption\n\t\t\t\t\t\tkey={ config.key }\n\t\t\t\t\t\tconfig={ config }\n\t\t\t\t\t\tvariables={ variables }\n\t\t\t\t\t\tonCreate={ onCreate }\n\t\t\t\t\t\tonClose={ menuState.close }\n\t\t\t\t\t/>\n\t\t\t\t) ) }\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n\nconst MenuOption = ( {\n\tconfig,\n\tvariables,\n\tonCreate,\n\tonClose,\n}: {\n\tconfig: MenuOptionConfig;\n\tvariables: TVariablesList;\n\tonCreate: VariableManagerCreateMenuProps[ 'onCreate' ];\n\tonClose: () => void;\n} ) => {\n\tconst [ isPopoverOpen, setIsPopoverOpen ] = useState( false );\n\tconst userQuotaPermissions = useQuotaPermissions( config.propTypeKey );\n\n\tconst displayName = capitalize( config.variableType );\n\tconst isDisabled = ! userQuotaPermissions.canAdd();\n\n\tconst handleClick = () => {\n\t\tif ( isDisabled ) {\n\t\t\tif ( ! isPopoverOpen ) {\n\t\t\t\tsetIsPopoverOpen( true );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst defaultName = getDefaultName( variables, config.key, config.variableType );\n\n\t\tonCreate( config.key, defaultName, config.defaultValue );\n\t\ttrackVariablesManagerEvent( { action: 'add', varType: config.variableType } );\n\t\tonClose();\n\t};\n\n\tconst title = sprintf(\n\t\t/* translators: %s: Variable Type. */\n\t\t__( '%s variables', 'elementor' ),\n\t\tcapitalize( config.variableType )\n\t);\n\n\tconst content = sprintf(\n\t\t/* translators: %s: Variable Type. */\n\t\t__( 'Upgrade to continue creating and editing %s variables.', 'elementor' ),\n\t\tconfig.variableType\n\t);\n\n\treturn (\n\t\t<MenuItem onClick={ handleClick } sx={ { gap: 1.5, cursor: 'pointer' } }>\n\t\t\t{ createElement( config.icon, { fontSize: SIZE, color: isDisabled ? 'disabled' : 'action' } ) }\n\t\t\t<Typography variant=\"caption\" color={ isDisabled ? 'text.disabled' : 'text.primary' }>\n\t\t\t\t{ displayName }\n\t\t\t</Typography>\n\t\t\t{ isDisabled && (\n\t\t\t\t<PromotionPopover\n\t\t\t\t\topen={ isPopoverOpen }\n\t\t\t\t\ttitle={ title }\n\t\t\t\t\tcontent={ content }\n\t\t\t\t\tctaText={ __( 'Upgrade now', 'elementor' ) }\n\t\t\t\t\tctaUrl={ `https://go.elementor.com/go-pro-manager-${ config.variableType }-variable/` }\n\t\t\t\t\tonClose={ () => {\n\t\t\t\t\t\tsetIsPopoverOpen( false );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<PromotionChip />\n\t\t\t\t</PromotionPopover>\n\t\t\t) }\n\t\t</MenuItem>\n\t);\n};\n\nconst getDefaultName = ( variables: TVariablesList, type: string, baseName: string ) => {\n\tconst existingNames = Object.values( variables )\n\t\t.filter( ( variable ) => variable.type === type )\n\t\t.map( ( variable ) => variable.label );\n\n\tlet counter = 1;\n\tlet name = `${ baseName }-${ counter }`;\n\n\twhile ( existingNames.includes( name ) ) {\n\t\tcounter++;\n\t\tname = `${ baseName }-${ counter }`;\n\t}\n\n\treturn name;\n};\n","import { type CanvasExtendedWindow } from './types';\n\nexport function getLicenseInfo() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn {\n\t\thasPro: !! extendedWindow.elementorPro,\n\t};\n}\n","import { getLicenseInfo } from '../sync/license-info';\n\ndeclare global {\n\tinterface Window {\n\t\tElementorVariablesQuotaConfig: Record< string, number >;\n\t}\n}\n\nexport const useQuotaPermissions = ( variableType: string ) => {\n\tconst quotaConfig = window.ElementorVariablesQuotaConfig || {};\n\tconst limit = quotaConfig[ variableType ] || 0;\n\tconst hasQuota = limit > 0;\n\n\treturn {\n\t\tcanAdd: () => hasQuota || getLicenseInfo().hasPro,\n\t\tcanEdit: () => hasQuota || getLicenseInfo().hasPro,\n\t};\n};\n","import * as React from 'react';\nimport { createElement, useEffect, useRef } from 'react';\nimport { EllipsisWithTooltip } from '@elementor/editor-ui';\nimport { GripVerticalIcon } from '@elementor/icons';\nimport {\n\tIconButton,\n\tStack,\n\ttype SxProps,\n\tTable,\n\tTableBody,\n\tTableContainer,\n\tTableHead,\n\tTableRow,\n\tUnstableSortableItem,\n\ttype UnstableSortableItemRenderProps,\n\tUnstableSortableProvider,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type TVariablesList } from '../../storage';\nimport { getVariableType } from '../../variables-registry/variable-type-registry';\nimport { LabelField } from '../fields/label-field';\nimport { VariableEditMenu, type VariableManagerMenuAction } from './ui/variable-edit-menu';\nimport { VariableTableCell } from './ui/variable-table-cell';\nimport { VariableEditableCell } from './variable-editable-cell';\n\ntype Props = {\n\tmenuActions: VariableManagerMenuAction[];\n\tvariables: TVariablesList;\n\tonChange: ( variables: TVariablesList ) => void;\n\tautoEditVariableId?: string;\n\tonAutoEditComplete?: () => void;\n\tonFieldError?: ( hasError: boolean ) => void;\n};\n\ntype Row = ReturnType< typeof getVariableType > & {\n\tid: string;\n\ttype: string;\n\tname: string;\n\tvalue: string;\n};\n\nexport const VariablesManagerTable = ( {\n\tmenuActions,\n\tvariables,\n\tonChange: handleOnChange,\n\tautoEditVariableId,\n\tonAutoEditComplete,\n\tonFieldError,\n}: Props ) => {\n\tconst tableContainerRef = useRef< HTMLDivElement >( null );\n\tconst variableRowRefs = useRef< Map< string, HTMLTableRowElement > >( new Map() );\n\n\tuseEffect( () => {\n\t\tif ( autoEditVariableId && tableContainerRef.current ) {\n\t\t\tconst rowElement = variableRowRefs.current.get( autoEditVariableId );\n\t\t\tif ( rowElement ) {\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\trowElement.scrollIntoView( {\n\t\t\t\t\t\tbehavior: 'smooth',\n\t\t\t\t\t\tblock: 'center',\n\t\t\t\t\t\tinline: 'nearest',\n\t\t\t\t\t} );\n\t\t\t\t}, 100 );\n\t\t\t}\n\t\t}\n\t}, [ autoEditVariableId ] );\n\n\tconst handleRowRef = ( id: string ) => ( ref: HTMLTableRowElement | null ) => {\n\t\tif ( ref ) {\n\t\t\tvariableRowRefs.current.set( id, ref );\n\t\t} else {\n\t\t\tvariableRowRefs.current.delete( id );\n\t\t}\n\t};\n\n\tconst ids = Object.keys( variables ).sort( sortVariablesOrder( variables ) );\n\tconst rows = ids\n\t\t.map( ( id ) => {\n\t\t\tconst variable = variables[ id ];\n\t\t\tconst variableType = getVariableType( variable.type );\n\n\t\t\tif ( ! variableType ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttype: variable.type,\n\t\t\t\tname: variable.label,\n\t\t\t\tvalue: variable.value,\n\t\t\t\t...variableType,\n\t\t\t};\n\t\t} )\n\t\t.filter( Boolean ) as Row[];\n\n\tconst tableSX: SxProps = {\n\t\tminWidth: 250,\n\t\ttableLayout: 'fixed',\n\t};\n\n\tconst handleReorder = ( newIds: string[] ) => {\n\t\tconst updatedVariables = { ...variables };\n\n\t\tnewIds.forEach( ( id, index ) => {\n\t\t\tconst current = updatedVariables[ id ];\n\n\t\t\tif ( ! current ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tupdatedVariables[ id ] = Object.assign( {}, current, { order: index + 1 } );\n\t\t} );\n\n\t\thandleOnChange( updatedVariables );\n\t};\n\n\treturn (\n\t\t<TableContainer ref={ tableContainerRef } sx={ { overflow: 'initial' } }>\n\t\t\t<Table sx={ tableSX } aria-label=\"Variables manager list with drag and drop reordering\" stickyHeader>\n\t\t\t\t<TableHead>\n\t\t\t\t\t<TableRow>\n\t\t\t\t\t\t<VariableTableCell isHeader noPadding width={ 10 } maxWidth={ 10 } />\n\t\t\t\t\t\t<VariableTableCell isHeader>{ __( 'Name', 'elementor' ) }</VariableTableCell>\n\t\t\t\t\t\t<VariableTableCell isHeader>{ __( 'Value', 'elementor' ) }</VariableTableCell>\n\t\t\t\t\t\t<VariableTableCell isHeader noPadding width={ 16 } maxWidth={ 16 } />\n\t\t\t\t\t</TableRow>\n\t\t\t\t</TableHead>\n\t\t\t\t<TableBody>\n\t\t\t\t\t<UnstableSortableProvider\n\t\t\t\t\t\tvalue={ ids }\n\t\t\t\t\t\tonChange={ handleReorder }\n\t\t\t\t\t\tvariant=\"static\"\n\t\t\t\t\t\trestrictAxis\n\t\t\t\t\t\tdragOverlay={ ( { children: dragOverlayChildren, ...dragOverlayProps } ) => (\n\t\t\t\t\t\t\t<Table sx={ tableSX } { ...dragOverlayProps }>\n\t\t\t\t\t\t\t\t<TableBody>{ dragOverlayChildren }</TableBody>\n\t\t\t\t\t\t\t</Table>\n\t\t\t\t\t\t) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ rows.map( ( row ) => (\n\t\t\t\t\t\t\t<UnstableSortableItem\n\t\t\t\t\t\t\t\tkey={ row.id }\n\t\t\t\t\t\t\t\tid={ row.id }\n\t\t\t\t\t\t\t\trender={ ( {\n\t\t\t\t\t\t\t\t\titemProps,\n\t\t\t\t\t\t\t\t\tshowDropIndication,\n\t\t\t\t\t\t\t\t\ttriggerProps,\n\t\t\t\t\t\t\t\t\titemStyle,\n\t\t\t\t\t\t\t\t\ttriggerStyle,\n\t\t\t\t\t\t\t\t\tisDragged,\n\t\t\t\t\t\t\t\t\tdropPosition,\n\t\t\t\t\t\t\t\t\tsetTriggerRef,\n\t\t\t\t\t\t\t\t\tisSorting,\n\t\t\t\t\t\t\t\t}: UnstableSortableItemRenderProps ) => {\n\t\t\t\t\t\t\t\t\tconst showIndicationBefore = showDropIndication && dropPosition === 'before';\n\t\t\t\t\t\t\t\t\tconst showIndicationAfter = showDropIndication && dropPosition === 'after';\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<TableRow\n\t\t\t\t\t\t\t\t\t\t\t{ ...itemProps }\n\t\t\t\t\t\t\t\t\t\t\tref={ handleRowRef( 'table-ref-' + row.id ) }\n\t\t\t\t\t\t\t\t\t\t\tselected={ isDragged }\n\t\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\t\t...( showIndicationBefore && {\n\t\t\t\t\t\t\t\t\t\t\t\t\t'& td, & th': {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderTop: '2px solid',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderTopColor: 'primary.main',\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t\t\t\t\t\t...( showIndicationAfter && {\n\t\t\t\t\t\t\t\t\t\t\t\t\t'& td, & th': {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderBottom: '2px solid',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tborderBottomColor: 'primary.main',\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t\t\t\t\t\t'& [role=\"toolbar\"], & [draggable]': {\n\t\t\t\t\t\t\t\t\t\t\t\t\topacity: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t'&:hover, &:focus-within': {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbackgroundColor: 'action.hover',\n\t\t\t\t\t\t\t\t\t\t\t\t\t'& [role=\"toolbar\"], & [draggable]': {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\topacity: 1,\n\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\tstyle={ { ...itemStyle, ...triggerStyle } }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<VariableTableCell noPadding width={ 10 } maxWidth={ 10 }>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tref={ setTriggerRef }\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ ...triggerProps }\n\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={ isSorting }\n\t\t\t\t\t\t\t\t\t\t\t\t\tdraggable\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<GripVerticalIcon fontSize=\"inherit\" />\n\t\t\t\t\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t\t\t\t\t</VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t<VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<VariableEditableCell\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitialValue={ row.name }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ( value !== row.name ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOnChange( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...variables,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ row.id ]: { ...variables[ row.id ], label: value },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\tprefixElement={ createElement( row.icon, { fontSize: 'inherit' } ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\teditableElement={ ( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} ) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<LabelField\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tid={ 'variable-label-' + row.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ onChange }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonErrorChange={ ( errorMsg ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange?.( errorMsg );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonFieldError?.( !! errorMsg );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror={ error }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tfocusOnShow\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tselectOnShow={ autoEditVariableId === row.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tshowWarningInfotip={ true }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariables={ variables }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t\t\t\t\t\t\tautoEdit={ autoEditVariableId === row.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonRowRef={ handleRowRef( row.id ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonAutoEditComplete={\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tautoEditVariableId === row.id ? onAutoEditComplete : undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tfieldType=\"label\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={ row.name }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ { border: '4px solid transparent' } }\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ row.name }\n\t\t\t\t\t\t\t\t\t\t\t\t\t</EllipsisWithTooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t</VariableEditableCell>\n\t\t\t\t\t\t\t\t\t\t\t</VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t<VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t\t<VariableEditableCell\n\t\t\t\t\t\t\t\t\t\t\t\t\tinitialValue={ row.value }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonChange={ ( value ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ( value !== row.value ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOnChange( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...variables,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ row.id ]: { ...variables[ row.id ], value },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\teditableElement={ ( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t\t\t\t\t\t} ) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\trow.valueField?.( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tref: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcurrent: variableRowRefs.current.get(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'table-ref-' + row.id\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t) as HTMLElement,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonChange,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonPropTypeKeyChange: ( type ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleOnChange( {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...variables,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t[ row.id ]: { ...variables[ row.id ], type },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpropTypeKey: row.type,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange: ( errorMsg ) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonValidationChange?.( errorMsg );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonFieldError?.( !! errorMsg );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} ) ?? <></>\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonRowRef={ handleRowRef( row.id ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\tgap={ 0.25 }\n\t\t\t\t\t\t\t\t\t\t\t\t\tfieldType=\"value\"\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ row.startIcon && row.startIcon( { value: row.value } ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle={ row.value }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tborder: '4px solid transparent',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlineHeight: '1',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpt: 0.25,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ row.value }\n\t\t\t\t\t\t\t\t\t\t\t\t\t</EllipsisWithTooltip>\n\t\t\t\t\t\t\t\t\t\t\t\t</VariableEditableCell>\n\t\t\t\t\t\t\t\t\t\t\t</VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t\t<VariableTableCell\n\t\t\t\t\t\t\t\t\t\t\t\talign=\"right\"\n\t\t\t\t\t\t\t\t\t\t\t\tnoPadding\n\t\t\t\t\t\t\t\t\t\t\t\twidth={ 16 }\n\t\t\t\t\t\t\t\t\t\t\t\tmaxWidth={ 16 }\n\t\t\t\t\t\t\t\t\t\t\t\tsx={ { paddingInlineEnd: 1 } }\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<Stack role=\"toolbar\" direction=\"row\" justifyContent=\"flex-end\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<VariableEditMenu\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmenuActions={ menuActions }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdisabled={ isSorting }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\titemId={ row.id }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t\t\t\t</VariableTableCell>\n\t\t\t\t\t\t\t\t\t\t</TableRow>\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/>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</UnstableSortableProvider>\n\t\t\t\t</TableBody>\n\t\t\t</Table>\n\t\t</TableContainer>\n\t);\n};\nfunction sortVariablesOrder( variables: TVariablesList ): ( a: string, b: string ) => number {\n\treturn ( a, b ) => {\n\t\tconst orderA = variables[ a ]?.order ?? Number.MAX_SAFE_INTEGER;\n\t\tconst orderB = variables[ b ]?.order ?? Number.MAX_SAFE_INTEGER;\n\t\treturn orderA - orderB;\n\t};\n}\n","import * as React from 'react';\nimport { type KeyboardEvent, useRef, useState } from 'react';\nimport { WarningInfotip } from '@elementor/editor-ui';\nimport { TextField, type TextFieldProps } from '@elementor/ui';\n\nimport { type TVariablesList } from '../../storage';\nimport { labelHint, validateLabel, VARIABLE_LABEL_MAX_LENGTH } from '../../utils/validations';\nfunction isLabelEqual( a: string, b: string ) {\n\treturn a.trim().toLowerCase() === b.trim().toLowerCase();\n}\n\ntype LabelErrorProps = {\n\tvalue: string;\n\tmessage: string;\n};\n\nexport const useLabelError = ( initialError?: LabelErrorProps ) => {\n\tconst [ error, setError ] = useState< LabelErrorProps >( initialError ?? { value: '', message: '' } );\n\n\treturn {\n\t\tlabelFieldError: error,\n\t\tsetLabelFieldError: setError,\n\t};\n};\n\nexport type LabelFieldProps = {\n\tvalue: string;\n\terror?: LabelErrorProps;\n\tonChange: ( value: string ) => void;\n\tid?: string;\n\tonErrorChange?: ( errorMsg: string ) => void;\n\tsize?: TextFieldProps[ 'size' ];\n\tfocusOnShow?: boolean;\n\tselectOnShow?: boolean;\n\tshowWarningInfotip?: boolean;\n\tvariables?: TVariablesList;\n\tonKeyDown?: ( event: KeyboardEvent< HTMLInputElement > ) => void;\n};\n\nexport const LabelField = ( {\n\tvalue,\n\terror,\n\tonChange,\n\tid,\n\tonErrorChange,\n\tsize = 'tiny',\n\tfocusOnShow = false,\n\tselectOnShow = false,\n\tshowWarningInfotip = false,\n\tvariables,\n\tonKeyDown,\n}: LabelFieldProps ) => {\n\tconst [ label, setLabel ] = useState( value );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\n\tconst fieldRef = useRef< HTMLElement >( null );\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetLabel( newValue );\n\n\t\tconst errorMsg = validateLabel( newValue, variables );\n\n\t\tsetErrorMessage( errorMsg );\n\t\tonErrorChange?.( errorMsg );\n\n\t\tonChange( isLabelEqual( newValue, error?.value ?? '' ) || errorMsg ? '' : newValue );\n\t};\n\n\tlet errorMsg = errorMessage;\n\tif ( isLabelEqual( label, error?.value ?? '' ) && error?.message ) {\n\t\terrorMsg = error.message;\n\t}\n\n\tconst hintMsg = ! errorMsg ? labelHint( label ) : '';\n\n\tconst textField = (\n\t\t<TextField\n\t\t\tref={ fieldRef }\n\t\t\tid={ id }\n\t\t\tsize={ size }\n\t\t\tfullWidth\n\t\t\tvalue={ label }\n\t\t\terror={ !! errorMsg }\n\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\tinputProps={ {\n\t\t\t\tmaxLength: VARIABLE_LABEL_MAX_LENGTH,\n\t\t\t\t...( selectOnShow && { onFocus: ( e: React.FocusEvent< HTMLInputElement > ) => e.target.select() } ),\n\t\t\t\t'aria-label': 'Name',\n\t\t\t\tonKeyDown,\n\t\t\t} }\n\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\tautoFocus={ focusOnShow }\n\t\t/>\n\t);\n\n\tif ( showWarningInfotip ) {\n\t\tconst tooltipWidth = Math.max( 240, fieldRef.current?.getBoundingClientRect().width ?? 240 );\n\n\t\treturn (\n\t\t\t<WarningInfotip\n\t\t\t\topen={ Boolean( errorMsg || hintMsg ) }\n\t\t\t\ttext={ errorMsg || hintMsg }\n\t\t\t\tplacement=\"bottom-start\"\n\t\t\t\twidth={ tooltipWidth }\n\t\t\t\toffset={ [ 0, -15 ] }\n\t\t\t\t{ ...( hintMsg && { hasError: false } ) }\n\t\t\t>\n\t\t\t\t{ textField }\n\t\t\t</WarningInfotip>\n\t\t);\n\t}\n\n\treturn textField;\n};\n","import * as React from 'react';\nimport { createElement } from 'react';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport { bindMenu, bindTrigger, IconButton, Menu, MenuItem, type SvgIconProps, usePopupState } from '@elementor/ui';\n\nexport type VariableManagerMenuAction = {\n\tname: string;\n\ticon: React.ForwardRefExoticComponent< Omit< SvgIconProps, 'ref' > & React.RefAttributes< SVGSVGElement > >;\n\tcolor: string;\n\tonClick: ( id: string ) => void;\n};\n\ntype VariableEditMenuProps = {\n\tmenuActions: VariableManagerMenuAction[];\n\tdisabled?: boolean;\n\titemId: string;\n};\n\nexport const VariableEditMenu = ( { menuActions, disabled, itemId }: VariableEditMenuProps ) => {\n\tconst menuState = usePopupState( {\n\t\tvariant: 'popover',\n\t} );\n\n\treturn (\n\t\t<>\n\t\t\t<IconButton { ...bindTrigger( menuState ) } disabled={ disabled } size=\"tiny\">\n\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t</IconButton>\n\n\t\t\t<Menu\n\t\t\t\tdisablePortal\n\t\t\t\tMenuListProps={ {\n\t\t\t\t\tdense: true,\n\t\t\t\t} }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\televation: 6,\n\t\t\t\t} }\n\t\t\t\t{ ...bindMenu( menuState ) }\n\t\t\t\tanchorEl={ menuState.anchorEl }\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\topen={ menuState.isOpen }\n\t\t\t\tonClose={ menuState.close }\n\t\t\t>\n\t\t\t\t{ menuActions.map( ( action ) => (\n\t\t\t\t\t<MenuItem\n\t\t\t\t\t\tkey={ action.name }\n\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\taction.onClick?.( itemId );\n\t\t\t\t\t\t\tmenuState.close();\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\tcolor: action.color,\n\t\t\t\t\t\t\tgap: 1,\n\t\t\t\t\t\t} }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ action.icon &&\n\t\t\t\t\t\t\tcreateElement( action.icon, {\n\t\t\t\t\t\t\t\tfontSize: 'inherit',\n\t\t\t\t\t\t\t} ) }{ ' ' }\n\t\t\t\t\t\t{ action.name }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Menu>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type SxProps, TableCell } from '@elementor/ui';\n\ntype VariableTableCellProps = {\n\tchildren?: React.ReactNode;\n\tisHeader?: boolean;\n\twidth?: number;\n\tmaxWidth?: number;\n\talign?: 'left' | 'right' | 'center';\n\tnoPadding?: boolean;\n\tsx?: SxProps;\n};\n\nexport const VariableTableCell = ( {\n\tchildren,\n\tisHeader,\n\twidth,\n\tmaxWidth,\n\talign,\n\tnoPadding,\n\tsx,\n}: VariableTableCellProps ) => {\n\tconst baseSx: SxProps = {\n\t\tmaxWidth: maxWidth ?? 150,\n\t\tcursor: 'initial',\n\t\ttypography: 'caption',\n\t\t...( isHeader && { color: 'text.primary', fontWeight: 'bold' } ),\n\t\t...( isHeader && ! noPadding && { padding: '10px 16px' } ),\n\t\t...( width && { width } ),\n\t\t...sx,\n\t};\n\n\treturn (\n\t\t<TableCell size=\"small\" padding={ noPadding ? 'none' : undefined } align={ align } sx={ baseSx }>\n\t\t\t{ children }\n\t\t</TableCell>\n\t);\n};\n","import * as React from 'react';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { ClickAwayListener, Stack } from '@elementor/ui';\n\nimport { type ValueFieldProps } from '../../variables-registry/create-variable-type-registry';\nimport { useLabelError } from '../fields/label-field';\n\ntype VariableEditableCellProps = {\n\tinitialValue: string;\n\tchildren: React.ReactNode;\n\teditableElement: ( { value, onChange, onValidationChange, error }: ValueFieldProps ) => JSX.Element;\n\tonChange: ( newValue: string ) => void;\n\tprefixElement?: React.ReactNode;\n\tautoEdit?: boolean;\n\tonRowRef?: ( ref: HTMLTableRowElement | null ) => void;\n\tonAutoEditComplete?: () => void;\n\tgap?: number;\n\tfieldType?: 'label' | 'value';\n};\n\nexport const VariableEditableCell = React.memo(\n\t( {\n\t\tinitialValue,\n\t\tchildren,\n\t\teditableElement,\n\t\tonChange,\n\t\tprefixElement,\n\t\tautoEdit = false,\n\t\tonRowRef,\n\t\tonAutoEditComplete,\n\t\tgap = 1,\n\t\tfieldType,\n\t}: VariableEditableCellProps ) => {\n\t\tconst [ value, setValue ] = useState( initialValue );\n\t\tconst [ isEditing, setIsEditing ] = useState( false );\n\n\t\tconst { labelFieldError, setLabelFieldError } = useLabelError();\n\t\tconst [ valueFieldError, setValueFieldError ] = useState( '' );\n\n\t\tconst rowRef = useRef< HTMLTableRowElement >( null );\n\n\t\tconst handleSave = useCallback( () => {\n\t\t\tconst hasError =\n\t\t\t\t( fieldType === 'label' && labelFieldError?.message ) || ( fieldType === 'value' && valueFieldError );\n\n\t\t\tif ( ! hasError ) {\n\t\t\t\tonChange( value );\n\t\t\t}\n\t\t\tsetIsEditing( false );\n\t\t}, [ value, onChange, fieldType, labelFieldError, valueFieldError ] );\n\n\t\tuseEffect( () => {\n\t\t\tonRowRef?.( rowRef?.current );\n\t\t}, [ onRowRef ] );\n\n\t\tuseEffect( () => {\n\t\t\tif ( autoEdit && ! isEditing ) {\n\t\t\t\tsetIsEditing( true );\n\t\t\t\tonAutoEditComplete?.();\n\t\t\t}\n\t\t}, [ autoEdit, isEditing, onAutoEditComplete ] );\n\n\t\tconst handleDoubleClick = () => {\n\t\t\tsetIsEditing( true );\n\t\t};\n\n\t\tconst handleKeyDown = ( event: React.KeyboardEvent< HTMLDivElement > ) => {\n\t\t\tif ( event.key === 'Enter' ) {\n\t\t\t\thandleSave();\n\t\t\t} else if ( event.key === 'Escape' ) {\n\t\t\t\tsetIsEditing( false );\n\t\t\t}\n\t\t\tif ( event.key === ' ' && ! isEditing ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tsetIsEditing( true );\n\t\t\t}\n\t\t};\n\n\t\tconst handleChange = useCallback( ( newValue: string ) => {\n\t\t\tsetValue( newValue );\n\t\t}, [] );\n\n\t\tconst handleValidationChange = useCallback(\n\t\t\t( errorMsg: string ) => {\n\t\t\t\tif ( fieldType === 'label' ) {\n\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\tmessage: errorMsg,\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tsetValueFieldError( errorMsg );\n\t\t\t\t}\n\t\t\t},\n\t\t\t[ fieldType, value, setLabelFieldError, setValueFieldError ]\n\t\t);\n\n\t\tlet currentError;\n\t\tif ( fieldType === 'label' ) {\n\t\t\tcurrentError = labelFieldError;\n\t\t} else if ( fieldType === 'value' ) {\n\t\t\tcurrentError = { value, message: valueFieldError };\n\t\t}\n\n\t\tconst editableContent = editableElement( {\n\t\t\tvalue,\n\t\t\tonChange: handleChange,\n\t\t\tonValidationChange: handleValidationChange,\n\t\t\terror: currentError,\n\t\t} );\n\n\t\tif ( isEditing ) {\n\t\t\treturn (\n\t\t\t\t<ClickAwayListener onClickAway={ handleSave }>\n\t\t\t\t\t<Stack\n\t\t\t\t\t\tref={ rowRef }\n\t\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tgap={ gap }\n\t\t\t\t\t\tonDoubleClick={ handleDoubleClick }\n\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\ttabIndex={ 0 }\n\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\taria-label=\"Double click or press Space to edit\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{ prefixElement }\n\t\t\t\t\t\t{ editableContent }\n\t\t\t\t\t</Stack>\n\t\t\t\t</ClickAwayListener>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<Stack\n\t\t\t\tref={ rowRef }\n\t\t\t\tdirection=\"row\"\n\t\t\t\talignItems=\"center\"\n\t\t\t\tgap={ gap }\n\t\t\t\tonDoubleClick={ handleDoubleClick }\n\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\ttabIndex={ 0 }\n\t\t\t\trole=\"button\"\n\t\t\t\taria-label=\"Double click or press Space to edit\"\n\t\t\t>\n\t\t\t\t{ prefixElement }\n\t\t\t\t{ children }\n\t\t\t</Stack>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type TransformablePropValue } from '@elementor/editor-props';\n\nimport { AssignedVariable } from '../components/ui/variable/assigned-variable';\nimport { DeletedVariable } from '../components/ui/variable/deleted-variable';\nimport { MismatchVariable } from '../components/ui/variable/mismatch-variable';\nimport { MissingVariable } from '../components/ui/variable/missing-variable';\nimport { useVariable } from '../hooks/use-prop-variables';\nimport { getVariableType } from '../variables-registry/variable-type-registry';\n\nexport const VariableControl = () => {\n\tconst boundProp = useBoundProp();\n\n\tconst boundPropValue = ( boundProp.value ?? boundProp.placeholder ) as TransformablePropValue< string, string >;\n\n\tconst assignedVariable = useVariable( boundPropValue?.value );\n\n\tif ( ! assignedVariable ) {\n\t\treturn <MissingVariable />;\n\t}\n\n\tconst { $$type: propTypeKey } = boundPropValue;\n\n\tif ( assignedVariable?.deleted ) {\n\t\treturn <DeletedVariable variable={ assignedVariable } propTypeKey={ propTypeKey } />;\n\t}\n\n\tconst { isCompatible } = getVariableType( assignedVariable.type );\n\n\tif ( isCompatible && ! isCompatible( boundProp?.propType, assignedVariable ) ) {\n\t\treturn <MismatchVariable variable={ assignedVariable } />;\n\t}\n\n\treturn <AssignedVariable variable={ assignedVariable } propTypeKey={ propTypeKey } />;\n};\n","import { useId, useRef } from 'react';\nimport * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type PropTypeKey } from '@elementor/editor-props';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { bindPopover, bindTrigger, Box, Popover, usePopupState } from '@elementor/ui';\n\nimport { type Variable } from '../../../types';\nimport { createUnlinkHandler } from '../../../utils/unlink-variable';\nimport { getVariableType } from '../../../variables-registry/variable-type-registry';\nimport { VariableSelectionPopover } from '../../variable-selection-popover';\nimport { AssignedTag, SIZE } from '../tags/assigned-tag';\n\ntype Props = {\n\tpropTypeKey: PropTypeKey;\n\tvariable: Variable;\n};\n\nexport const AssignedVariable = ( { variable, propTypeKey }: Props ) => {\n\tconst { startIcon, propTypeUtil } = getVariableType( propTypeKey );\n\tconst { setValue } = useBoundProp();\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\n\tconst popupId = useId();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: `elementor-variables-list-${ popupId }`,\n\t} );\n\n\tconst unlinkVariable = createUnlinkHandler( variable, propTypeKey, setValue );\n\n\tconst StartIcon = startIcon || ( () => null );\n\n\treturn (\n\t\t<Box ref={ anchorRef }>\n\t\t\t<AssignedTag\n\t\t\t\tlabel={ variable.label }\n\t\t\t\tstartIcon={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<ColorFilterIcon fontSize={ SIZE } />\n\t\t\t\t\t\t<StartIcon value={ variable.value } />\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tonUnlink={ unlinkVariable }\n\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t/>\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorEl={ anchorRef.current }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'right' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\tsx: { my: 1 },\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t>\n\t\t\t\t<VariableSelectionPopover\n\t\t\t\t\tselectedVariable={ variable }\n\t\t\t\t\tclosePopover={ popupState.close }\n\t\t\t\t\tpropTypeKey={ propTypeUtil.key }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</Box>\n\t);\n};\n","import { type PropValue } from '@elementor/editor-props';\n\nimport { type Variable } from '../types';\nimport { getVariableType } from '../variables-registry/variable-type-registry';\n\nexport function transformValueBeforeUnlink( variable: Variable, propTypeKey: string ): string | PropValue {\n\tconst { valueTransformer } = getVariableType( propTypeKey );\n\n\tif ( valueTransformer ) {\n\t\treturn valueTransformer( variable.value, variable.type );\n\t}\n\n\treturn variable.value;\n}\n\nexport function createUnlinkHandler(\n\tvariable: Variable,\n\tpropTypeKey: string,\n\tsetValue: ( value: PropValue ) => void\n): () => void {\n\treturn () => {\n\t\tconst { fallbackPropTypeUtil } = getVariableType( propTypeKey );\n\t\tconst transformedValue = transformValueBeforeUnlink( variable, propTypeKey );\n\n\t\tsetValue( fallbackPropTypeUtil.create( transformedValue ) );\n\t};\n}\n","import * as React from 'react';\nimport { useState } from 'react';\nimport type { PropTypeKey } from '@elementor/editor-props';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\n\nimport { PopoverContentRefContextProvider } from '../context/variable-selection-popover.context';\nimport { VariableTypeProvider } from '../context/variable-type-context';\nimport { usePermissions } from '../hooks/use-permissions';\nimport { useQuotaPermissions } from '../hooks/use-quota-permissions';\nimport { type Variable } from '../types';\nimport { VariableCreation } from './variable-creation';\nimport { VariableEdit } from './variable-edit';\nimport { usePanelActions } from './variables-manager/variables-manager-panel';\nimport { VariablesSelection } from './variables-selection';\n\nconst VIEW_LIST = 'list';\nconst VIEW_ADD = 'add';\nconst VIEW_EDIT = 'edit';\n\ntype View = typeof VIEW_LIST | typeof VIEW_ADD | typeof VIEW_EDIT;\n\ntype Props = {\n\tclosePopover: () => void;\n\tselectedVariable?: Variable;\n\tpropTypeKey: PropTypeKey;\n};\n\nexport const VariableSelectionPopover = ( { closePopover, propTypeKey, selectedVariable }: Props ) => {\n\tconst [ currentView, setCurrentView ] = useState< View >( VIEW_LIST );\n\tconst [ editId, setEditId ] = useState< string >( '' );\n\tconst { open } = usePanelActions();\n\tconst onSettingsAvailable = isExperimentActive( 'e_variables_manager' )\n\t\t? () => {\n\t\t\t\topen();\n\t\t }\n\t\t: undefined;\n\n\treturn (\n\t\t<VariableTypeProvider propTypeKey={ propTypeKey }>\n\t\t\t<PopoverContentRefContextProvider>\n\t\t\t\t{ RenderView( {\n\t\t\t\t\tpropTypeKey,\n\t\t\t\t\tcurrentView,\n\t\t\t\t\tselectedVariable,\n\t\t\t\t\teditId,\n\t\t\t\t\tsetEditId,\n\t\t\t\t\tsetCurrentView,\n\t\t\t\t\tclosePopover,\n\t\t\t\t\tonSettings: onSettingsAvailable,\n\t\t\t\t} ) }\n\t\t\t</PopoverContentRefContextProvider>\n\t\t</VariableTypeProvider>\n\t);\n};\n\ntype ViewProps = {\n\tpropTypeKey: string;\n\tcurrentView: View;\n\tselectedVariable?: Variable;\n\tdisabled?: boolean;\n\teditId: string;\n\tsetEditId: ( id: string ) => void;\n\tsetCurrentView: ( stage: View ) => void;\n\tclosePopover: () => void;\n\tonSettings?: () => void;\n};\n\ntype Handlers = {\n\tonClose: () => void;\n\tonGoBack?: () => void;\n\tonAdd?: () => void;\n\tonEdit?: ( key: string ) => void;\n\tonSettings?: () => void;\n};\n\nfunction RenderView( props: ViewProps ): React.ReactNode {\n\tconst userPermissions = usePermissions();\n\tconst userQuotaPremissions = useQuotaPermissions( props.propTypeKey );\n\n\tconst handlers: Handlers = {\n\t\tonClose: () => {\n\t\t\tprops.closePopover();\n\t\t},\n\t\tonGoBack: () => {\n\t\t\tprops.setCurrentView( VIEW_LIST );\n\t\t},\n\t};\n\n\tif ( userPermissions.canAdd() ) {\n\t\thandlers.onAdd = () => {\n\t\t\tprops.setCurrentView( VIEW_ADD );\n\t\t};\n\t}\n\n\tif ( userPermissions.canEdit() ) {\n\t\thandlers.onEdit = ( key: string ) => {\n\t\t\tprops.setEditId( key );\n\t\t\tprops.setCurrentView( VIEW_EDIT );\n\t\t};\n\t}\n\n\tif ( userPermissions.canManageSettings() && props.onSettings ) {\n\t\thandlers.onSettings = () => {\n\t\t\tprops.closePopover();\n\t\t\tprops.onSettings?.();\n\t\t};\n\t}\n\n\tconst handleSubmitOnEdit = () => {\n\t\tif ( props?.selectedVariable?.key === props.editId ) {\n\t\t\thandlers.onClose();\n\t\t} else {\n\t\t\thandlers.onGoBack?.();\n\t\t}\n\t};\n\n\tif ( VIEW_LIST === props.currentView ) {\n\t\treturn (\n\t\t\t<VariablesSelection\n\t\t\t\tclosePopover={ handlers.onClose }\n\t\t\t\tonAdd={ handlers.onAdd }\n\t\t\t\tonEdit={ handlers.onEdit }\n\t\t\t\tonSettings={ handlers.onSettings }\n\t\t\t\tdisabled={ ! userQuotaPremissions.canAdd() }\n\t\t\t/>\n\t\t);\n\t}\n\n\tif ( VIEW_ADD === props.currentView ) {\n\t\treturn <VariableCreation onGoBack={ handlers.onGoBack } onClose={ handlers.onClose } />;\n\t}\n\n\tif ( VIEW_EDIT === props.currentView ) {\n\t\treturn (\n\t\t\t<VariableEdit\n\t\t\t\teditId={ props.editId }\n\t\t\t\tonGoBack={ handlers.onGoBack }\n\t\t\t\tonClose={ handlers.onClose }\n\t\t\t\tonSubmit={ handleSubmitOnEdit }\n\t\t\t/>\n\t\t);\n\t}\n\n\treturn null;\n}\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, type RefObject, useContext, useState } from 'react';\nimport { Box } from '@elementor/ui';\n\nconst PopoverContentRefContext = createContext< RefObject< HTMLDivElement > | null >( null );\n\nexport const PopoverContentRefContextProvider = ( { children }: PropsWithChildren ) => {\n\tconst [ anchorRef, setAnchorRef ] = useState< RefObject< HTMLDivElement > | null >( null );\n\n\treturn (\n\t\t<PopoverContentRefContext.Provider value={ anchorRef }>\n\t\t\t<Box ref={ setAnchorRef }>{ children }</Box>\n\t\t</PopoverContentRefContext.Provider>\n\t);\n};\n\nexport const usePopoverContentRef = () => {\n\treturn useContext( PopoverContentRefContext );\n};\n","import * as React from 'react';\nimport { type KeyboardEvent, useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverBody } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon } from '@elementor/icons';\nimport { Button, CardActions, Divider, FormHelperText, IconButton, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useVariableType } from '../context/variable-type-context';\nimport { useInitialValue } from '../hooks/use-initial-value';\nimport { createVariable } from '../hooks/use-prop-variables';\nimport { useVariableBoundProp } from '../hooks/use-variable-bound-prop';\nimport { trackVariableEvent } from '../utils/tracking';\nimport { ERROR_MESSAGES, labelHint, mapServerError } from '../utils/validations';\nimport { LabelField, useLabelError } from './fields/label-field';\nimport { FormField } from './ui/form-field';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tonGoBack?: () => void;\n\tonClose: () => void;\n};\n\nexport const VariableCreation = ( { onGoBack, onClose }: Props ) => {\n\tconst { icon: VariableIcon, valueField: ValueField, variableType, propTypeUtil } = useVariableType();\n\n\tconst { setVariableValue: setVariable, path } = useVariableBoundProp();\n\tconst { propType } = useBoundProp();\n\n\tconst initialValue = useInitialValue();\n\n\tconst [ value, setValue ] = useState( initialValue );\n\tconst [ label, setLabel ] = useState( '' );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\tconst [ valueFieldError, setValueFieldError ] = useState( '' );\n\tconst [ propTypeKey, setPropTypeKey ] = useState( propTypeUtil.key );\n\n\tconst { labelFieldError, setLabelFieldError } = useLabelError();\n\n\tconst resetFields = () => {\n\t\tsetValue( '' );\n\t\tsetLabel( '' );\n\t\tsetErrorMessage( '' );\n\t\tsetValueFieldError( '' );\n\t};\n\n\tconst closePopover = () => {\n\t\tresetFields();\n\t\tonClose();\n\t};\n\n\tconst handleCreateAndTrack = () => {\n\t\tcreateVariable( {\n\t\t\tvalue,\n\t\t\tlabel,\n\t\t\ttype: propTypeKey,\n\t\t} )\n\t\t\t.then( ( key ) => {\n\t\t\t\tsetVariable( key );\n\t\t\t\tclosePopover();\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tconst mappedError = mapServerError( error );\n\t\t\t\tif ( mappedError && 'label' === mappedError.field ) {\n\t\t\t\t\tsetLabel( '' );\n\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\tmessage: mappedError.message,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetErrorMessage( ERROR_MESSAGES.UNEXPECTED_ERROR );\n\t\t\t} );\n\n\t\ttrackVariableEvent( {\n\t\t\tvarType: variableType,\n\t\t\tcontrolPath: path.join( '.' ),\n\t\t\taction: 'save',\n\t\t} );\n\t};\n\n\tconst hasEmptyFields = () => {\n\t\tif ( '' === label.trim() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( 'string' === typeof value ) {\n\t\t\treturn '' === value.trim();\n\t\t}\n\n\t\treturn false === Boolean( value );\n\t};\n\n\tconst hasErrors = () => {\n\t\treturn !! errorMessage;\n\t};\n\n\tconst isSubmitDisabled = hasEmptyFields() || hasErrors();\n\n\tconst handleKeyDown = ( event: KeyboardEvent< HTMLElement > ) => {\n\t\tif ( event.key === 'Enter' && ! isSubmitDisabled ) {\n\t\t\tevent.preventDefault();\n\t\t\thandleCreateAndTrack();\n\t\t}\n\t};\n\n\treturn (\n\t\t<PopoverBody height=\"auto\">\n\t\t\t<PopoverHeader\n\t\t\t\ticon={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ onGoBack && (\n\t\t\t\t\t\t\t<IconButton size={ SIZE } aria-label={ __( 'Go Back', 'elementor' ) } onClick={ onGoBack }>\n\t\t\t\t\t\t\t\t<ArrowLeftIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t<VariableIcon fontSize={ SIZE } />\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\ttitle={ __( 'Create variable', 'elementor' ) }\n\t\t\t\tonClose={ closePopover }\n\t\t\t/>\n\n\t\t\t<Divider />\n\n\t\t\t<PopoverContent p={ 2 }>\n\t\t\t\t<FormField\n\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\tlabel={ __( 'Name', 'elementor' ) }\n\t\t\t\t\terrorMsg={ labelFieldError?.message }\n\t\t\t\t\tnoticeMsg={ labelHint( label ) }\n\t\t\t\t>\n\t\t\t\t\t<LabelField\n\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\terror={ labelFieldError }\n\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\tsetLabel( newValue );\n\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonErrorChange={ ( errorMsg ) => {\n\t\t\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\t\t\tmessage: errorMsg,\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t/>\n\t\t\t\t</FormField>\n\t\t\t\t{ ValueField && (\n\t\t\t\t\t<FormField errorMsg={ valueFieldError } label={ __( 'Value', 'elementor' ) }>\n\t\t\t\t\t\t<Typography variant=\"h5\" id=\"variable-value-wrapper\">\n\t\t\t\t\t\t\t<ValueField\n\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\tonPropTypeKeyChange={ ( key: string ) => setPropTypeKey( key ) }\n\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\tsetValue( newValue );\n\t\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t\t\tsetValueFieldError( '' );\n\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\tonValidationChange={ setValueFieldError }\n\t\t\t\t\t\t\t\tpropType={ propType }\n\t\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</FormField>\n\t\t\t\t) }\n\n\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t</PopoverContent>\n\n\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t<Button\n\t\t\t\t\tid=\"create-variable-button\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\tdisabled={ isSubmitDisabled }\n\t\t\t\t\tonClick={ handleCreateAndTrack }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Create', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardActions>\n\t\t</PopoverBody>\n\t);\n};\n","import { useBoundProp } from '@elementor/editor-controls';\n\nimport { hasVariableType } from '../variables-registry/variable-type-registry';\nimport { useVariable } from './use-prop-variables';\n\ntype PropValue = {\n\t$$type: string;\n\tvalue: string;\n};\n\nexport const useInitialValue = () => {\n\tconst { value: initial }: { value: PropValue } = useBoundProp();\n\n\tconst hasAssignedVariable = hasVariableType( initial?.$$type ) && Boolean( initial?.value );\n\tconst variable = useVariable( hasAssignedVariable ? initial.value : '' );\n\n\tif ( hasAssignedVariable ) {\n\t\treturn variable ? variable.value : '';\n\t}\n\n\treturn initial?.value ?? '';\n};\n","import { useBoundProp } from '@elementor/editor-controls';\nimport { isTransformable, type PropValue } from '@elementor/editor-props';\n\nimport { useVariableType } from '../context/variable-type-context';\n\ntype BoundProp = ReturnType< typeof useBoundProp< PropValue > >;\n\ntype VariableBoundProp = ReturnType< typeof useBoundProp< string > > & {\n\tsetVariableValue: ( value: PropValue ) => void;\n\tvariableId: string | null;\n};\n\nexport const useVariableBoundProp = (): VariableBoundProp => {\n\tconst { propTypeUtil } = useVariableType();\n\tconst boundProp = useBoundProp( propTypeUtil );\n\n\treturn {\n\t\t...boundProp,\n\t\tsetVariableValue: ( value: PropValue ) => resolveBoundPropAndSetValue( value, boundProp as BoundProp ),\n\t\tvariableId: boundProp.value ?? boundProp.placeholder,\n\t};\n};\n\nexport const resolveBoundPropAndSetValue = ( value: PropValue, boundProp: BoundProp ) => {\n\tconst propValue = unwrapValue( boundProp.value );\n\tconst placeholder = unwrapValue( boundProp.placeholder );\n\tconst newValue = unwrapValue( value );\n\n\tif ( ! propValue && placeholder === newValue ) {\n\t\treturn boundProp.setValue( null );\n\t}\n\n\treturn boundProp.setValue( value );\n};\n\nconst unwrapValue = ( input: PropValue ): PropValue => {\n\tif ( isTransformable( input ) ) {\n\t\treturn input.value;\n\t}\n\n\treturn input;\n};\n","import * as React from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { FormHelperText, FormLabel, Grid } from '@elementor/ui';\n\ntype Props = PropsWithChildren< {\n\tid?: string;\n\tlabel: string;\n\terrorMsg?: string;\n\tnoticeMsg?: string;\n} >;\n\nexport const FormField = ( { id, label, errorMsg, noticeMsg, children }: Props ) => {\n\treturn (\n\t\t<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<FormLabel htmlFor={ id } size=\"tiny\">\n\t\t\t\t\t{ label }\n\t\t\t\t</FormLabel>\n\t\t\t</Grid>\n\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t{ children }\n\t\t\t\t{ errorMsg && <FormHelperText error>{ errorMsg }</FormHelperText> }\n\t\t\t\t{ noticeMsg && <FormHelperText>{ noticeMsg }</FormHelperText> }\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import * as React from 'react';\nimport { type KeyboardEvent, useEffect, useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { useSuppressedMessage } from '@elementor/editor-current-user';\nimport { PopoverBody } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, TrashIcon } from '@elementor/icons';\nimport { Button, CardActions, Divider, FormHelperText, IconButton, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useVariableType } from '../context/variable-type-context';\nimport { usePermissions } from '../hooks/use-permissions';\nimport { deleteVariable, updateVariable, useVariable } from '../hooks/use-prop-variables';\nimport { useVariableBoundProp } from '../hooks/use-variable-bound-prop';\nimport { styleVariablesRepository } from '../style-variables-repository';\nimport { ERROR_MESSAGES, labelHint, mapServerError } from '../utils/validations';\nimport { LabelField, useLabelError } from './fields/label-field';\nimport { DeleteConfirmationDialog } from './ui/delete-confirmation-dialog';\nimport { EDIT_CONFIRMATION_DIALOG_ID, EditConfirmationDialog } from './ui/edit-confirmation-dialog';\nimport { FormField } from './ui/form-field';\n\nconst SIZE = 'tiny';\nconst DELETE_LABEL = __( 'Delete variable', 'elementor' );\n\ntype Props = {\n\teditId: string;\n\tonClose: () => void;\n\tonGoBack?: () => void;\n\tonSubmit?: () => void;\n};\n\nexport const VariableEdit = ( { onClose, onGoBack, onSubmit, editId }: Props ) => {\n\tconst { icon: VariableIcon, valueField: ValueField, variableType, propTypeUtil } = useVariableType();\n\n\tconst { setVariableValue: notifyBoundPropChange, variableId } = useVariableBoundProp();\n\tconst { propType } = useBoundProp();\n\tconst [ isMessageSuppressed, suppressMessage ] = useSuppressedMessage( EDIT_CONFIRMATION_DIALOG_ID );\n\tconst [ deleteConfirmation, setDeleteConfirmation ] = useState( false );\n\tconst [ editConfirmation, setEditConfirmation ] = useState( false );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\tconst [ valueFieldError, setValueFieldError ] = useState( '' );\n\n\tconst { labelFieldError, setLabelFieldError } = useLabelError();\n\tconst variable = useVariable( editId );\n\n\tconst [ propTypeKey, setPropTypeKey ] = useState( variable?.type ?? propTypeUtil.key );\n\n\tif ( ! variable ) {\n\t\tthrow new Error( `Global ${ variableType } variable not found` );\n\t}\n\n\tconst userPermissions = usePermissions();\n\n\tconst [ value, setValue ] = useState( () => variable.value );\n\tconst [ label, setLabel ] = useState( () => variable.label );\n\n\tuseEffect( () => {\n\t\tstyleVariablesRepository.update( {\n\t\t\t[ editId ]: {\n\t\t\t\t...variable,\n\t\t\t\tvalue,\n\t\t\t},\n\t\t} );\n\n\t\treturn () => {\n\t\t\tstyleVariablesRepository.update( {\n\t\t\t\t[ editId ]: { ...variable },\n\t\t\t} );\n\t\t};\n\t}, [ editId, value, variable ] );\n\n\tconst handleUpdate = () => {\n\t\tif ( isMessageSuppressed ) {\n\t\t\thandleSaveVariable();\n\t\t} else {\n\t\t\tsetEditConfirmation( true );\n\t\t}\n\t};\n\n\tconst handleSaveVariable = () => {\n\t\tconst typeChanged = propTypeKey !== variable.type;\n\t\tconst updatePayload = typeChanged ? { value, label, type: propTypeKey } : { value, label };\n\n\t\tupdateVariable( editId, updatePayload )\n\t\t\t.then( () => {\n\t\t\t\tmaybeTriggerBoundPropChange();\n\t\t\t\tonSubmit?.();\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tconst mappedError = mapServerError( error );\n\t\t\t\tif ( mappedError && 'label' === mappedError.field ) {\n\t\t\t\t\tsetLabel( '' );\n\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\tmessage: mappedError.message,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetErrorMessage( ERROR_MESSAGES.UNEXPECTED_ERROR );\n\t\t\t} );\n\t};\n\n\tconst handleDelete = () => {\n\t\tdeleteVariable( editId ).then( () => {\n\t\t\tmaybeTriggerBoundPropChange();\n\t\t\tonSubmit?.();\n\t\t} );\n\t};\n\n\tconst maybeTriggerBoundPropChange = () => {\n\t\tif ( editId === variableId ) {\n\t\t\tnotifyBoundPropChange( editId );\n\t\t}\n\t};\n\n\tconst handleDeleteConfirmation = () => {\n\t\tsetDeleteConfirmation( true );\n\t};\n\n\tconst closeDeleteDialog = () => () => {\n\t\tsetDeleteConfirmation( false );\n\t};\n\n\tconst closeEditDialog = () => () => {\n\t\tsetEditConfirmation( false );\n\t};\n\n\tconst actions = [];\n\n\tif ( userPermissions.canDelete() ) {\n\t\tactions.push(\n\t\t\t<Tooltip key=\"delete\" placement=\"top\" title={ DELETE_LABEL }>\n\t\t\t\t<IconButton size={ SIZE } onClick={ handleDeleteConfirmation } aria-label={ DELETE_LABEL }>\n\t\t\t\t\t<TrashIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\tconst hasEmptyFields = () => {\n\t\tif ( '' === label.trim() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( 'string' === typeof value ) {\n\t\t\treturn '' === value.trim();\n\t\t}\n\n\t\treturn false === Boolean( value );\n\t};\n\n\tconst noValueChanged = () => {\n\t\treturn value === variable.value && label === variable.label;\n\t};\n\n\tconst hasErrors = () => {\n\t\treturn !! errorMessage;\n\t};\n\n\tconst isSubmitDisabled = noValueChanged() || hasEmptyFields() || hasErrors();\n\n\tconst handleKeyDown = ( event: KeyboardEvent< HTMLElement > ) => {\n\t\tif ( event.key === 'Enter' && ! isSubmitDisabled ) {\n\t\t\tevent.preventDefault();\n\t\t\thandleUpdate();\n\t\t}\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<PopoverBody height=\"auto\">\n\t\t\t\t<PopoverHeader\n\t\t\t\t\ttitle={ __( 'Edit variable', 'elementor' ) }\n\t\t\t\t\tonClose={ onClose }\n\t\t\t\t\ticon={\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t{ onGoBack && (\n\t\t\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\t\t\taria-label={ __( 'Go Back', 'elementor' ) }\n\t\t\t\t\t\t\t\t\tonClick={ onGoBack }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ArrowLeftIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t) }\n\t\t\t\t\t\t\t<VariableIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t\tactions={ actions }\n\t\t\t\t/>\n\n\t\t\t\t<Divider />\n\n\t\t\t\t<PopoverContent p={ 2 }>\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\tlabel={ __( 'Name', 'elementor' ) }\n\t\t\t\t\t\terrorMsg={ labelFieldError?.message }\n\t\t\t\t\t\tnoticeMsg={ labelHint( label ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<LabelField\n\t\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\terror={ labelFieldError }\n\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\tsetLabel( newValue );\n\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonErrorChange={ ( errorMsg ) => {\n\t\t\t\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\t\t\t\tmessage: errorMsg,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t\t{ ValueField && (\n\t\t\t\t\t\t<FormField errorMsg={ valueFieldError } label={ __( 'Value', 'elementor' ) }>\n\t\t\t\t\t\t\t<Typography variant=\"h5\">\n\t\t\t\t\t\t\t\t<ValueField\n\t\t\t\t\t\t\t\t\tpropTypeKey={ variable.type }\n\t\t\t\t\t\t\t\t\tonPropTypeKeyChange={ ( key: string ) => setPropTypeKey( key ) }\n\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\t\tsetValue( newValue );\n\t\t\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t\t\t\tsetValueFieldError( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t\t\t\tonValidationChange={ setValueFieldError }\n\t\t\t\t\t\t\t\t\tpropType={ propType }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t\t</PopoverContent>\n\n\t\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isSubmitDisabled } onClick={ handleUpdate }>\n\t\t\t\t\t\t{ __( 'Save', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</CardActions>\n\t\t\t</PopoverBody>\n\n\t\t\t{ deleteConfirmation && (\n\t\t\t\t<DeleteConfirmationDialog\n\t\t\t\t\topen\n\t\t\t\t\tlabel={ label }\n\t\t\t\t\tonConfirm={ handleDelete }\n\t\t\t\t\tcloseDialog={ closeDeleteDialog() }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ editConfirmation && ! isMessageSuppressed && (\n\t\t\t\t<EditConfirmationDialog\n\t\t\t\t\tcloseDialog={ closeEditDialog() }\n\t\t\t\t\tonConfirm={ handleSaveVariable }\n\t\t\t\t\tonSuppressMessage={ suppressMessage }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { AlertTriangleFilledIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tCheckbox,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogContentText,\n\tDialogTitle,\n\tFormControlLabel,\n\tTypography,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const EDIT_CONFIRMATION_DIALOG_ID = 'edit-confirmation-dialog';\n\nexport const EditConfirmationDialog = ( {\n\tcloseDialog,\n\tonConfirm,\n\tonSuppressMessage,\n}: {\n\tcloseDialog: () => void;\n\tonConfirm?: () => void;\n\tonSuppressMessage?: () => void;\n} ) => {\n\tconst [ dontShowAgain, setDontShowAgain ] = useState( false );\n\n\tconst handleSave = () => {\n\t\tif ( dontShowAgain ) {\n\t\t\tonSuppressMessage?.();\n\t\t}\n\t\tonConfirm?.();\n\t};\n\n\treturn (\n\t\t<Dialog open onClose={ closeDialog } maxWidth=\"xs\">\n\t\t\t<DialogTitle display=\"flex\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t<AlertTriangleFilledIcon color=\"secondary\" />\n\t\t\t\t{ __( 'Changes to variables go live right away.', 'elementor' ) }\n\t\t\t</DialogTitle>\n\t\t\t<DialogContent>\n\t\t\t\t<DialogContentText variant=\"body2\" color=\"textPrimary\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t\"Don't worry - all other changes you make will wait until you publish your site.\",\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t</DialogContentText>\n\t\t\t</DialogContent>\n\t\t\t<DialogActions sx={ { justifyContent: 'space-between', alignItems: 'center' } }>\n\t\t\t\t<FormControlLabel\n\t\t\t\t\tcontrol={\n\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\tchecked={ dontShowAgain }\n\t\t\t\t\t\t\tonChange={ ( event: React.ChangeEvent< HTMLInputElement > ) =>\n\t\t\t\t\t\t\t\tsetDontShowAgain( event.target.checked )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\tlabel={ <Typography variant=\"body2\">{ __( \"Don't show me again\", 'elementor' ) }</Typography> }\n\t\t\t\t/>\n\t\t\t\t<div>\n\t\t\t\t\t<Button color=\"secondary\" onClick={ closeDialog }>\n\t\t\t\t\t\t{ __( 'Keep editing', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button variant=\"contained\" color=\"secondary\" onClick={ handleSave } sx={ { ml: 1 } }>\n\t\t\t\t\t\t{ __( 'Save', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</DialogActions>\n\t\t</Dialog>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { PopoverBody } from '@elementor/editor-editing-panel';\nimport { PopoverHeader, PopoverMenuList, SearchField, type VirtualizedItem } from '@elementor/editor-ui';\nimport { ColorFilterIcon, PlusIcon, SettingsIcon } from '@elementor/icons';\nimport { Divider, IconButton, Tooltip } from '@elementor/ui';\nimport { __, sprintf } from '@wordpress/i18n';\n\nimport { useVariableType } from '../context/variable-type-context';\nimport { useFilteredVariables } from '../hooks/use-prop-variables';\nimport { useVariableBoundProp } from '../hooks/use-variable-bound-prop';\nimport { type ExtendedVirtualizedItem } from '../types';\nimport { trackVariableEvent, trackVariablesManagerEvent } from '../utils/tracking';\nimport { EmptyState } from './ui/empty-state';\nimport { MenuItemContent } from './ui/menu-item-content';\nimport { NoSearchResults } from './ui/no-search-results';\nimport { VariablesStyledMenuList } from './ui/styled-menu-list';\n\nconst SIZE = 'tiny';\nconst CREATE_LABEL = __( 'Create variable', 'elementor' );\nconst MANAGER_LABEL = __( 'Variables Manager', 'elementor' );\n\ntype Props = {\n\tclosePopover: () => void;\n\tonAdd?: () => void;\n\tonEdit?: ( key: string ) => void;\n\tonSettings?: () => void;\n\tdisabled?: boolean;\n};\n\nexport const VariablesSelection = ( { closePopover, onAdd, onEdit, onSettings, disabled = false }: Props ) => {\n\tconst { icon: VariableIcon, startIcon, variableType, propTypeUtil, emptyState } = useVariableType();\n\n\tconst { value: variable, setValue: setVariable, path } = useVariableBoundProp();\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst {\n\t\tlist: variables,\n\t\thasMatches: hasSearchResults,\n\t\tisSourceNotEmpty: hasVariables,\n\t\thasNoCompatibleVariables,\n\t} = useFilteredVariables( searchValue, propTypeUtil.key );\n\n\tconst handleSetVariable = ( key: string ) => {\n\t\tsetVariable( key );\n\t\ttrackVariableEvent( {\n\t\t\tvarType: variableType,\n\t\t\tcontrolPath: path.join( '.' ),\n\t\t\taction: 'connect',\n\t\t} );\n\t\tclosePopover();\n\t};\n\n\tconst onAddAndTrack = () => {\n\t\tonAdd?.();\n\t\ttrackVariableEvent( {\n\t\t\tvarType: variableType,\n\t\t\tcontrolPath: path.join( '.' ),\n\t\t\taction: 'add',\n\t\t} );\n\t};\n\n\tconst actions = [];\n\n\tif ( onAdd ) {\n\t\tactions.push(\n\t\t\t<Tooltip key=\"add\" placement=\"top\" title={ CREATE_LABEL }>\n\t\t\t\t<span>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tid=\"add-variable-button\"\n\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\tonClick={ onAddAndTrack }\n\t\t\t\t\t\taria-label={ CREATE_LABEL }\n\t\t\t\t\t\tdisabled={ disabled }\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</span>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\tif ( onSettings ) {\n\t\tconst handleOpenManager = () => {\n\t\t\tonSettings();\n\t\t\ttrackVariablesManagerEvent( {\n\t\t\t\taction: 'openManager',\n\t\t\t\tvarType: variableType,\n\t\t\t\tcontrolPath: path.join( '.' ),\n\t\t\t} );\n\t\t};\n\n\t\tactions.push(\n\t\t\t<Tooltip key=\"settings\" placement=\"top\" title={ MANAGER_LABEL }>\n\t\t\t\t<IconButton\n\t\t\t\t\tid=\"variables-manager-button\"\n\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\tonClick={ handleOpenManager }\n\t\t\t\t\taria-label={ MANAGER_LABEL }\n\t\t\t\t>\n\t\t\t\t\t<SettingsIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\tconst StartIcon = startIcon || ( () => <VariableIcon fontSize={ SIZE } /> );\n\n\tconst items: ExtendedVirtualizedItem[] = variables.map( ( { value, label, key } ) => ( {\n\t\ttype: 'item' as const,\n\t\tvalue: key,\n\t\tlabel,\n\t\ticon: <StartIcon value={ value } />,\n\t\tsecondaryText: value,\n\t\tonEdit: onEdit ? () => onEdit?.( key ) : undefined,\n\t} ) );\n\n\tconst handleSearch = ( search: string ) => {\n\t\tsetSearchValue( search );\n\t};\n\n\tconst handleClearSearch = () => {\n\t\tsetSearchValue( '' );\n\t};\n\n\treturn (\n\t\t<PopoverBody>\n\t\t\t<PopoverHeader\n\t\t\t\ttitle={ __( 'Variables', 'elementor' ) }\n\t\t\t\ticon={ <ColorFilterIcon fontSize={ SIZE } /> }\n\t\t\t\tonClose={ closePopover }\n\t\t\t\tactions={ actions }\n\t\t\t/>\n\n\t\t\t{ hasVariables && (\n\t\t\t\t<SearchField\n\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\tonSearch={ handleSearch }\n\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t<Divider />\n\n\t\t\t{ hasVariables && hasSearchResults && (\n\t\t\t\t<PopoverMenuList\n\t\t\t\t\titems={ items }\n\t\t\t\t\tonSelect={ handleSetVariable }\n\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\tselectedValue={ variable }\n\t\t\t\t\tdata-testid={ `${ variableType }-variables-list` }\n\t\t\t\t\tmenuListTemplate={ VariablesStyledMenuList }\n\t\t\t\t\tmenuItemContentTemplate={ ( item: VirtualizedItem< 'item', string > ) => (\n\t\t\t\t\t\t<MenuItemContent item={ item } />\n\t\t\t\t\t) }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ ! hasSearchResults && hasVariables && (\n\t\t\t\t<NoSearchResults\n\t\t\t\t\tsearchValue={ searchValue }\n\t\t\t\t\tonClear={ handleClearSearch }\n\t\t\t\t\ticon={ <VariableIcon fontSize=\"large\" /> }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ disabled && (\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t/* translators: %s: Variable Type. */\n\t\t\t\t\t\t__( 'No %s variables yet', 'elementor' ),\n\t\t\t\t\t\tvariableType\n\t\t\t\t\t) }\n\t\t\t\t\tmessage={ sprintf(\n\t\t\t\t\t\t/* translators: %s: Variable Type. */\n\t\t\t\t\t\t__( 'Upgrade to create %s variables and maintain consistent element sizing.', 'elementor' ),\n\t\t\t\t\t\tvariableType\n\t\t\t\t\t) }\n\t\t\t\t\ticon={ <VariableIcon fontSize=\"large\" /> }\n\t\t\t\t>\n\t\t\t\t\t{ emptyState }\n\t\t\t\t</EmptyState>\n\t\t\t) }\n\n\t\t\t{ ! hasVariables && ! hasNoCompatibleVariables && ! disabled && (\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={ sprintf(\n\t\t\t\t\t\t/* translators: %s: Variable Type. */\n\t\t\t\t\t\t__( 'Create your first %s variable', 'elementor' ),\n\t\t\t\t\t\tvariableType\n\t\t\t\t\t) }\n\t\t\t\t\tmessage={ __(\n\t\t\t\t\t\t'Variables are saved attributes that you can apply anywhere on your site.',\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t\ticon={ <VariableIcon fontSize=\"large\" /> }\n\t\t\t\t\tonAdd={ onAdd }\n\t\t\t\t/>\n\t\t\t) }\n\n\t\t\t{ hasNoCompatibleVariables && ! disabled && (\n\t\t\t\t<EmptyState\n\t\t\t\t\ttitle={ __( 'No compatible variables', 'elementor' ) }\n\t\t\t\t\tmessage={ __(\n\t\t\t\t\t\t'Looks like none of your variables work with this control. Create a new variable to use it here.',\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t\ticon={ <VariableIcon fontSize=\"large\" /> }\n\t\t\t\t\tonAdd={ onAdd }\n\t\t\t\t/>\n\t\t\t) }\n\t\t</PopoverBody>\n\t);\n};\n","import * as React from 'react';\nimport { EllipsisWithTooltip, type VirtualizedItem } from '@elementor/editor-ui';\nimport { EditIcon } from '@elementor/icons';\nimport { Box, IconButton, ListItemIcon, Tooltip, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\nconst EDIT_LABEL = __( 'Edit variable', 'elementor' );\n\nexport const MenuItemContent = < T, V extends string >( { item }: { item: VirtualizedItem< T, V > } ) => {\n\tconst onEdit = item.onEdit as ( ( value: V ) => void ) | undefined;\n\n\treturn (\n\t\t<>\n\t\t\t<ListItemIcon>{ item.icon }</ListItemIcon>\n\t\t\t<Box\n\t\t\t\tsx={ {\n\t\t\t\t\tflex: 1,\n\t\t\t\t\tminWidth: 0,\n\t\t\t\t\tdisplay: 'flex',\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<EllipsisWithTooltip\n\t\t\t\t\ttitle={ item.label || item.value }\n\t\t\t\t\tas={ Typography }\n\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\tcolor=\"text.primary\"\n\t\t\t\t\tsx={ { marginTop: '1px', lineHeight: '2' } }\n\t\t\t\t\tmaxWidth=\"50%\"\n\t\t\t\t/>\n\t\t\t\t{ item.secondaryText && (\n\t\t\t\t\t<EllipsisWithTooltip\n\t\t\t\t\t\ttitle={ item.secondaryText }\n\t\t\t\t\t\tas={ Typography }\n\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\tcolor=\"text.tertiary\"\n\t\t\t\t\t\tsx={ { marginTop: '1px', lineHeight: '1' } }\n\t\t\t\t\t\tmaxWidth=\"50%\"\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t\t{ !! onEdit && (\n\t\t\t\t<Tooltip placement=\"top\" title={ EDIT_LABEL }>\n\t\t\t\t\t<IconButton\n\t\t\t\t\t\tsx={ { mx: 1, opacity: '0' } }\n\t\t\t\t\t\tonClick={ ( e: React.MouseEvent< HTMLButtonElement > ) => {\n\t\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\t\tonEdit( item.value );\n\t\t\t\t\t\t} }\n\t\t\t\t\t\taria-label={ EDIT_LABEL }\n\t\t\t\t\t>\n\t\t\t\t\t\t<EditIcon color=\"action\" fontSize={ SIZE } />\n\t\t\t\t\t</IconButton>\n\t\t\t\t</Tooltip>\n\t\t\t) }\n\t\t</>\n\t);\n};\n","import { MenuList, styled } from '@elementor/ui';\n\nexport const VariablesStyledMenuList = styled( MenuList )( ( { theme } ) => ( {\n\t'& > li': {\n\t\theight: 32,\n\t\twidth: '100%',\n\t\tdisplay: 'flex',\n\t\talignItems: 'center',\n\t},\n\t'& > [role=\"option\"]': {\n\t\t...theme.typography.caption,\n\t\tlineHeight: 'inherit',\n\t\tpadding: theme.spacing( 0.5, 1, 0.5, 2 ),\n\t\t'&:hover, &:focus': {\n\t\t\tbackgroundColor: theme.palette.action.hover,\n\t\t},\n\t\t'&[aria-selected=\"true\"]': {\n\t\t\tbackgroundColor: theme.palette.action.selected,\n\t\t},\n\t\tcursor: 'pointer',\n\t\ttextOverflow: 'ellipsis',\n\t\tposition: 'absolute',\n\t\ttop: 0,\n\t\tleft: 0,\n\t\t'&:hover .MuiIconButton-root, .MuiIconButton-root:focus': {\n\t\t\topacity: 1,\n\t\t},\n\t},\n\twidth: '100%',\n\tposition: 'relative',\n} ) );\n","import * as React from 'react';\nimport { DetachIcon } from '@elementor/icons';\nimport { Box, IconButton, Stack, Tooltip, Typography, UnstableTag as Tag, type UnstableTagProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const SIZE = 'tiny';\nconst UNLINK_LABEL = __( 'Unlink variable', 'elementor' );\n\ninterface VariableTagProps extends UnstableTagProps {\n\tonUnlink?: () => void;\n}\n\nexport const AssignedTag = ( { startIcon, label, onUnlink, ...props }: VariableTagProps ) => {\n\tconst actions = [];\n\n\tif ( onUnlink ) {\n\t\tactions.push(\n\t\t\t<Tooltip key=\"unlink\" title={ UNLINK_LABEL } placement=\"bottom\">\n\t\t\t\t<IconButton size={ SIZE } onClick={ onUnlink } aria-label={ UNLINK_LABEL }>\n\t\t\t\t\t<DetachIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Tooltip>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Tooltip title={ label } placement=\"top\">\n\t\t\t<Tag\n\t\t\t\tfullWidth\n\t\t\t\tshowActionsOnHover\n\t\t\t\tstartIcon={\n\t\t\t\t\t<Stack gap={ 0.5 } direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t\t{ startIcon }\n\t\t\t\t\t</Stack>\n\t\t\t\t}\n\t\t\t\tlabel={\n\t\t\t\t\t<Box sx={ { display: 'inline-grid', minWidth: 0 } }>\n\t\t\t\t\t\t<Typography sx={ { lineHeight: 1.34 } } variant=\"caption\" noWrap>\n\t\t\t\t\t\t\t{ label }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t}\n\t\t\t\tactions={ actions }\n\t\t\t\t{ ...props }\n\t\t\t/>\n\t\t</Tooltip>\n\t);\n};\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type PropTypeKey } from '@elementor/editor-props';\nimport { Backdrop, bindPopover, Box, Infotip, Popover, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { VariableTypeProvider } from '../../../context/variable-type-context';\nimport { usePermissions } from '../../../hooks/use-permissions';\nimport { restoreVariable } from '../../../hooks/use-prop-variables';\nimport { resolveBoundPropAndSetValue } from '../../../hooks/use-variable-bound-prop';\nimport { type Variable } from '../../../types';\nimport { createUnlinkHandler } from '../../../utils/unlink-variable';\nimport { getVariableType } from '../../../variables-registry/variable-type-registry';\nimport { VariableRestore } from '../../variable-restore';\nimport { DeletedVariableAlert } from '../deleted-variable-alert';\nimport { WarningVariableTag } from '../tags/warning-variable-tag';\n\ntype Props = {\n\tvariable: Variable;\n\tpropTypeKey: PropTypeKey;\n};\n\ntype Handlers = {\n\tonUnlink?: () => void;\n\tonRestore?: () => void;\n};\n\nexport const DeletedVariable = ( { variable, propTypeKey }: Props ) => {\n\tconst { propTypeUtil } = getVariableType( propTypeKey );\n\n\tconst boundProp = useBoundProp();\n\n\tconst userPermissions = usePermissions();\n\n\tconst [ showInfotip, setShowInfotip ] = useState< boolean >( false );\n\tconst toggleInfotip = () => setShowInfotip( ( prev ) => ! prev );\n\tconst closeInfotip = () => setShowInfotip( false );\n\n\tconst deletedChipAnchorRef = useRef< HTMLDivElement >( null );\n\n\tconst popupId = useId();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: `elementor-variables-restore-${ popupId }`,\n\t} );\n\n\tconst handlers: Handlers = {};\n\n\tif ( userPermissions.canUnlink() ) {\n\t\thandlers.onUnlink = createUnlinkHandler( variable, propTypeKey, boundProp.setValue );\n\t}\n\n\tif ( userPermissions.canRestore() ) {\n\t\thandlers.onRestore = () => {\n\t\t\tif ( ! variable.key ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\trestoreVariable( variable.key )\n\t\t\t\t.then( ( id ) => {\n\t\t\t\t\tresolveBoundPropAndSetValue( propTypeUtil.create( id ), boundProp );\n\n\t\t\t\t\tcloseInfotip();\n\t\t\t\t} )\n\t\t\t\t.catch( () => {\n\t\t\t\t\tcloseInfotip();\n\t\t\t\t\tpopupState.setAnchorEl( deletedChipAnchorRef.current );\n\t\t\t\t\tpopupState.open();\n\t\t\t\t} );\n\t\t};\n\t}\n\n\tconst handleRestoreWithOverrides = () => {\n\t\tpopupState.close();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Box ref={ deletedChipAnchorRef }>\n\t\t\t\t{ showInfotip && <Backdrop open onClick={ closeInfotip } invisible /> }\n\t\t\t\t<Infotip\n\t\t\t\t\tcolor=\"warning\"\n\t\t\t\t\tplacement=\"right-start\"\n\t\t\t\t\topen={ showInfotip }\n\t\t\t\t\tdisableHoverListener\n\t\t\t\t\tonClose={ closeInfotip }\n\t\t\t\t\tcontent={\n\t\t\t\t\t\t<DeletedVariableAlert\n\t\t\t\t\t\t\tonClose={ closeInfotip }\n\t\t\t\t\t\t\tonUnlink={ handlers.onUnlink }\n\t\t\t\t\t\t\tonRestore={ handlers.onRestore }\n\t\t\t\t\t\t\tlabel={ variable.label }\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\tpopper: {\n\t\t\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tname: 'offset',\n\t\t\t\t\t\t\t\t\toptions: { offset: [ 0, 24 ] },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t<WarningVariableTag\n\t\t\t\t\t\tlabel={ variable.label }\n\t\t\t\t\t\tonClick={ toggleInfotip }\n\t\t\t\t\t\tsuffix={ __( 'deleted', 'elementor' ) }\n\t\t\t\t\t/>\n\t\t\t\t</Infotip>\n\n\t\t\t\t<Popover\n\t\t\t\t\tdisableScrollLock\n\t\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'right' } }\n\t\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\t\tPaperProps={ {\n\t\t\t\t\t\tsx: { my: 1 },\n\t\t\t\t\t} }\n\t\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t\t>\n\t\t\t\t\t<VariableTypeProvider propTypeKey={ propTypeKey }>\n\t\t\t\t\t\t<VariableRestore\n\t\t\t\t\t\t\tvariableId={ variable.key ?? '' }\n\t\t\t\t\t\t\tonClose={ popupState.close }\n\t\t\t\t\t\t\tonSubmit={ handleRestoreWithOverrides }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</VariableTypeProvider>\n\t\t\t\t</Popover>\n\t\t\t</Box>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type KeyboardEvent, useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverBody } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { Button, CardActions, Divider, FormHelperText, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { PopoverContentRefContextProvider } from '../context/variable-selection-popover.context';\nimport { useVariableType } from '../context/variable-type-context';\nimport { restoreVariable, useVariable } from '../hooks/use-prop-variables';\nimport { useVariableBoundProp } from '../hooks/use-variable-bound-prop';\nimport { ERROR_MESSAGES, labelHint, mapServerError } from '../utils/validations';\nimport { LabelField, useLabelError } from './fields/label-field';\nimport { FormField } from './ui/form-field';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tvariableId: string;\n\tonClose: () => void;\n\tonSubmit?: () => void;\n};\n\nexport const VariableRestore = ( { variableId, onClose, onSubmit }: Props ) => {\n\tconst { icon: VariableIcon, valueField: ValueField, variableType, propTypeUtil } = useVariableType();\n\n\tconst { setVariableValue: notifyBoundPropChange } = useVariableBoundProp();\n\tconst { propType } = useBoundProp();\n\n\tconst variable = useVariable( variableId );\n\n\tif ( ! variable ) {\n\t\tthrow new Error( `Global ${ variableType } variable not found` );\n\t}\n\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\tconst [ valueFieldError, setValueFieldError ] = useState( '' );\n\tconst [ label, setLabel ] = useState( variable.label );\n\tconst [ value, setValue ] = useState( variable.value );\n\tconst [ propTypeKey, setPropTypeKey ] = useState( variable?.type ?? propTypeUtil.key );\n\n\tconst { labelFieldError, setLabelFieldError } = useLabelError( {\n\t\tvalue: variable.label,\n\t\tmessage: ERROR_MESSAGES.DUPLICATED_LABEL,\n\t} );\n\n\tconst handleRestore = () => {\n\t\tconst typeChanged = propTypeKey !== variable.type;\n\t\tconst restorePromise = typeChanged\n\t\t\t? restoreVariable( variableId, label, value, propTypeKey )\n\t\t\t: restoreVariable( variableId, label, value );\n\n\t\trestorePromise\n\t\t\t.then( () => {\n\t\t\t\tnotifyBoundPropChange( variableId );\n\t\t\t\tonSubmit?.();\n\t\t\t} )\n\t\t\t.catch( ( error ) => {\n\t\t\t\tconst mappedError = mapServerError( error );\n\t\t\t\tif ( mappedError && 'label' === mappedError.field ) {\n\t\t\t\t\tsetLabel( '' );\n\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\tmessage: mappedError.message,\n\t\t\t\t\t} );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsetErrorMessage( ERROR_MESSAGES.UNEXPECTED_ERROR );\n\t\t\t} );\n\t};\n\n\tconst hasEmptyFields = () => {\n\t\tif ( '' === label.trim() ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( 'string' === typeof value ) {\n\t\t\treturn '' === value.trim();\n\t\t}\n\n\t\treturn false === Boolean( value );\n\t};\n\n\tconst noValueChanged = () => {\n\t\treturn value === variable.value && label === variable.label;\n\t};\n\n\tconst hasErrors = () => {\n\t\treturn !! errorMessage;\n\t};\n\n\tconst isSubmitDisabled = noValueChanged() || hasEmptyFields() || hasErrors();\n\n\tconst handleKeyDown = ( event: KeyboardEvent< HTMLElement > ) => {\n\t\tif ( event.key === 'Enter' && ! isSubmitDisabled ) {\n\t\t\tevent.preventDefault();\n\t\t\thandleRestore();\n\t\t}\n\t};\n\n\treturn (\n\t\t<PopoverContentRefContextProvider>\n\t\t\t<PopoverBody height=\"auto\">\n\t\t\t\t<PopoverHeader\n\t\t\t\t\ticon={ <VariableIcon fontSize={ SIZE } /> }\n\t\t\t\t\ttitle={ __( 'Restore variable', 'elementor' ) }\n\t\t\t\t\tonClose={ onClose }\n\t\t\t\t/>\n\n\t\t\t\t<Divider />\n\n\t\t\t\t<PopoverContent p={ 2 }>\n\t\t\t\t\t<FormField\n\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\tlabel={ __( 'Name', 'elementor' ) }\n\t\t\t\t\t\terrorMsg={ labelFieldError?.message }\n\t\t\t\t\t\tnoticeMsg={ labelHint( label ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t<LabelField\n\t\t\t\t\t\t\tid=\"variable-label\"\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\terror={ labelFieldError }\n\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\tsetLabel( newValue );\n\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonErrorChange={ ( errorMsg ) => {\n\t\t\t\t\t\t\t\tsetLabelFieldError( {\n\t\t\t\t\t\t\t\t\tvalue: label,\n\t\t\t\t\t\t\t\t\tmessage: errorMsg,\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</FormField>\n\t\t\t\t\t{ ValueField && (\n\t\t\t\t\t\t<FormField errorMsg={ valueFieldError } label={ __( 'Value', 'elementor' ) }>\n\t\t\t\t\t\t\t<Typography variant=\"h5\">\n\t\t\t\t\t\t\t\t<ValueField\n\t\t\t\t\t\t\t\t\tpropTypeKey={ propTypeKey }\n\t\t\t\t\t\t\t\t\tonPropTypeKeyChange={ ( key: string ) => setPropTypeKey( key ) }\n\t\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\t\tonChange={ ( newValue ) => {\n\t\t\t\t\t\t\t\t\t\tsetValue( newValue );\n\t\t\t\t\t\t\t\t\t\tsetErrorMessage( '' );\n\t\t\t\t\t\t\t\t\t\tsetValueFieldError( '' );\n\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\tonValidationChange={ setValueFieldError }\n\t\t\t\t\t\t\t\t\tpropType={ propType }\n\t\t\t\t\t\t\t\t\tonKeyDown={ handleKeyDown }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</FormField>\n\t\t\t\t\t) }\n\n\t\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t\t</PopoverContent>\n\n\t\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isSubmitDisabled } onClick={ handleRestore }>\n\t\t\t\t\t\t{ __( 'Restore', 'elementor' ) }\n\t\t\t\t\t</Button>\n\t\t\t\t</CardActions>\n\t\t\t</PopoverBody>\n\t\t</PopoverContentRefContextProvider>\n\t);\n};\n","import * as React from 'react';\nimport { Alert, AlertAction, AlertTitle, ClickAwayListener, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype DeletedVariableAlertProps = {\n\tonClose: () => void;\n\tonUnlink?: () => void;\n\tonRestore?: () => void;\n\tlabel: string;\n};\n\nexport const DeletedVariableAlert = ( { onClose, onUnlink, onRestore, label }: DeletedVariableAlertProps ) => {\n\treturn (\n\t\t<ClickAwayListener onClickAway={ onClose }>\n\t\t\t<Alert\n\t\t\t\tvariant=\"standard\"\n\t\t\t\tseverity=\"warning\"\n\t\t\t\tonClose={ onClose }\n\t\t\t\taction={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ onUnlink && (\n\t\t\t\t\t\t\t<AlertAction variant=\"contained\" onClick={ onUnlink }>\n\t\t\t\t\t\t\t\t{ __( 'Unlink', 'elementor' ) }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ onRestore && (\n\t\t\t\t\t\t\t<AlertAction variant=\"outlined\" onClick={ onRestore }>\n\t\t\t\t\t\t\t\t{ __( 'Restore', 'elementor' ) }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tsx={ { maxWidth: 300 } }\n\t\t\t>\n\t\t\t\t<AlertTitle>{ __( 'Deleted variable', 'elementor' ) }</AlertTitle>\n\t\t\t\t<Typography variant=\"body2\" color=\"textPrimary\">\n\t\t\t\t\t{ __( 'The variable', 'elementor' ) }\n\t\t\t\t\t&nbsp;&apos;\n\t\t\t\t\t<Typography variant=\"body2\" component=\"span\" sx={ { lineBreak: 'anywhere' } }>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t\t&apos;&nbsp;\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'has been deleted, but it is still referenced in this location. You may restore the variable or unlink it to assign a different value.',\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t</Typography>\n\t\t\t</Alert>\n\t\t</ClickAwayListener>\n\t);\n};\n","import * as React from 'react';\nimport { AlertTriangleFilledIcon } from '@elementor/icons';\nimport { Box, Chip, type ChipProps, type Theme, Tooltip, Typography } from '@elementor/ui';\n\ninterface WarningVariableTagProps extends ChipProps {\n\tlabel: string;\n\tsuffix?: string;\n}\n\nexport const WarningVariableTag = React.forwardRef< HTMLDivElement, WarningVariableTagProps >(\n\t( { label, suffix, onClick, icon, ...props }, ref ) => {\n\t\tconst displayText = suffix ? `${ label } (${ suffix })` : label;\n\n\t\treturn (\n\t\t\t<Chip\n\t\t\t\tref={ ref }\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tcolor=\"warning\"\n\t\t\t\tshape=\"rounded\"\n\t\t\t\tvariant=\"standard\"\n\t\t\t\tonClick={ onClick }\n\t\t\t\ticon={ <AlertTriangleFilledIcon /> }\n\t\t\t\tlabel={\n\t\t\t\t\t<Tooltip title={ displayText } placement=\"top\">\n\t\t\t\t\t\t<Box sx={ { display: 'inline-grid', minWidth: 0 } }>\n\t\t\t\t\t\t\t<Typography variant=\"caption\" noWrap sx={ { lineHeight: 1.34 } }>\n\t\t\t\t\t\t\t\t{ displayText }\n\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t</Box>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t}\n\t\t\t\tsx={ {\n\t\t\t\t\theight: ( theme: Theme ) => theme.spacing( 3.5 ),\n\t\t\t\t\tborderRadius: ( theme: Theme ) => theme.spacing( 1 ),\n\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\twidth: '100%',\n\t\t\t\t} }\n\t\t\t\t{ ...props }\n\t\t\t/>\n\t\t);\n\t}\n);\n\nWarningVariableTag.displayName = 'WarningVariableTag';\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { Backdrop, bindPopover, Box, Infotip, Popover, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { type Variable } from '../../../types';\nimport { VariableSelectionPopover } from '../../variable-selection-popover';\nimport { MismatchVariableAlert } from '../mismatch-variable-alert';\nimport { WarningVariableTag } from '../tags/warning-variable-tag';\n\ntype Props = {\n\tvariable: Variable;\n};\n\nexport const MismatchVariable = ( { variable }: Props ) => {\n\tconst { setValue, value } = useBoundProp();\n\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\n\tconst popupId = useId();\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: `elementor-variables-list-${ popupId }`,\n\t} );\n\n\tconst [ infotipVisible, setInfotipVisible ] = useState( false );\n\n\tconst toggleInfotip = () => setInfotipVisible( ( prev ) => ! prev );\n\tconst closeInfotip = () => setInfotipVisible( false );\n\n\tconst triggerSelect = () => {\n\t\tcloseInfotip();\n\n\t\tpopupState.setAnchorEl( anchorRef.current );\n\t\tpopupState.open();\n\t};\n\n\tconst clearValue = () => {\n\t\tcloseInfotip();\n\t\tsetValue( null );\n\t};\n\n\tconst showClearButton = !! value;\n\n\treturn (\n\t\t<Box ref={ anchorRef }>\n\t\t\t{ infotipVisible && <Backdrop open onClick={ closeInfotip } invisible /> }\n\t\t\t<Infotip\n\t\t\t\tcolor=\"warning\"\n\t\t\t\tplacement=\"right-start\"\n\t\t\t\topen={ infotipVisible }\n\t\t\t\tdisableHoverListener\n\t\t\t\tonClose={ closeInfotip }\n\t\t\t\tcontent={\n\t\t\t\t\t<MismatchVariableAlert\n\t\t\t\t\t\tonClose={ closeInfotip }\n\t\t\t\t\t\tonClear={ showClearButton ? clearValue : undefined }\n\t\t\t\t\t\ttriggerSelect={ triggerSelect }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpopper: {\n\t\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'offset',\n\t\t\t\t\t\t\t\toptions: { offset: [ 0, 24 ] },\n\t\t\t\t\t\t\t},\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\t\t<WarningVariableTag\n\t\t\t\t\tlabel={ variable.label }\n\t\t\t\t\tonClick={ toggleInfotip }\n\t\t\t\t\tsuffix={ __( 'changed', 'elementor' ) }\n\t\t\t\t/>\n\t\t\t</Infotip>\n\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorEl={ anchorRef.current }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'right' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\tPaperProps={ {\n\t\t\t\t\tsx: { my: 1 },\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t>\n\t\t\t\t<VariableSelectionPopover\n\t\t\t\t\tselectedVariable={ variable }\n\t\t\t\t\tclosePopover={ popupState.close }\n\t\t\t\t\tpropTypeKey={ variable.type }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</Box>\n\t);\n};\n","import * as React from 'react';\nimport { Alert, AlertAction, AlertTitle, ClickAwayListener, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype AlertProps = {\n\tonClose: () => void;\n\tonClear?: () => void;\n\ttriggerSelect?: () => void;\n};\n\nconst i18n = {\n\ttitle: __( 'Variable has changed', 'elementor' ),\n\tmessage: __(\n\t\t`This variable is no longer compatible with this property. You can clear it or select a different one.`,\n\t\t'elementor'\n\t),\n\tbuttons: {\n\t\tclear: __( 'Clear', 'elementor' ),\n\t\tselect: __( 'Select variable', 'elementor' ),\n\t},\n};\n\nexport const MismatchVariableAlert = ( { onClose, onClear, triggerSelect }: AlertProps ) => {\n\treturn (\n\t\t<ClickAwayListener onClickAway={ onClose }>\n\t\t\t<Alert\n\t\t\t\tvariant=\"standard\"\n\t\t\t\tseverity=\"warning\"\n\t\t\t\tonClose={ onClose }\n\t\t\t\taction={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ onClear && (\n\t\t\t\t\t\t\t<AlertAction variant=\"contained\" onClick={ onClear }>\n\t\t\t\t\t\t\t\t{ i18n.buttons.clear }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t\t{ triggerSelect && (\n\t\t\t\t\t\t\t<AlertAction variant=\"outlined\" onClick={ triggerSelect }>\n\t\t\t\t\t\t\t\t{ i18n.buttons.select }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tsx={ { maxWidth: 300 } }\n\t\t\t>\n\t\t\t\t<AlertTitle>{ i18n.title }</AlertTitle>\n\t\t\t\t<Typography variant=\"body2\" color=\"textPrimary\">\n\t\t\t\t\t{ i18n.message }\n\t\t\t\t</Typography>\n\t\t\t</Alert>\n\t\t</ClickAwayListener>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { Backdrop, Infotip } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { MissingVariableAlert } from '../missing-variable-alert';\nimport { WarningVariableTag } from '../tags/warning-variable-tag';\n\nexport const MissingVariable = () => {\n\tconst { setValue } = useBoundProp();\n\n\tconst [ infotipVisible, setInfotipVisible ] = useState< boolean >( false );\n\tconst toggleInfotip = () => setInfotipVisible( ( prev ) => ! prev );\n\tconst closeInfotip = () => setInfotipVisible( false );\n\n\tconst clearValue = () => setValue( null );\n\n\treturn (\n\t\t<>\n\t\t\t{ infotipVisible && <Backdrop open onClick={ closeInfotip } invisible /> }\n\t\t\t<Infotip\n\t\t\t\tcolor=\"warning\"\n\t\t\t\tplacement=\"right-start\"\n\t\t\t\topen={ infotipVisible }\n\t\t\t\tdisableHoverListener\n\t\t\t\tonClose={ closeInfotip }\n\t\t\t\tcontent={ <MissingVariableAlert onClose={ closeInfotip } onClear={ clearValue } /> }\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpopper: {\n\t\t\t\t\t\tmodifiers: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: 'offset',\n\t\t\t\t\t\t\t\toptions: { offset: [ 0, 24 ] },\n\t\t\t\t\t\t\t},\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\t\t<WarningVariableTag label={ __( 'Missing variable', 'elementor' ) } onClick={ toggleInfotip } />\n\t\t\t</Infotip>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { Alert, AlertAction, AlertTitle, ClickAwayListener, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype MissingVariableAlertProps = {\n\tonClose: () => void;\n\tonClear?: () => void;\n};\n\nexport const MissingVariableAlert = ( { onClose, onClear }: MissingVariableAlertProps ) => {\n\treturn (\n\t\t<ClickAwayListener onClickAway={ onClose }>\n\t\t\t<Alert\n\t\t\t\tvariant=\"standard\"\n\t\t\t\tseverity=\"warning\"\n\t\t\t\tonClose={ onClose }\n\t\t\t\taction={\n\t\t\t\t\t<>\n\t\t\t\t\t\t{ onClear && (\n\t\t\t\t\t\t\t<AlertAction variant=\"contained\" onClick={ onClear }>\n\t\t\t\t\t\t\t\t{ __( 'Clear', 'elementor' ) }\n\t\t\t\t\t\t\t</AlertAction>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tsx={ { maxWidth: 300 } }\n\t\t\t>\n\t\t\t\t<AlertTitle>{ __( 'This variable is missing', 'elementor' ) }</AlertTitle>\n\t\t\t\t<Typography variant=\"body2\" color=\"textPrimary\">\n\t\t\t\t\t{ __(\n\t\t\t\t\t\t'It may have been deleted. Try clearing this field and select a different value or variable.',\n\t\t\t\t\t\t'elementor'\n\t\t\t\t\t) }\n\t\t\t\t</Typography>\n\t\t\t</Alert>\n\t\t</ClickAwayListener>\n\t);\n};\n","import * as React from 'react';\nimport { type PopoverActionProps, useBoundProp } from '@elementor/editor-editing-panel';\nimport { type PropType } from '@elementor/editor-props';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { VariableSelectionPopover } from '../components/variable-selection-popover';\nimport { trackVariableEvent } from '../utils/tracking';\nimport { getVariableType } from '../variables-registry/variable-type-registry';\n\nexport const usePropVariableAction = (): PopoverActionProps => {\n\tconst { propType, path } = useBoundProp();\n\tconst variable = resolveVariableFromPropType( propType );\n\n\treturn {\n\t\tvisible: Boolean( variable ),\n\t\ticon: ColorFilterIcon,\n\t\ttitle: __( 'Variables', 'elementor' ),\n\t\tcontent: ( { close: closePopover } ) => {\n\t\t\tif ( ! variable ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\ttrackOpenVariablePopover( path, variable.variableType );\n\n\t\t\treturn <VariableSelectionPopover closePopover={ closePopover } propTypeKey={ variable.propTypeUtil.key } />;\n\t\t},\n\t};\n};\n\nconst resolveVariableFromPropType = ( propType: PropType ) => {\n\tif ( propType.kind !== 'union' ) {\n\t\treturn undefined;\n\t}\n\n\tfor ( const key of Object.keys( propType.prop_types ) ) {\n\t\tconst variable = getVariableType( key );\n\n\t\tif ( variable ) {\n\t\t\treturn variable;\n\t\t}\n\t}\n\n\treturn undefined;\n};\n\nconst trackOpenVariablePopover = ( path: string[], variableType: string ) => {\n\ttrackVariableEvent( {\n\t\tvarType: variableType,\n\t\tcontrolPath: path.join( '.' ),\n\t\taction: 'open',\n\t} );\n};\n","import { getMCPByDomain } from '@elementor/editor-mcp';\nimport { z } from '@elementor/schema';\n\nimport { service } from '../service';\nimport { GLOBAL_VARIABLES_URI } from './variables-resource';\n\nexport const initManageVariableTool = () => {\n\tgetMCPByDomain( 'variables' ).addTool( {\n\t\tname: 'manage-global-variable',\n\t\tschema: {\n\t\t\taction: z.enum( [ 'create', 'update', 'delete' ] ).describe( 'Operation to perform' ),\n\t\t\tid: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe( 'Variable id (required for update/delete). Get from list-global-variables.' ),\n\t\t\ttype: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe( 'Variable type: \"global-color-variable\" or \"global-font-variable\" (required for create)' ),\n\t\t\tlabel: z.string().optional().describe( 'Variable label (required for create/update)' ),\n\t\t\tvalue: z.string().optional().describe( 'Variable value (required for create/update)' ),\n\t\t},\n\t\toutputSchema: {\n\t\t\tstatus: z.enum( [ 'ok' ] ).describe( 'Operation status' ),\n\t\t\tmessage: z.string().optional().describe( 'Error details if status is error' ),\n\t\t},\n\t\tmodelPreferences: {\n\t\t\tintelligencePriority: 0.75,\n\t\t\tspeedPriority: 0.75,\n\t\t},\n\t\trequiredResources: [\n\t\t\t{\n\t\t\t\turi: GLOBAL_VARIABLES_URI,\n\t\t\t\tdescription: 'Global variables',\n\t\t\t},\n\t\t],\n\t\tdescription: `Manages global variables (create/update/delete). Existing variables available in resources.\nCREATE: requires type, label, value. Ensure label is unique.\nUPDATE: requires id, label, value. When renaming: keep existing value. When updating value: keep exact label.\nDELETE: requires id. DESTRUCTIVE - confirm with user first.\n\n# NAMING - IMPORTANT\nthe variables names should ALWAYS be lowercased and dashed spaced. example: \"Headline Primary\" should be \"headline-primary\"\n`,\n\t\thandler: async ( params ) => {\n\t\t\tconst operations = getServiceActions( service );\n\t\t\tconst op = operations[ params.action ];\n\t\t\tif ( op ) {\n\t\t\t\tawait op( params );\n\t\t\t\treturn {\n\t\t\t\t\tstatus: 'ok',\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow new Error( `Unknown action ${ params.action }` );\n\t\t},\n\t\tisDestructive: true, // Because delete is destructive\n\t} );\n};\n\ntype Opts< T extends Record< string, string > > = Partial< T > & {\n\t[ k: string ]: unknown;\n};\n\nfunction getServiceActions( svc: typeof service ) {\n\treturn {\n\t\tcreate( { type, label, value }: Opts< { type: string; label: string; value: string } > ) {\n\t\t\tif ( ! type || ! label || ! value ) {\n\t\t\t\tthrow new Error( 'Create requires type, label, and value' );\n\t\t\t}\n\t\t\treturn svc.create( { type, label, value } );\n\t\t},\n\t\tupdate( { id, label, value }: Opts< { id: string; label: string; value: string } > ) {\n\t\t\tif ( ! id || ! label || ! value ) {\n\t\t\t\tthrow new Error( 'Update requires id, label, and value' );\n\t\t\t}\n\t\t\treturn svc.update( id, { label, value } );\n\t\t},\n\t\tdelete( { id }: Opts< { id: string } > ) {\n\t\t\tif ( ! id ) {\n\t\t\t\tthrow new Error( 'delete requires id' );\n\t\t\t}\n\t\t\treturn svc.delete( id );\n\t\t},\n\t};\n}\n","import { getMCPByDomain } from '@elementor/editor-mcp';\n\nimport { service } from '../service';\nimport { type TVariable } from '../storage';\n\nexport const GLOBAL_VARIABLES_URI = 'elementor://global-variables';\n\nexport const initVariablesResource = () => {\n\tconst canvasMcpEntry = getMCPByDomain( 'canvas' );\n\tconst variablesMcpEntry = getMCPByDomain( 'variables' );\n\n\t[ canvasMcpEntry, variablesMcpEntry ].forEach( ( entry ) => {\n\t\tconst { mcpServer } = entry;\n\t\tmcpServer.resource(\n\t\t\t'global-variables',\n\t\t\tGLOBAL_VARIABLES_URI,\n\t\t\t{\n\t\t\t\tdescription:\n\t\t\t\t\t'List of Global variables. Defined as a key-value store (ID as key, global-variable object as value)',\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst variables: Record< string, TVariable > = {};\n\t\t\t\tObject.entries( service.variables() ).forEach( ( [ id, variable ] ) => {\n\t\t\t\t\tif ( ! variable.deleted ) {\n\t\t\t\t\t\tvariables[ id ] = variable;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\treturn {\n\t\t\t\t\tcontents: [ { uri: GLOBAL_VARIABLES_URI, text: JSON.stringify( variables ) } ],\n\t\t\t\t};\n\t\t\t}\n\t\t);\n\n\t\twindow.addEventListener( 'variables:updated', () => {\n\t\t\tmcpServer.server.sendResourceUpdated( {\n\t\t\t\turi: GLOBAL_VARIABLES_URI,\n\t\t\t\tcontents: [ { uri: GLOBAL_VARIABLES_URI, text: localStorage[ 'elementor-global-variables' ] } ],\n\t\t\t} );\n\t\t} );\n\t} );\n};\n","import { initManageVariableTool } from './manage-variable-tool';\nimport { initVariablesResource } from './variables-resource';\n\nexport function initMcp() {\n\tinitManageVariableTool();\n\tinitVariablesResource();\n}\n","import * as React from 'react';\nimport { colorPropTypeUtil, sizePropTypeUtil, stringPropTypeUtil } from '@elementor/editor-props';\nimport { CtaButton } from '@elementor/editor-ui';\nimport { BrushIcon, ExpandDiagonalIcon, TextIcon } from '@elementor/icons';\n\nimport { ColorField } from './components/fields/color-field';\nimport { FontField } from './components/fields/font-field';\nimport { ColorIndicator } from './components/ui/color-indicator';\nimport { colorVariablePropTypeUtil } from './prop-types/color-variable-prop-type';\nimport { fontVariablePropTypeUtil } from './prop-types/font-variable-prop-type';\nimport { sizeVariablePropTypeUtil } from './prop-types/size-variable-prop-type';\nimport { EmptyTransformer } from './transformers/empty-transformer';\nimport { registerVariableType } from './variables-registry/variable-type-registry';\n\nexport function registerVariableTypes() {\n\tregisterVariableType( {\n\t\tkey: colorVariablePropTypeUtil.key,\n\t\tvalueField: ColorField,\n\t\ticon: BrushIcon,\n\t\tpropTypeUtil: colorVariablePropTypeUtil,\n\t\tfallbackPropTypeUtil: colorPropTypeUtil,\n\t\tvariableType: 'color',\n\t\tstartIcon: ( { value } ) => <ColorIndicator size=\"inherit\" component=\"span\" value={ value } />,\n\t\tdefaultValue: '#ffffff',\n\t} );\n\n\tregisterVariableType( {\n\t\tkey: fontVariablePropTypeUtil.key,\n\t\tvalueField: FontField,\n\t\ticon: TextIcon,\n\t\tpropTypeUtil: fontVariablePropTypeUtil,\n\t\tfallbackPropTypeUtil: stringPropTypeUtil,\n\t\tvariableType: 'font',\n\t\tdefaultValue: 'Roboto',\n\t} );\n\n\tconst sizePromotions = {\n\t\ticon: ExpandDiagonalIcon,\n\t\tpropTypeUtil: sizeVariablePropTypeUtil,\n\t\tfallbackPropTypeUtil: sizePropTypeUtil,\n\t\tstyleTransformer: EmptyTransformer,\n\t\tvariableType: 'size',\n\t\tselectionFilter: () => [],\n\t\temptyState: <CtaButton size=\"small\" href={ 'https://go.elementor.com/go-pro-panel-size-variable/' } />,\n\t};\n\n\tregisterVariableType( {\n\t\t...sizePromotions,\n\t\tkey: sizeVariablePropTypeUtil.key,\n\t\tdefaultValue: '0px',\n\t} );\n\n\tregisterVariableType( {\n\t\t...sizePromotions,\n\t\tkey: 'global-custom-size-variable',\n\t} );\n}\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { UnstableColorField } from '@elementor/ui';\n\nimport { usePopoverContentRef } from '../../context/variable-selection-popover.context';\nimport { validateValue } from '../../utils/validations';\n\ntype ColorFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n\tonValidationChange?: ( errorMessage: string ) => void;\n};\n\nexport const ColorField = ( { value, onChange, onValidationChange }: ColorFieldProps ) => {\n\tconst [ color, setColor ] = useState( value );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\n\tconst defaultRef = useRef< HTMLDivElement >( null );\n\tconst anchorRef = usePopoverContentRef() ?? defaultRef.current;\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetColor( newValue );\n\n\t\tconst errorMsg = validateValue( newValue );\n\t\tsetErrorMessage( errorMsg );\n\t\tonValidationChange?.( errorMsg );\n\n\t\tonChange( errorMsg ? '' : newValue );\n\t};\n\n\treturn (\n\t\t<UnstableColorField\n\t\t\tid=\"color-variable-field\"\n\t\t\tsize=\"tiny\"\n\t\t\tfullWidth\n\t\t\tvalue={ color }\n\t\t\tonChange={ handleChange }\n\t\t\terror={ errorMessage || undefined }\n\t\t\tslotProps={ {\n\t\t\t\tcolorPicker: {\n\t\t\t\t\tanchorEl: anchorRef,\n\t\t\t\t\tanchorOrigin: { vertical: 'top', horizontal: 'right' },\n\t\t\t\t\ttransformOrigin: { vertical: 'top', horizontal: -10 },\n\t\t\t\t\tslotProps: {\n\t\t\t\t\t\tcolorIndicator: {\n\t\t\t\t\t\t\tsize: 'inherit',\n\t\t\t\t\t\t\tsx: {\n\t\t\t\t\t\t\t\tborderRadius: 0.5,\n\t\t\t\t\t\t\t},\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 * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { enqueueFont, ItemSelector } from '@elementor/editor-controls';\nimport { useFontFamilies, useSectionWidth } from '@elementor/editor-editing-panel';\nimport { ChevronDownIcon, TextIcon } from '@elementor/icons';\nimport { bindPopover, bindTrigger, Popover, UnstableTag, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { usePopoverContentRef } from '../../context/variable-selection-popover.context';\nimport { validateValue } from '../../utils/validations';\n\ntype FontFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n\tonValidationChange?: ( errorMessage: string ) => void;\n};\n\nexport const FontField = ( { value, onChange, onValidationChange }: FontFieldProps ) => {\n\tconst [ fontFamily, setFontFamily ] = useState( value );\n\n\tconst defaultRef = useRef< HTMLDivElement >( null );\n\tconst anchorRef = usePopoverContentRef() ?? defaultRef.current;\n\n\tconst fontPopoverState = usePopupState( { variant: 'popover' } );\n\n\tconst fontFamilies = useFontFamilies();\n\tconst sectionWidth = useSectionWidth();\n\n\tconst mapFontSubs = React.useMemo( () => {\n\t\treturn fontFamilies.map( ( { label, fonts } ) => ( {\n\t\t\tlabel,\n\t\t\titems: fonts,\n\t\t} ) );\n\t}, [ fontFamilies ] );\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetFontFamily( newValue );\n\n\t\tconst errorMsg = validateValue( newValue );\n\t\tonValidationChange?.( errorMsg );\n\n\t\tonChange( errorMsg ? '' : newValue );\n\t};\n\n\tconst handleFontFamilyChange = ( newFontFamily: string ) => {\n\t\thandleChange( newFontFamily );\n\t\tfontPopoverState.close();\n\t};\n\n\tconst id = useId();\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tid={ id }\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\tlabel={ fontFamily }\n\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t{ ...bindTrigger( fontPopoverState ) }\n\t\t\t\tfullWidth\n\t\t\t/>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorEl={ anchorRef }\n\t\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: -28 } }\n\t\t\t\t{ ...bindPopover( fontPopoverState ) }\n\t\t\t>\n\t\t\t\t<ItemSelector\n\t\t\t\t\tid=\"font-family-variables-selector\"\n\t\t\t\t\titemsList={ mapFontSubs }\n\t\t\t\t\tselectedItem={ fontFamily }\n\t\t\t\t\tonItemChange={ handleFontFamilyChange }\n\t\t\t\t\tonClose={ fontPopoverState.close }\n\t\t\t\t\tsectionWidth={ sectionWidth }\n\t\t\t\t\ttitle={ __( 'Font family', 'elementor' ) }\n\t\t\t\t\titemStyle={ ( item ) => ( { fontFamily: item.value } ) }\n\t\t\t\t\tonDebounce={ enqueueFont }\n\t\t\t\t\ticon={ TextIcon as React.ElementType< { fontSize: string } > }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const sizeVariablePropTypeUtil = createPropUtils( 'global-size-variable', z.string() );\n","import { createTransformer } from '@elementor/editor-canvas';\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const EmptyTransformer = createTransformer( ( _value: string ) => {\n\treturn null;\n} );\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport {\n\t__privateUseListenTo as useListenTo,\n\tcommandEndEvent,\n\tgetCanvasIframeDocument,\n} from '@elementor/editor-v1-adapters';\nimport { Portal } from '@elementor/ui';\n\nimport { styleVariablesRepository } from '../style-variables-repository';\nimport { type StyleVariables, type Variable } from '../types';\n\nconst VARIABLES_WRAPPER = 'body';\n\nexport function StyleVariablesRenderer() {\n\tconst container = usePortalContainer();\n\tconst styleVariables = useStyleVariables();\n\n\tconst hasVariables = Object.keys( styleVariables ).length > 0;\n\n\tif ( ! container || ! hasVariables ) {\n\t\treturn null;\n\t}\n\n\tconst cssVariables = convertToCssVariables( styleVariables );\n\tconst wrappedCss = `${ VARIABLES_WRAPPER }{${ cssVariables }}`;\n\n\treturn (\n\t\t<Portal container={ container }>\n\t\t\t<style data-e-style-id=\"e-variables\" key={ wrappedCss }>\n\t\t\t\t{ wrappedCss }\n\t\t\t</style>\n\t\t</Portal>\n\t);\n}\n\nfunction usePortalContainer() {\n\treturn useListenTo( commandEndEvent( 'editor/documents/attach-preview' ), () => getCanvasIframeDocument()?.head );\n}\n\nfunction useStyleVariables() {\n\tconst [ variables, setVariables ] = useState< StyleVariables >( {} );\n\n\tuseEffect( () => {\n\t\tconst unsubscribe = styleVariablesRepository.subscribe( setVariables );\n\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t};\n\t}, [] );\n\n\treturn variables;\n}\n\nfunction cssVariableDeclaration( key: string, variable: Variable ) {\n\tconst variableName = variable?.deleted ? key : variable.label;\n\tconst value = variable.value;\n\n\treturn `--${ variableName }:${ value };`;\n}\n\nfunction convertToCssVariables( variables: StyleVariables ): string {\n\tconst listOfVariables = Object.entries( variables );\n\treturn listOfVariables.map( ( [ key, variable ] ) => cssVariableDeclaration( key, variable ) ).join( '' );\n}\n","import { injectIntoRepeaterItemIcon, injectIntoRepeaterItemLabel } from '@elementor/editor-controls';\nimport { backgroundColorOverlayPropTypeUtil, type PropValue, shadowPropTypeUtil } from '@elementor/editor-props';\n\nimport {\n\tBackgroundRepeaterColorIndicator,\n\tBackgroundRepeaterLabel,\n\tBoxShadowRepeaterColorIndicator,\n} from './components/variables-repeater-item-slot';\nimport { colorVariablePropTypeUtil } from './prop-types/color-variable-prop-type';\n\nexport function registerRepeaterInjections() {\n\tinjectIntoRepeaterItemIcon( {\n\t\tid: 'color-variables-background-icon',\n\t\tcomponent: BackgroundRepeaterColorIndicator,\n\t\tcondition: ( { value: prop }: { value: PropValue } ) => {\n\t\t\treturn hasAssignedColorVariable( backgroundColorOverlayPropTypeUtil.extract( prop )?.color );\n\t\t},\n\t} );\n\n\tinjectIntoRepeaterItemIcon( {\n\t\tid: 'color-variables-icon',\n\t\tcomponent: BoxShadowRepeaterColorIndicator,\n\t\tcondition: ( { value: prop }: { value: PropValue } ) => {\n\t\t\treturn hasAssignedColorVariable( shadowPropTypeUtil.extract( prop )?.color );\n\t\t},\n\t} );\n\n\tinjectIntoRepeaterItemLabel( {\n\t\tid: 'color-variables-label',\n\t\tcomponent: BackgroundRepeaterLabel,\n\t\tcondition: ( { value: prop }: { value: PropValue } ) => {\n\t\t\treturn hasAssignedColorVariable( backgroundColorOverlayPropTypeUtil.extract( prop )?.color );\n\t\t},\n\t} );\n}\n\nconst hasAssignedColorVariable = ( propValue: PropValue ): boolean => {\n\treturn !! colorVariablePropTypeUtil.isValid( propValue );\n};\n","import * as React from 'react';\nimport { type BackgroundColorOverlayPropValue, type BoxShadowPropValue, type PropValue } from '@elementor/editor-props';\n\nimport { useVariable } from '../hooks/use-prop-variables';\nimport { ColorIndicator } from './ui/color-indicator';\n\nconst useColorVariable = ( value: BackgroundColorOverlayPropValue | BoxShadowPropValue ) => {\n\tconst variableId = value?.value?.color?.value;\n\n\treturn useVariable( variableId || '' );\n};\n\nexport const BackgroundRepeaterColorIndicator = ( { value }: { value: PropValue } ) => {\n\tconst colorVariable = useColorVariable( value as BackgroundColorOverlayPropValue );\n\n\treturn <ColorIndicator component=\"span\" size=\"inherit\" value={ colorVariable?.value } />;\n};\n\nexport const BackgroundRepeaterLabel = ( { value }: { value: PropValue } ) => {\n\tconst colorVariable = useColorVariable( value as BackgroundColorOverlayPropValue );\n\n\treturn <span>{ colorVariable?.label }</span>;\n};\n\nexport const BoxShadowRepeaterColorIndicator = ( { value }: { value: PropValue } ) => {\n\tconst colorVariable = useColorVariable( value as BoxShadowPropValue );\n\n\treturn <ColorIndicator component=\"span\" size=\"inherit\" value={ colorVariable?.value } />;\n};\n","import { service } from '../service';\n\nconst defaultResolver = ( key: string ) => ( value: unknown ) => {\n\tconst idOrLabel = String( value );\n\treturn {\n\t\t$$type: key,\n\t\tvalue: service.variables()[ idOrLabel ] ? idOrLabel : service.findIdByLabel( idOrLabel ),\n\t};\n};\n\nexport const globalVariablesLLMResolvers = {\n\t'global-color-variable': defaultResolver( 'global-color-variable' ),\n\t'global-font-variable': defaultResolver( 'global-font-variable' ),\n\t'global-size-variable': defaultResolver( 'global-size-variable' ),\n};\n"],"mappings":"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","names":["import_editor_editing_panel","import_editor_panels","import_editor_props","React","import_react","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_canvas","import_ui","import_i18n","import_i18n","id","id","id","import_editor_props","import_schema","id","id","id","import_editor_canvas","id","registerVariableType","getVariableType","getVariableTypes","hasVariableType","React","import_ui","import_i18n","React","import_ui","import_i18n","React","import_ui","import_i18n","import_react","import_react","import_react","React","import_react","id","createVariable","React","import_react","import_editor_ui","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_icons","import_ui","import_i18n","React","import_react","import_editor_ui","import_ui","id","errorMsg","React","import_react","import_icons","import_ui","React","import_ui","React","import_react","import_ui","id","createPanel","createVariable","React","import_editor_controls","import_react","React","import_editor_controls","import_icons","import_ui","React","import_react","import_editor_v1_adapters","React","import_react","import_ui","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","import_editor_controls","import_editor_controls","import_editor_props","React","import_ui","id","SIZE","React","import_react","import_editor_controls","import_editor_current_user","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","React","import_react","import_icons","import_ui","import_i18n","SIZE","React","import_react","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","import_ui","SIZE","React","import_icons","import_ui","import_i18n","SIZE","Tag","SIZE","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_ui","import_i18n","SIZE","React","import_ui","import_i18n","React","import_icons","import_ui","id","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_ui","import_i18n","React","import_react","import_editor_controls","import_ui","import_i18n","React","import_ui","import_i18n","React","import_editor_editing_panel","import_icons","import_i18n","import_editor_mcp","import_schema","id","id","React","import_editor_props","import_editor_ui","import_icons","React","import_react","import_ui","React","import_react","import_editor_controls","import_editor_editing_panel","import_icons","import_ui","import_i18n","id","import_editor_props","import_schema","import_editor_canvas","React","import_react","import_editor_v1_adapters","import_ui","useListenTo","import_editor_controls","import_editor_props","React","registerPanel"]}