@elementor/editor-variables 3.35.0-443 → 3.35.0-444
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.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +29 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +29 -13
- package/dist/index.mjs.map +1 -1
- package/package.json +15 -15
- package/src/components/variables-manager/hooks/use-variables-manager-state.ts +8 -5
- package/src/components/variables-manager/variables-manager-panel.tsx +1 -1
- package/src/components/variables-manager/variables-manager-table.tsx +0 -1
- package/src/hooks/use-prop-variables.ts +5 -9
- package/src/utils/variables-to-list.ts +33 -0
- package/src/variables-registry/create-variable-type-registry.ts +1 -1
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/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.values( variables ).some( ( variable ) => ! variable.deleted );\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 \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 \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 } = useCurrentUserCapabilities();\n\n\treturn {\n\t\tcanAssign: () => canUser( 'edit_posts' ),\n\t\tcanUnlink: () => canUser( 'edit_posts' ),\n\t\tcanAdd: () => canUser( 'manage_options' ),\n\t\tcanDelete: () => canUser( 'manage_options' ),\n\t\tcanEdit: () => canUser( 'manage_options' ),\n\t\tcanRestore: () => canUser( 'manage_options' ),\n\t\tcanManageSettings: () => canUser( 'manage_options' ),\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“{ searchValue }”.\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';\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 = () => {\n\t\tconst list = Object.entries( variables ).map( ( [ id, value ] ) => ( { ...value, id } ) );\n\t\tconst filtered = filterBySearch( list, searchValue );\n\n\t\treturn Object.fromEntries( filtered.map( ( { id, ...rest } ) => [ id, rest ] ) );\n\t};\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 { 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 ) => {\n\tconst variables = getVariables( false );\n\tconst matchingTypes = getMatchingTypes( propKey );\n\n\treturn Object.entries( variables )\n\t\t.filter( ( [ , variable ] ) => matchingTypes.includes( variable.type ) )\n\t\t.map( ( [ key, { label, value, order } ] ) => ( {\n\t\t\tkey,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t\torder,\n\t\t} ) );\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 * 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.filter( ( id ) => ! variables[ id ].deleted )\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 '\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' \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","id","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/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 \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 \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 } = useCurrentUserCapabilities();\n\n\treturn {\n\t\tcanAssign: () => canUser( 'edit_posts' ),\n\t\tcanUnlink: () => canUser( 'edit_posts' ),\n\t\tcanAdd: () => canUser( 'manage_options' ),\n\t\tcanDelete: () => canUser( 'manage_options' ),\n\t\tcanEdit: () => canUser( 'manage_options' ),\n\t\tcanRestore: () => canUser( 'manage_options' ),\n\t\tcanManageSettings: () => canUser( 'manage_options' ),\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“{ searchValue }”.\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 '\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' \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"]}
|