@elementor/editor-variables 0.15.0 → 0.16.0
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/CHANGELOG.md +38 -0
- package/dist/index.js +647 -495
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +637 -512
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -9
- package/src/components/color-variable-creation.tsx +11 -52
- package/src/components/color-variable-edit.tsx +88 -83
- package/src/components/fields/color-field.tsx +54 -0
- package/src/components/fields/font-field.tsx +85 -0
- package/src/components/fields/label-field.tsx +54 -0
- package/src/components/font-variable-creation.tsx +13 -72
- package/src/components/font-variable-edit.tsx +86 -111
- package/src/components/ui/delete-confirmation-dialog.tsx +55 -0
- package/src/components/ui/menu-item-content.tsx +2 -5
- package/src/components/ui/{variable-tag.tsx → tags/assigned-tag.tsx} +1 -1
- package/src/components/ui/tags/deleted-tag.tsx +26 -0
- package/src/components/ui/variable/assigned-variable.tsx +70 -0
- package/src/components/ui/variable/deleted-variable.tsx +20 -0
- package/src/controls/color-variable-control.tsx +15 -48
- package/src/controls/font-variable-control.tsx +14 -43
- package/src/init-color-variables.ts +3 -48
- package/src/repeater-injections.ts +35 -0
- package/src/utils/validations.ts +42 -0
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/init.ts","../src/init-color-variables.ts","../src/components/variables-repeater-item-slot.tsx","../src/hooks/use-prop-variables.ts","../src/api.ts","../src/storage.ts","../src/create-style-variables-repository.ts","../src/style-variables-repository.ts","../src/service.ts","../src/components/ui/color-indicator.tsx","../src/controls/color-variable-control.tsx","../src/components/ui/variable-tag.tsx","../src/components/variable-selection-popover.tsx","../src/prop-types/color-variable-prop-type.ts","../src/prop-types/font-variable-prop-type.ts","../src/components/color-variable-creation.tsx","../src/components/variable-selection-popover.context.ts","../src/components/color-variable-edit.tsx","../src/components/color-variables-selection.tsx","../src/components/ui/menu-item-content.tsx","../src/components/ui/no-search-results.tsx","../src/components/ui/no-variables.tsx","../src/components/ui/styled-menu-list.tsx","../src/components/font-variable-creation.tsx","../src/components/font-variable-edit.tsx","../src/components/font-variables-selection.tsx","../src/hooks/use-prop-color-variable-action.tsx","../src/utils.ts","../src/transformers/variable-transformer.ts","../src/init-font-variables.ts","../src/controls/font-variable-control.tsx","../src/hooks/use-prop-font-variable-action.tsx","../src/renderers/style-variables-renderer.tsx","../src/sync/get-canvas-iframe-document.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoTop } from '@elementor/editor';\n\nimport { initColorVariables } from './init-color-variables';\nimport { initFontVariables } from './init-font-variables';\nimport { StyleVariablesRenderer } from './renderers/style-variables-renderer';\nimport { service as variablesService } from './service';\n\nexport function init() {\n\tinitColorVariables();\n\tinitFontVariables();\n\n\tvariablesService.init();\n\n\tinjectIntoTop( {\n\t\tid: 'canvas-style-variables-render',\n\t\tcomponent: StyleVariablesRenderer,\n\t} );\n}\n","import { styleTransformersRegistry } from '@elementor/editor-canvas';\nimport { injectIntoRepeaterItemIcon, injectIntoRepeaterItemLabel } from '@elementor/editor-controls';\nimport { controlActionsMenu, registerControlReplacement } from '@elementor/editor-editing-panel';\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 { ColorVariableControl } from './controls/color-variable-control';\nimport { usePropColorVariableAction } from './hooks/use-prop-color-variable-action';\nimport { colorVariablePropTypeUtil } from './prop-types/color-variable-prop-type';\nimport { variableTransformer } from './transformers/variable-transformer';\nimport { hasAssignedColorVariable } from './utils';\n\nconst { registerPopoverAction } = controlActionsMenu;\n\nconst conditions = {\n\tbackgroundOverlay: ( { value: prop }: { value: PropValue } ) => {\n\t\treturn hasAssignedColorVariable( backgroundColorOverlayPropTypeUtil.extract( prop )?.color );\n\t},\n\n\tboxShadow: ( { value: prop }: { value: PropValue } ) => {\n\t\treturn hasAssignedColorVariable( shadowPropTypeUtil.extract( prop )?.color );\n\t},\n};\n\nfunction registerControlsAndActions() {\n\tregisterControlReplacement( {\n\t\tcomponent: ColorVariableControl,\n\t\tcondition: ( { value } ) => hasAssignedColorVariable( value ),\n\t} );\n\n\tregisterPopoverAction( {\n\t\tid: 'color-variables',\n\t\tuseProps: usePropColorVariableAction,\n\t} );\n}\n\nfunction registerRepeaterItemIcons() {\n\tinjectIntoRepeaterItemIcon( {\n\t\tid: 'color-variables-background-icon',\n\t\tcomponent: BackgroundRepeaterColorIndicator,\n\t\tcondition: conditions.backgroundOverlay,\n\t} );\n\n\tinjectIntoRepeaterItemIcon( {\n\t\tid: 'color-variables-icon',\n\t\tcomponent: BoxShadowRepeaterColorIndicator,\n\t\tcondition: conditions.boxShadow,\n\t} );\n}\n\nfunction registerRepeaterItemLabels() {\n\tinjectIntoRepeaterItemLabel( {\n\t\tid: 'color-variables-label',\n\t\tcomponent: BackgroundRepeaterLabel,\n\t\tcondition: conditions.backgroundOverlay,\n\t} );\n}\n\nfunction registerStyleTransformers() {\n\tstyleTransformersRegistry.register( colorVariablePropTypeUtil.key, variableTransformer );\n}\n\nexport function initColorVariables() {\n\tregisterControlsAndActions();\n\tregisterRepeaterItemIcons();\n\tregisterRepeaterItemLabels();\n\tregisterStyleTransformers();\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 { useMemo } from 'react';\nimport { type PropKey } from '@elementor/editor-props';\n\nimport { service } from '../service';\nimport { type Variable } from '../types';\n\nexport const useVariable = ( key: string ) => {\n\tconst variables = service.variables();\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 variables = usePropVariables( propTypeKey );\n\n\tconst filteredVariables = variables.filter( ( { label } ) => {\n\t\treturn label.toLowerCase().includes( searchValue.toLowerCase() );\n\t} );\n\n\treturn {\n\t\tlist: filteredVariables,\n\t\thasMatches: filteredVariables.length > 0,\n\t\tisSourceNotEmpty: variables.length > 0,\n\t};\n};\n\nconst usePropVariables = ( propKey: PropKey ) => {\n\treturn useMemo( () => normalizeVariables( propKey ), [ propKey ] );\n};\n\nconst isNotDeleted = ( { deleted }: { deleted?: boolean } ) => ! deleted;\n\nconst normalizeVariables = ( propKey: string ) => {\n\tconst variables = service.variables();\n\n\treturn Object.entries( variables )\n\t\t.filter( ( [ , variable ] ) => variable.type === propKey && isNotDeleted( variable ) )\n\t\t.map( ( [ key, { label, value } ] ) => ( {\n\t\t\tkey,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t} ) );\n};\n\nexport const createVariable = ( newVariable: Variable ): Promise< string > => {\n\treturn service.create( newVariable ).then( ( { id }: { id: string } ) => {\n\t\treturn id;\n\t} );\n};\n\nexport const updateVariable = ( updateId: string, { value, label }: { value: string; label: string } ) => {\n\treturn service.update( updateId, { value, label } ).then( ( { id }: { id: string } ) => {\n\t\treturn id;\n\t} );\n};\n\nexport const deleteVariable = ( deleteId: string ) => {\n\treturn service.delete( deleteId ).then( ( { id }: { id: string } ) => {\n\t\treturn id;\n\t} );\n};\n","import { httpService } from '@elementor/http-client';\n\nconst BASE_PATH = 'elementor/v1/variables';\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 ) => {\n\t\treturn httpService().put( BASE_PATH + '/update', {\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tvalue,\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 ) => {\n\t\treturn httpService().post( BASE_PATH + '/restore', { id } );\n\t},\n};\n","export type TVariable = {\n\ttype: string;\n\tlabel: string;\n\tvalue: string;\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\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}\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}\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}\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 { 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, newValue: string ): boolean => {\n\t\treturn ! ( key in variables ) || variables[ key ] !== newValue;\n\t};\n\n\tconst applyUpdates = ( updatedVars: Variables ): boolean => {\n\t\tlet hasChanges = false;\n\n\t\tfor ( const [ key, { value } ] of Object.entries( updatedVars ) ) {\n\t\t\tif ( shouldUpdate( key, value ) ) {\n\t\t\t\tvariables[ key ] = value;\n\t\t\t\thasChanges = true;\n\t\t\t}\n\t\t}\n\n\t\treturn hasChanges;\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 { apiClient } from './api';\nimport { OP_RW, Storage, 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\tinit: () => {\n\t\tservice.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\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, ...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 }: Omit< Variable, 'type' > ) => {\n\t\treturn apiClient\n\t\t\t.update( id, 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\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, ...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 ) => {\n\t\treturn apiClient\n\t\t\t.restore( 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, ...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\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 { 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 * as React from 'react';\nimport { useId, useRef } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { colorPropTypeUtil } from '@elementor/editor-props';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { bindPopover, bindTrigger, Box, Popover, usePopupState } from '@elementor/ui';\n\nimport { ColorIndicator } from '../components/ui/color-indicator';\nimport { SIZE, VariableTag } from '../components/ui/variable-tag';\nimport { VariableSelectionPopover } from '../components/variable-selection-popover';\nimport { useVariable } from '../hooks/use-prop-variables';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\n\nexport const ColorVariableControl = () => {\n\tconst { setValue: setColor } = useBoundProp();\n\tconst { value: variableValue } = useBoundProp( colorVariablePropTypeUtil );\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 selectedVariable = useVariable( variableValue );\n\tif ( ! selectedVariable ) {\n\t\tthrow new Error( `Global color variable ${ variableValue } not found` );\n\t}\n\n\tconst unlinkVariable = () => {\n\t\tsetColor( colorPropTypeUtil.create( selectedVariable.value ) );\n\t};\n\n\treturn (\n\t\t<Box ref={ anchorRef }>\n\t\t\t<VariableTag\n\t\t\t\tlabel={ selectedVariable.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<ColorIndicator size=\"inherit\" value={ selectedVariable.value } component=\"span\" />\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={ selectedVariable }\n\t\t\t\t\tclosePopover={ popupState.close }\n\t\t\t\t\tpropTypeKey={ colorVariablePropTypeUtil.key }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</Box>\n\t);\n};\n","import * as React from 'react';\nimport { DetachIcon } from '@elementor/icons';\nimport { Box, IconButton, Stack, Typography, UnstableTag as Tag, type UnstableTagProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const SIZE = 'tiny';\n\ninterface VariableTagProps extends UnstableTagProps {\n\tonUnlink?: () => void;\n}\n\nexport const VariableTag = ( { startIcon, label, onUnlink, ...props }: VariableTagProps ) => {\n\tconst actions = [];\n\n\tif ( onUnlink ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"unlink\" size={ SIZE } onClick={ onUnlink } aria-label={ __( 'Unlink', 'elementor' ) }>\n\t\t\t\t<DetachIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Tag\n\t\t\tfullWidth\n\t\t\tshowActionsOnHover\n\t\t\tstartIcon={\n\t\t\t\t<Stack gap={ 0.5 } direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t{ startIcon }\n\t\t\t\t</Stack>\n\t\t\t}\n\t\t\tlabel={\n\t\t\t\t<Box sx={ { display: 'inline-grid', minWidth: 0 } }>\n\t\t\t\t\t<Typography sx={ { lineHeight: 1.34 } } variant=\"caption\" noWrap>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t}\n\t\t\tactions={ actions }\n\t\t\t{ ...props }\n\t\t/>\n\t);\n};\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { Box } from '@elementor/ui';\n\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\nimport { type Variable } from '../types';\nimport { ColorVariableCreation } from './color-variable-creation';\nimport { ColorVariableEdit } from './color-variable-edit';\nimport { ColorVariablesSelection } from './color-variables-selection';\nimport { FontVariableCreation } from './font-variable-creation';\nimport { FontVariableEdit } from './font-variable-edit';\nimport { FontVariablesSelection } from './font-variables-selection';\nimport { PopoverContentRefContext } from './variable-selection-popover.context';\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\tpropTypeKey: string;\n\tselectedVariable?: Variable;\n};\n\nexport const VariableSelectionPopover = ( { closePopover, propTypeKey, selectedVariable }: Props ) => {\n\tconst [ currentView, setCurrentView ] = useState< View >( VIEW_LIST );\n\tconst editIdRef = useRef< string >( '' );\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\n\treturn (\n\t\t<PopoverContentRefContext.Provider value={ anchorRef }>\n\t\t\t<Box ref={ anchorRef }>\n\t\t\t\t{ renderStage( {\n\t\t\t\t\tpropTypeKey,\n\t\t\t\t\tcurrentView,\n\t\t\t\t\tselectedVariable,\n\t\t\t\t\teditIdRef,\n\t\t\t\t\tsetCurrentView,\n\t\t\t\t\tclosePopover,\n\t\t\t\t} ) }\n\t\t\t</Box>\n\t\t</PopoverContentRefContext.Provider>\n\t);\n};\n\ntype StageProps = {\n\tpropTypeKey: string;\n\tcurrentView: View;\n\tselectedVariable?: Variable;\n\teditIdRef: React.MutableRefObject< string >;\n\tsetCurrentView: ( stage: View ) => void;\n\tclosePopover: () => void;\n};\n\nfunction renderStage( props: StageProps ): React.ReactNode {\n\tconst handleSubmitOnEdit = () => {\n\t\tif ( props?.selectedVariable?.key === props.editIdRef.current ) {\n\t\t\tprops.closePopover();\n\t\t} else {\n\t\t\tprops.setCurrentView( VIEW_LIST );\n\t\t}\n\t};\n\n\tif ( fontVariablePropTypeUtil.key === props.propTypeKey ) {\n\t\tif ( VIEW_LIST === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<FontVariablesSelection\n\t\t\t\t\tclosePopover={ props.closePopover }\n\t\t\t\t\tonAdd={ () => {\n\t\t\t\t\t\tprops.setCurrentView( VIEW_ADD );\n\t\t\t\t\t} }\n\t\t\t\t\tonEdit={ ( key ) => {\n\t\t\t\t\t\tprops.editIdRef.current = key;\n\t\t\t\t\t\tprops.setCurrentView( VIEW_EDIT );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif ( VIEW_ADD === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<FontVariableCreation\n\t\t\t\t\tonGoBack={ () => props.setCurrentView( VIEW_LIST ) }\n\t\t\t\t\tonClose={ props.closePopover }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif ( VIEW_EDIT === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<FontVariableEdit\n\t\t\t\t\teditId={ props.editIdRef.current ?? '' }\n\t\t\t\t\tonGoBack={ () => props.setCurrentView( VIEW_LIST ) }\n\t\t\t\t\tonClose={ props.closePopover }\n\t\t\t\t\tonSubmit={ handleSubmitOnEdit }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( colorVariablePropTypeUtil.key === props.propTypeKey ) {\n\t\tif ( VIEW_LIST === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<ColorVariablesSelection\n\t\t\t\t\tclosePopover={ props.closePopover }\n\t\t\t\t\tonAdd={ () => {\n\t\t\t\t\t\tprops.setCurrentView( VIEW_ADD );\n\t\t\t\t\t} }\n\t\t\t\t\tonEdit={ ( key ) => {\n\t\t\t\t\t\tprops.editIdRef.current = key;\n\t\t\t\t\t\tprops.setCurrentView( VIEW_EDIT );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif ( VIEW_ADD === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<ColorVariableCreation\n\t\t\t\t\tonGoBack={ () => props.setCurrentView( VIEW_LIST ) }\n\t\t\t\t\tonClose={ props.closePopover }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif ( VIEW_EDIT === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<ColorVariableEdit\n\t\t\t\t\teditId={ props.editIdRef.current ?? '' }\n\t\t\t\t\tonGoBack={ () => props.setCurrentView( VIEW_LIST ) }\n\t\t\t\t\tonClose={ props.closePopover }\n\t\t\t\t\tonSubmit={ handleSubmitOnEdit }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t}\n\n\treturn null;\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 { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const fontVariablePropTypeUtil = createPropUtils( 'global-font-variable', z.string() );\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, BrushIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tCardActions,\n\tDivider,\n\tFormLabel,\n\tGrid,\n\tIconButton,\n\tTextField,\n\tUnstableColorField,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { createVariable } from '../hooks/use-prop-variables';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { usePopoverContentRef } from './variable-selection-popover.context';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tonGoBack?: () => void;\n\tonClose: () => void;\n};\n\nexport const ColorVariableCreation = ( { onGoBack, onClose }: Props ) => {\n\tconst { setValue: setVariable } = useBoundProp( colorVariablePropTypeUtil );\n\n\tconst [ color, setColor ] = useState( '' );\n\tconst [ label, setLabel ] = useState( '' );\n\n\tconst defaultRef = useRef< HTMLDivElement >( null );\n\tconst anchorRef = usePopoverContentRef() ?? defaultRef;\n\n\tconst resetFields = () => {\n\t\tsetColor( '' );\n\t\tsetLabel( '' );\n\t};\n\n\tconst closePopover = () => {\n\t\tresetFields();\n\t\tonClose();\n\t};\n\n\tconst handleCreate = () => {\n\t\tcreateVariable( {\n\t\t\tvalue: color,\n\t\t\tlabel,\n\t\t\ttype: colorVariablePropTypeUtil.key,\n\t\t} ).then( ( key ) => {\n\t\t\tsetVariable( key );\n\t\t\tclosePopover();\n\t\t} );\n\t};\n\n\tconst isFormInvalid = () => {\n\t\treturn ! color?.trim() || ! label?.trim();\n\t};\n\n\treturn (\n\t\t<PopoverScrollableContent 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<BrushIcon 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<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ __( 'Name', 'elementor' ) }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => setLabel( e.target.value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ __( 'Value', 'elementor' ) }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<UnstableColorField\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ color }\n\t\t\t\t\t\t\tonChange={ setColor }\n\t\t\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\t\t\tcolorPicker: {\n\t\t\t\t\t\t\t\t\tanchorEl: anchorRef.current,\n\t\t\t\t\t\t\t\t\tanchorOrigin: { vertical: 'top', horizontal: 'right' },\n\t\t\t\t\t\t\t\t\ttransformOrigin: { vertical: 'top', horizontal: -10 },\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</Grid>\n\t\t\t\t</Grid>\n\t\t\t</PopoverContent>\n\n\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isFormInvalid() } onClick={ handleCreate }>\n\t\t\t\t\t{ __( 'Create', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardActions>\n\t\t</PopoverScrollableContent>\n\t);\n};\n","import { createContext, useContext } from 'react';\n\nexport const PopoverContentRefContext = createContext< React.RefObject< HTMLDivElement > | null >( null );\n\nexport const usePopoverContentRef = () => {\n\treturn useContext( PopoverContentRefContext );\n};\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { PopoverContent } from '@elementor/editor-controls';\nimport { PopoverHeader, PopoverScrollableContent } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, BrushIcon, TrashIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tCardActions,\n\tDivider,\n\tFormLabel,\n\tGrid,\n\tIconButton,\n\tTextField,\n\tUnstableColorField,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { deleteVariable, updateVariable, useVariable } from '../hooks/use-prop-variables';\nimport { usePopoverContentRef } from './variable-selection-popover.context';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\teditId: string;\n\tonClose: () => void;\n\tonGoBack?: () => void;\n\tonSubmit?: () => void;\n};\n\nexport const ColorVariableEdit = ( { onClose, onGoBack, onSubmit, editId }: Props ) => {\n\tconst variable = useVariable( editId );\n\tif ( ! variable ) {\n\t\tthrow new Error( `Global color variable not found` );\n\t}\n\n\tconst defaultRef = useRef< HTMLDivElement >( null );\n\tconst anchorRef = usePopoverContentRef() ?? defaultRef;\n\n\tconst [ color, setColor ] = useState( variable.value );\n\tconst [ label, setLabel ] = useState( variable.label );\n\n\tconst handleUpdate = () => {\n\t\tupdateVariable( editId, {\n\t\t\tvalue: color,\n\t\t\tlabel,\n\t\t} ).then( () => {\n\t\t\tonSubmit?.();\n\t\t} );\n\t};\n\n\tconst handleDelete = () => {\n\t\tdeleteVariable( editId ).then( () => {\n\t\t\tonSubmit?.();\n\t\t} );\n\t};\n\n\tconst noValueChanged = () => color === variable.value && label === variable.label;\n\tconst hasEmptyValue = () => '' === color.trim() || '' === label.trim();\n\tconst isSaveDisabled = () => noValueChanged() || hasEmptyValue();\n\n\tconst actions = [];\n\n\tactions.push(\n\t\t<IconButton key=\"delete\" size={ SIZE } aria-label={ __( 'Delete', 'elementor' ) } onClick={ handleDelete }>\n\t\t\t<TrashIcon fontSize={ SIZE } />\n\t\t</IconButton>\n\t);\n\n\treturn (\n\t\t<PopoverScrollableContent height=\"auto\">\n\t\t\t<PopoverHeader\n\t\t\t\ttitle={ __( 'Edit variable', 'elementor' ) }\n\t\t\t\tonClose={ onClose }\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<BrushIcon fontSize={ SIZE } />\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\tactions={ actions }\n\t\t\t/>\n\n\t\t\t<Divider />\n\n\t\t\t<PopoverContent p={ 2 }>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ __( 'Name', 'elementor' ) }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => setLabel( e.target.value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ __( 'Value', 'elementor' ) }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<UnstableColorField\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ color }\n\t\t\t\t\t\t\tonChange={ setColor }\n\t\t\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\t\t\tcolorPicker: {\n\t\t\t\t\t\t\t\t\tanchorEl: anchorRef.current,\n\t\t\t\t\t\t\t\t\tanchorOrigin: { vertical: 'top', horizontal: 'right' },\n\t\t\t\t\t\t\t\t\ttransformOrigin: { vertical: 'top', horizontal: -10 },\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</Grid>\n\t\t\t\t</Grid>\n\t\t\t</PopoverContent>\n\n\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isSaveDisabled() } onClick={ handleUpdate }>\n\t\t\t\t\t{ __( 'Save', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardActions>\n\t\t</PopoverScrollableContent>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader, PopoverMenuList, PopoverSearch, type VirtualizedItem } from '@elementor/editor-ui';\nimport { BrushIcon, ColorFilterIcon, PlusIcon, SettingsIcon } from '@elementor/icons';\nimport { Divider, IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useFilteredVariables } from '../hooks/use-prop-variables';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { type ExtendedVirtualizedItem } from '../types';\nimport { ColorIndicator } from './ui/color-indicator';\nimport { MenuItemContent } from './ui/menu-item-content';\nimport { NoSearchResults } from './ui/no-search-results';\nimport { NoVariables } from './ui/no-variables';\nimport { VariablesStyledMenuList } from './ui/styled-menu-list';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tclosePopover: () => void;\n\tonAdd?: () => void;\n\tonEdit?: ( key: string ) => void;\n\tonSettings?: () => void;\n};\n\nexport const ColorVariablesSelection = ( { closePopover, onAdd, onEdit, onSettings }: Props ) => {\n\tconst { value: variable, setValue: setVariable } = useBoundProp( colorVariablePropTypeUtil );\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst {\n\t\tlist: variables,\n\t\thasMatches: hasSearchResults,\n\t\tisSourceNotEmpty: hasVariables,\n\t} = useFilteredVariables( searchValue, colorVariablePropTypeUtil.key );\n\n\tconst handleSetColorVariable = ( key: string ) => {\n\t\tsetVariable( key );\n\t\tclosePopover();\n\t};\n\n\tconst actions = [];\n\n\tif ( onAdd ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"add\" size={ SIZE } onClick={ onAdd }>\n\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\n\n\tif ( onSettings ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"settings\" size={ SIZE } onClick={ onSettings }>\n\t\t\t\t<SettingsIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\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: <ColorIndicator size=\"inherit\" component=\"span\" value={ value } />,\n\t\tsecondaryText: value,\n\t\tonEdit: () => onEdit?.( key ),\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<>\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<PopoverSearch\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<PopoverScrollableContent>\n\t\t\t\t{ hasVariables && hasSearchResults && (\n\t\t\t\t\t<PopoverMenuList\n\t\t\t\t\t\titems={ items }\n\t\t\t\t\t\tonSelect={ handleSetColorVariable }\n\t\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\t\tselectedValue={ variable }\n\t\t\t\t\t\tdata-testid=\"color-variables-list\"\n\t\t\t\t\t\tmenuListTemplate={ VariablesStyledMenuList }\n\t\t\t\t\t\tmenuItemContentTemplate={ ( item: VirtualizedItem< 'item', string > ) => (\n\t\t\t\t\t\t\t<MenuItemContent item={ item } />\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ ! hasSearchResults && hasVariables && (\n\t\t\t\t\t<NoSearchResults\n\t\t\t\t\t\tsearchValue={ searchValue }\n\t\t\t\t\t\tonClear={ handleClearSearch }\n\t\t\t\t\t\ticon={ <BrushIcon fontSize=\"large\" /> }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ ! hasVariables && (\n\t\t\t\t\t<NoVariables\n\t\t\t\t\t\ttitle={ __( 'Create your first color variable', 'elementor' ) }\n\t\t\t\t\t\ticon={ <BrushIcon fontSize=\"large\" /> }\n\t\t\t\t\t\tonAdd={ onAdd }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</PopoverScrollableContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { EllipsisWithTooltip, type VirtualizedItem } from '@elementor/editor-ui';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\nimport { EditIcon } from '@elementor/icons';\nimport { Box, IconButton, ListItemIcon, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\nconst isVersion330Active = isExperimentActive( 'e_v_3_30' );\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={ isVersion330Active ? 'caption' : 'body2' }\n\t\t\t\t\tcolor={ isVersion330Active ? 'text.primary' : 'text.secondary' }\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<IconButton\n\t\t\t\t\tsx={ { mx: 1, opacity: '0' } }\n\t\t\t\t\tonClick={ ( e: React.MouseEvent< HTMLButtonElement > ) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tonEdit( item.value );\n\t\t\t\t\t} }\n\t\t\t\t\taria-label={ __( 'Edit', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t<EditIcon color=\"action\" fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t) }\n\t\t</>\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\theight=\"100%\"\n\t\t\tp={ 2.5 }\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { pb: 3.5 } }\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 * as React from 'react';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype Props = {\n\ticon?: React.ReactNode;\n\ttitle?: string;\n\tonAdd?: () => void;\n};\n\nexport const NoVariables = ( { icon, title, onAdd }: Props ) => (\n\t<Stack\n\t\tgap={ 1 }\n\t\talignItems=\"center\"\n\t\tjustifyContent=\"center\"\n\t\theight=\"100%\"\n\t\tcolor=\"text.secondary\"\n\t\tsx={ { p: 2.5, pb: 5.5 } }\n\t>\n\t\t{ icon }\n\n\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t{ title }\n\t\t</Typography>\n\n\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"180px\">\n\t\t\t{ __( 'Variables are saved attributes that you can apply anywhere on your site.', 'elementor' ) }\n\t\t</Typography>\n\n\t\t{ onAdd && (\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" onClick={ onAdd }>\n\t\t\t\t{ __( 'Create a variable', 'elementor' ) }\n\t\t\t</Button>\n\t\t) }\n\t</Stack>\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 { useRef, useState } from 'react';\nimport { FontFamilySelector, PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent, useFontFamilies, useSectionWidth } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, ChevronDownIcon, TextIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tButton,\n\tCardActions,\n\tDivider,\n\tFormLabel,\n\tGrid,\n\tIconButton,\n\tPopover,\n\tTextField,\n\tUnstableTag,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { createVariable } from '../hooks/use-prop-variables';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tonGoBack?: () => void;\n\tonClose: () => void;\n};\n\nexport const FontVariableCreation = ( { onClose, onGoBack }: Props ) => {\n\tconst fontFamilies = useFontFamilies();\n\tconst { setValue: setVariable } = useBoundProp( fontVariablePropTypeUtil );\n\n\tconst [ fontFamily, setFontFamily ] = useState( '' );\n\tconst [ label, setLabel ] = useState( '' );\n\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\tconst fontPopoverState = usePopupState( { variant: 'popover' } );\n\n\tconst resetFields = () => {\n\t\tsetFontFamily( '' );\n\t\tsetLabel( '' );\n\t};\n\n\tconst closePopover = () => {\n\t\tresetFields();\n\t\tonClose();\n\t};\n\n\tconst handleCreate = () => {\n\t\tcreateVariable( {\n\t\t\tvalue: fontFamily,\n\t\t\tlabel,\n\t\t\ttype: fontVariablePropTypeUtil.key,\n\t\t} ).then( ( key ) => {\n\t\t\tsetVariable( key );\n\t\t\tclosePopover();\n\t\t} );\n\t};\n\n\tconst isFormInvalid = () => {\n\t\treturn ! fontFamily?.trim() || ! label?.trim();\n\t};\n\n\tconst sectionWidth = useSectionWidth();\n\n\treturn (\n\t\t<PopoverScrollableContent 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<TextIcon 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<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ __( 'Name', 'elementor' ) }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => setLabel( e.target.value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel size=\"tiny\">{ __( 'Value', 'elementor' ) }</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<UnstableTag\n\t\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\t\tlabel={ fontFamily }\n\t\t\t\t\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t\t\t\t\t{ ...bindTrigger( fontPopoverState ) }\n\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Popover\n\t\t\t\t\t\t\t\tdisablePortal\n\t\t\t\t\t\t\t\tdisableScrollLock\n\t\t\t\t\t\t\t\tanchorEl={ anchorRef.current }\n\t\t\t\t\t\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\t\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: -20 } }\n\t\t\t\t\t\t\t\t{ ...bindPopover( fontPopoverState ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FontFamilySelector\n\t\t\t\t\t\t\t\t\tfontFamilies={ fontFamilies }\n\t\t\t\t\t\t\t\t\tfontFamily={ fontFamily }\n\t\t\t\t\t\t\t\t\tonFontFamilyChange={ setFontFamily }\n\t\t\t\t\t\t\t\t\tonClose={ fontPopoverState.close }\n\t\t\t\t\t\t\t\t\tsectionWidth={ sectionWidth }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Popover>\n\t\t\t\t\t\t</>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</PopoverContent>\n\n\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isFormInvalid() } onClick={ handleCreate }>\n\t\t\t\t\t{ __( 'Create', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardActions>\n\t\t</PopoverScrollableContent>\n\t);\n};\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { FontFamilySelector, PopoverContent } from '@elementor/editor-controls';\nimport { useFontFamilies, useSectionWidth } from '@elementor/editor-editing-panel';\nimport { PopoverHeader, PopoverScrollableContent } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, ChevronDownIcon, TextIcon, TrashIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tButton,\n\tCardActions,\n\tDivider,\n\tFormLabel,\n\tGrid,\n\tIconButton,\n\tPopover,\n\tTextField,\n\tUnstableTag,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { deleteVariable, updateVariable, useVariable } from '../hooks/use-prop-variables';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\teditId: string;\n\tonClose: () => void;\n\tonGoBack?: () => void;\n\tonSubmit?: () => void;\n};\n\nexport const FontVariableEdit = ( { onClose, onGoBack, onSubmit, editId }: Props ) => {\n\tconst variable = useVariable( editId );\n\n\tif ( ! variable ) {\n\t\tthrow new Error( `Global font variable \"${ editId }\" not found` );\n\t}\n\n\tconst [ fontFamily, setFontFamily ] = useState( variable.value );\n\tconst [ label, setLabel ] = useState( variable.label );\n\n\tconst variableNameId = useId();\n\tconst variableValueId = useId();\n\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\tconst fontPopoverState = usePopupState( { variant: 'popover' } );\n\n\tconst fontFamilies = useFontFamilies();\n\n\tconst handleUpdate = () => {\n\t\tupdateVariable( editId, {\n\t\t\tvalue: fontFamily,\n\t\t\tlabel,\n\t\t} ).then( () => {\n\t\t\tonSubmit?.();\n\t\t} );\n\t};\n\n\tconst handleDelete = () => {\n\t\tdeleteVariable( editId ).then( () => {\n\t\t\tonSubmit?.();\n\t\t} );\n\t};\n\n\tconst noValueChanged = () => fontFamily === variable.value && label === variable.label;\n\tconst hasEmptyValue = () => '' === fontFamily.trim() || '' === label.trim();\n\tconst isSaveDisabled = () => noValueChanged() || hasEmptyValue();\n\n\tconst sectionWidth = useSectionWidth();\n\n\tconst actions = [];\n\n\tactions.push(\n\t\t<IconButton key=\"delete\" size={ SIZE } aria-label={ __( 'Delete', 'elementor' ) } onClick={ handleDelete }>\n\t\t\t<TrashIcon fontSize={ SIZE } />\n\t\t</IconButton>\n\t);\n\n\treturn (\n\t\t<PopoverScrollableContent 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<TextIcon fontSize={ SIZE } />\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t\ttitle={ __( 'Edit variable', 'elementor' ) }\n\t\t\t\tonClose={ onClose }\n\t\t\t\tactions={ actions }\n\t\t\t/>\n\n\t\t\t<Divider />\n\n\t\t\t<PopoverContent p={ 2 }>\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel htmlFor={ variableNameId } size=\"tiny\">\n\t\t\t\t\t\t\t{ __( 'Name', 'elementor' ) }\n\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tid={ variableNameId }\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tvalue={ label }\n\t\t\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => setLabel( e.target.value ) }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\n\t\t\t\t<Grid container gap={ 0.75 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<FormLabel htmlFor={ variableValueId } size=\"tiny\">\n\t\t\t\t\t\t\t{ __( 'Value', 'elementor' ) }\n\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<UnstableTag\n\t\t\t\t\t\t\t\tid={ variableValueId }\n\t\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\t\tlabel={ fontFamily }\n\t\t\t\t\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t\t\t\t\t{ ...bindTrigger( fontPopoverState ) }\n\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Popover\n\t\t\t\t\t\t\t\tdisablePortal\n\t\t\t\t\t\t\t\tdisableScrollLock\n\t\t\t\t\t\t\t\tanchorEl={ anchorRef.current }\n\t\t\t\t\t\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\t\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: -20 } }\n\t\t\t\t\t\t\t\t{ ...bindPopover( fontPopoverState ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FontFamilySelector\n\t\t\t\t\t\t\t\t\tfontFamilies={ fontFamilies }\n\t\t\t\t\t\t\t\t\tfontFamily={ fontFamily }\n\t\t\t\t\t\t\t\t\tonFontFamilyChange={ setFontFamily }\n\t\t\t\t\t\t\t\t\tonClose={ fontPopoverState.close }\n\t\t\t\t\t\t\t\t\tsectionWidth={ sectionWidth }\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Popover>\n\t\t\t\t\t\t</>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</PopoverContent>\n\n\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isSaveDisabled() } onClick={ handleUpdate }>\n\t\t\t\t\t{ __( 'Save', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardActions>\n\t\t</PopoverScrollableContent>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader, PopoverMenuList, PopoverSearch, type VirtualizedItem } from '@elementor/editor-ui';\nimport { ColorFilterIcon, PlusIcon, SettingsIcon, TextIcon } from '@elementor/icons';\nimport { Divider, IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useFilteredVariables } from '../hooks/use-prop-variables';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\nimport { type ExtendedVirtualizedItem } from '../types';\nimport { MenuItemContent } from './ui/menu-item-content';\nimport { NoSearchResults } from './ui/no-search-results';\nimport { NoVariables } from './ui/no-variables';\nimport { VariablesStyledMenuList } from './ui/styled-menu-list';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tclosePopover: () => void;\n\tonAdd?: () => void;\n\tonEdit?: ( key: string ) => void;\n\tonSettings?: () => void;\n};\n\nexport const FontVariablesSelection = ( { closePopover, onAdd, onEdit, onSettings }: Props ) => {\n\tconst { value: variable, setValue: setVariable } = useBoundProp( fontVariablePropTypeUtil );\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst {\n\t\tlist: variables,\n\t\thasMatches: hasSearchResults,\n\t\tisSourceNotEmpty: hasVariables,\n\t} = useFilteredVariables( searchValue, fontVariablePropTypeUtil.key );\n\n\tconst handleSetVariable = ( key: string ) => {\n\t\tsetVariable( key );\n\t\tclosePopover();\n\t};\n\n\tconst actions = [];\n\n\tif ( onAdd ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"add\" size={ SIZE } onClick={ onAdd }>\n\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\n\n\tif ( onSettings ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"settings\" size={ SIZE } onClick={ onSettings }>\n\t\t\t\t<SettingsIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\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: <TextIcon fontSize={ SIZE } />,\n\t\tsecondaryText: value,\n\t\tonEdit: () => onEdit?.( key ),\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<>\n\t\t\t<PopoverHeader\n\t\t\t\ttitle={ __( 'Variables', 'elementor' ) }\n\t\t\t\tonClose={ closePopover }\n\t\t\t\ticon={ <ColorFilterIcon fontSize={ SIZE } /> }\n\t\t\t\tactions={ actions }\n\t\t\t/>\n\n\t\t\t{ hasVariables && (\n\t\t\t\t<PopoverSearch\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<PopoverScrollableContent>\n\t\t\t\t{ hasVariables && hasSearchResults && (\n\t\t\t\t\t<PopoverMenuList\n\t\t\t\t\t\titems={ items }\n\t\t\t\t\t\tonSelect={ handleSetVariable }\n\t\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\t\tselectedValue={ variable }\n\t\t\t\t\t\tdata-testid=\"font-variables-list\"\n\t\t\t\t\t\tmenuListTemplate={ VariablesStyledMenuList }\n\t\t\t\t\t\tmenuItemContentTemplate={ ( item: VirtualizedItem< 'item', string > ) => (\n\t\t\t\t\t\t\t<MenuItemContent item={ item } />\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ ! hasSearchResults && hasVariables && (\n\t\t\t\t\t<NoSearchResults\n\t\t\t\t\t\tsearchValue={ searchValue }\n\t\t\t\t\t\tonClear={ handleClearSearch }\n\t\t\t\t\t\ticon={ <TextIcon fontSize=\"large\" /> }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ ! hasVariables && (\n\t\t\t\t\t<NoVariables\n\t\t\t\t\t\ttitle={ __( 'Create your first font variable', 'elementor' ) }\n\t\t\t\t\t\ticon={ <TextIcon fontSize=\"large\" /> }\n\t\t\t\t\t\tonAdd={ onAdd }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</PopoverScrollableContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { type PopoverActionProps, useBoundProp } from '@elementor/editor-editing-panel';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { VariableSelectionPopover } from '../components/variable-selection-popover';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { supportsColorVariables } from '../utils';\n\nexport const usePropColorVariableAction = (): PopoverActionProps => {\n\tconst { propType } = useBoundProp();\n\n\tconst visible = !! propType && supportsColorVariables( propType );\n\n\treturn {\n\t\tvisible,\n\t\ticon: ColorFilterIcon,\n\t\ttitle: __( 'Variables', 'elementor' ),\n\t\tcontent: ( { close: closePopover } ) => {\n\t\t\treturn (\n\t\t\t\t<VariableSelectionPopover closePopover={ closePopover } propTypeKey={ colorVariablePropTypeUtil.key } />\n\t\t\t);\n\t\t},\n\t};\n};\n","import { type PropType, type PropValue } from '@elementor/editor-props';\n\nimport { colorVariablePropTypeUtil } from './prop-types/color-variable-prop-type';\nimport { fontVariablePropTypeUtil } from './prop-types/font-variable-prop-type';\n\nexport const hasAssignedColorVariable = ( propValue: PropValue ): boolean => {\n\treturn !! colorVariablePropTypeUtil.isValid( propValue );\n};\n\nexport const supportsColorVariables = ( propType: PropType ): boolean => {\n\treturn propType.kind === 'union' && colorVariablePropTypeUtil.key in propType.prop_types;\n};\n\nexport const hasAssignedFontVariable = ( propValue: PropValue ): boolean => {\n\treturn !! fontVariablePropTypeUtil.isValid( propValue );\n};\n\nexport const supportsFontVariables = ( propType: PropType ): boolean => {\n\treturn propType.kind === 'union' && fontVariablePropTypeUtil.key in propType.prop_types;\n};\n","import { createTransformer } from '@elementor/editor-canvas';\n\nexport const variableTransformer = createTransformer( ( value: string ) => {\n\tif ( ! value.trim() ) {\n\t\treturn null;\n\t}\n\n\treturn `var(--${ value })`;\n} );\n","import { styleTransformersRegistry } from '@elementor/editor-canvas';\nimport { controlActionsMenu, registerControlReplacement } from '@elementor/editor-editing-panel';\n\nimport { FontVariableControl } from './controls/font-variable-control';\nimport { usePropFontVariableAction } from './hooks/use-prop-font-variable-action';\nimport { fontVariablePropTypeUtil } from './prop-types/font-variable-prop-type';\nimport { variableTransformer } from './transformers/variable-transformer';\nimport { hasAssignedFontVariable } from './utils';\n\nconst { registerPopoverAction } = controlActionsMenu;\n\nexport function initFontVariables() {\n\tregisterControlReplacement( {\n\t\tcomponent: FontVariableControl,\n\t\tcondition: ( { value } ) => hasAssignedFontVariable( value ),\n\t} );\n\n\tregisterPopoverAction( {\n\t\tid: 'font-variables',\n\t\tuseProps: usePropFontVariableAction,\n\t} );\n\n\tstyleTransformersRegistry.register( fontVariablePropTypeUtil.key, variableTransformer );\n}\n","import * as React from 'react';\nimport { useId, useRef } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { bindPopover, bindTrigger, Box, Popover, usePopupState } from '@elementor/ui';\n\nimport { SIZE, VariableTag } from '../components/ui/variable-tag';\nimport { VariableSelectionPopover } from '../components/variable-selection-popover';\nimport { useVariable } from '../hooks/use-prop-variables';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\n\nexport const FontVariableControl = () => {\n\tconst { setValue: setFontFamily } = useBoundProp();\n\tconst { value: variableValue } = useBoundProp( fontVariablePropTypeUtil );\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 selectedVariable = useVariable( variableValue );\n\tif ( ! selectedVariable ) {\n\t\tthrow new Error( `Global font variable ${ variableValue } not found` );\n\t}\n\n\tconst unlinkVariable = () => {\n\t\tsetFontFamily( stringPropTypeUtil.create( selectedVariable.value ) );\n\t};\n\n\treturn (\n\t\t<Box ref={ anchorRef }>\n\t\t\t<VariableTag\n\t\t\t\tlabel={ selectedVariable.label }\n\t\t\t\tstartIcon={ <ColorFilterIcon fontSize={ SIZE } /> }\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={ selectedVariable }\n\t\t\t\t\tclosePopover={ popupState.close }\n\t\t\t\t\tpropTypeKey={ fontVariablePropTypeUtil.key }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</Box>\n\t);\n};\n","import * as React from 'react';\nimport { type PopoverActionProps, useBoundProp } from '@elementor/editor-editing-panel';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { VariableSelectionPopover } from '../components/variable-selection-popover';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\nimport { supportsFontVariables } from '../utils';\n\nexport const usePropFontVariableAction = (): PopoverActionProps => {\n\tconst { propType } = useBoundProp();\n\n\tconst visible = !! propType && supportsFontVariables( propType );\n\n\treturn {\n\t\tvisible,\n\t\ticon: ColorFilterIcon,\n\t\ttitle: __( 'Variables', 'elementor' ),\n\t\tcontent: ( { close: closePopover } ) => {\n\t\t\treturn (\n\t\t\t\t<VariableSelectionPopover closePopover={ closePopover } propTypeKey={ fontVariablePropTypeUtil.key } />\n\t\t\t);\n\t\t},\n\t};\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { Portal } from '@elementor/ui';\n\nimport { styleVariablesRepository } from '../style-variables-repository';\nimport { getCanvasIframeDocument } from '../sync/get-canvas-iframe-document';\nimport { type StyleVariables } 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 convertToCssVariables( variables: StyleVariables ): string {\n\treturn Object.entries( variables )\n\t\t.map( ( [ key, value ] ) => `--${ key }:${ value };` )\n\t\t.join( '' );\n}\n","import type { CanvasExtendedWindow } from './types';\n\nexport function getCanvasIframeDocument() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.$preview?.[ 0 ]?.contentDocument;\n}\n"],"mappings":"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","names":["import_editor_canvas","import_editor_controls","import_editor_editing_panel","import_editor_props","React","import_react","import_editor_controls","import_editor_props","import_icons","import_ui","React","import_ui","Tag","React","import_react","import_ui","import_editor_props","import_schema","React","import_react","import_icons","import_ui","import_i18n","import_react","SIZE","React","import_react","import_editor_controls","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","React","import_ui","import_i18n","React","import_ui","import_i18n","import_ui","SIZE","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","React","import_editor_editing_panel","import_icons","import_i18n","import_editor_canvas","import_editor_editing_panel","React","import_react","import_editor_controls","import_editor_props","import_icons","import_ui","React","import_editor_editing_panel","import_icons","import_i18n","registerPopoverAction","React","import_react","import_editor_v1_adapters","import_ui","useListenTo"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/init.ts","../src/init-color-variables.ts","../src/controls/color-variable-control.tsx","../src/components/ui/color-indicator.tsx","../src/components/ui/variable/assigned-variable.tsx","../src/components/variable-selection-popover.tsx","../src/prop-types/color-variable-prop-type.ts","../src/prop-types/font-variable-prop-type.ts","../src/components/color-variable-creation.tsx","../src/hooks/use-prop-variables.ts","../src/api.ts","../src/storage.ts","../src/create-style-variables-repository.ts","../src/style-variables-repository.ts","../src/service.ts","../src/components/fields/color-field.tsx","../src/utils/validations.ts","../src/components/variable-selection-popover.context.ts","../src/components/fields/label-field.tsx","../src/components/color-variable-edit.tsx","../src/components/ui/delete-confirmation-dialog.tsx","../src/components/color-variables-selection.tsx","../src/components/ui/menu-item-content.tsx","../src/components/ui/no-search-results.tsx","../src/components/ui/no-variables.tsx","../src/components/ui/styled-menu-list.tsx","../src/components/font-variable-creation.tsx","../src/components/fields/font-field.tsx","../src/components/font-variable-edit.tsx","../src/components/font-variables-selection.tsx","../src/components/ui/tags/assigned-tag.tsx","../src/components/ui/variable/deleted-variable.tsx","../src/components/ui/tags/deleted-tag.tsx","../src/hooks/use-prop-color-variable-action.tsx","../src/utils.ts","../src/repeater-injections.ts","../src/components/variables-repeater-item-slot.tsx","../src/transformers/variable-transformer.ts","../src/init-font-variables.ts","../src/controls/font-variable-control.tsx","../src/hooks/use-prop-font-variable-action.tsx","../src/renderers/style-variables-renderer.tsx","../src/sync/get-canvas-iframe-document.ts"],"sourcesContent":["export { init } from './init';\n","import { injectIntoTop } from '@elementor/editor';\n\nimport { initColorVariables } from './init-color-variables';\nimport { initFontVariables } from './init-font-variables';\nimport { StyleVariablesRenderer } from './renderers/style-variables-renderer';\nimport { service as variablesService } from './service';\n\nexport function init() {\n\tinitColorVariables();\n\tinitFontVariables();\n\n\tvariablesService.init();\n\n\tinjectIntoTop( {\n\t\tid: 'canvas-style-variables-render',\n\t\tcomponent: StyleVariablesRenderer,\n\t} );\n}\n","import { styleTransformersRegistry } from '@elementor/editor-canvas';\nimport { controlActionsMenu, registerControlReplacement } from '@elementor/editor-editing-panel';\n\nimport { ColorVariableControl } from './controls/color-variable-control';\nimport { usePropColorVariableAction } from './hooks/use-prop-color-variable-action';\nimport { colorVariablePropTypeUtil } from './prop-types/color-variable-prop-type';\nimport { registerRepeaterInjections } from './repeater-injections';\nimport { variableTransformer } from './transformers/variable-transformer';\nimport { hasAssignedColorVariable } from './utils';\n\nconst { registerPopoverAction } = controlActionsMenu;\n\nexport function initColorVariables() {\n\tregisterControlReplacement( {\n\t\tcomponent: ColorVariableControl,\n\t\tcondition: ( { value } ) => hasAssignedColorVariable( value ),\n\t} );\n\n\tregisterPopoverAction( {\n\t\tid: 'color-variables',\n\t\tuseProps: usePropColorVariableAction,\n\t} );\n\n\tstyleTransformersRegistry.register( colorVariablePropTypeUtil.key, variableTransformer );\n\n\tregisterRepeaterInjections();\n}\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { colorPropTypeUtil } from '@elementor/editor-props';\n\nimport { ColorIndicator } from '../components/ui/color-indicator';\nimport { AssignedVariable } from '../components/ui/variable/assigned-variable';\nimport { DeletedVariable } from '../components/ui/variable/deleted-variable';\nimport { useVariable } from '../hooks/use-prop-variables';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\n\nexport const ColorVariableControl = () => {\n\tconst { value: variableValue } = useBoundProp( colorVariablePropTypeUtil );\n\tconst assignedVariable = useVariable( variableValue );\n\n\tif ( ! assignedVariable ) {\n\t\tthrow new Error( `Global color variable ${ variableValue } not found` );\n\t}\n\n\tconst isVariableDeleted = assignedVariable?.deleted;\n\n\tif ( isVariableDeleted ) {\n\t\treturn <DeletedVariable variable={ assignedVariable } />;\n\t}\n\n\treturn (\n\t\t<AssignedVariable\n\t\t\tvariable={ assignedVariable }\n\t\t\tvariablePropTypeUtil={ colorVariablePropTypeUtil }\n\t\t\tfallbackPropTypeUtil={ colorPropTypeUtil }\n\t\t\tadditionalStartIcon={ <ColorIndicator size=\"inherit\" value={ assignedVariable.value } component=\"span\" /> }\n\t\t/>\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 { useId, useRef } from 'react';\nimport * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { type PropTypeUtil } 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 { VariableSelectionPopover } from '../../variable-selection-popover';\nimport { AssignedTag, SIZE } from '../tags/assigned-tag';\n\ntype Props = {\n\tvariablePropTypeUtil: PropTypeUtil< string, string >;\n\tfallbackPropTypeUtil: PropTypeUtil< string, string | null > | PropTypeUtil< string, string >;\n\tadditionalStartIcon?: React.ReactNode;\n\tvariable: Variable;\n};\n\nexport const AssignedVariable = ( {\n\tvariable,\n\tvariablePropTypeUtil,\n\tfallbackPropTypeUtil,\n\tadditionalStartIcon,\n}: Props ) => {\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 = () => {\n\t\tsetValue( fallbackPropTypeUtil.create( variable.value ) );\n\t};\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\n\t\t\t\t\t\t{ additionalStartIcon }\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={ variablePropTypeUtil.key }\n\t\t\t\t/>\n\t\t\t</Popover>\n\t\t</Box>\n\t);\n};\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { Box } from '@elementor/ui';\n\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\nimport { type Variable } from '../types';\nimport { ColorVariableCreation } from './color-variable-creation';\nimport { ColorVariableEdit } from './color-variable-edit';\nimport { ColorVariablesSelection } from './color-variables-selection';\nimport { FontVariableCreation } from './font-variable-creation';\nimport { FontVariableEdit } from './font-variable-edit';\nimport { FontVariablesSelection } from './font-variables-selection';\nimport { PopoverContentRefContext } from './variable-selection-popover.context';\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\tpropTypeKey: string;\n\tselectedVariable?: Variable;\n};\n\nexport const VariableSelectionPopover = ( { closePopover, propTypeKey, selectedVariable }: Props ) => {\n\tconst [ currentView, setCurrentView ] = useState< View >( VIEW_LIST );\n\tconst editIdRef = useRef< string >( '' );\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\n\treturn (\n\t\t<PopoverContentRefContext.Provider value={ anchorRef }>\n\t\t\t<Box ref={ anchorRef }>\n\t\t\t\t{ renderStage( {\n\t\t\t\t\tpropTypeKey,\n\t\t\t\t\tcurrentView,\n\t\t\t\t\tselectedVariable,\n\t\t\t\t\teditIdRef,\n\t\t\t\t\tsetCurrentView,\n\t\t\t\t\tclosePopover,\n\t\t\t\t} ) }\n\t\t\t</Box>\n\t\t</PopoverContentRefContext.Provider>\n\t);\n};\n\ntype StageProps = {\n\tpropTypeKey: string;\n\tcurrentView: View;\n\tselectedVariable?: Variable;\n\teditIdRef: React.MutableRefObject< string >;\n\tsetCurrentView: ( stage: View ) => void;\n\tclosePopover: () => void;\n};\n\nfunction renderStage( props: StageProps ): React.ReactNode {\n\tconst handleSubmitOnEdit = () => {\n\t\tif ( props?.selectedVariable?.key === props.editIdRef.current ) {\n\t\t\tprops.closePopover();\n\t\t} else {\n\t\t\tprops.setCurrentView( VIEW_LIST );\n\t\t}\n\t};\n\n\tif ( fontVariablePropTypeUtil.key === props.propTypeKey ) {\n\t\tif ( VIEW_LIST === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<FontVariablesSelection\n\t\t\t\t\tclosePopover={ props.closePopover }\n\t\t\t\t\tonAdd={ () => {\n\t\t\t\t\t\tprops.setCurrentView( VIEW_ADD );\n\t\t\t\t\t} }\n\t\t\t\t\tonEdit={ ( key ) => {\n\t\t\t\t\t\tprops.editIdRef.current = key;\n\t\t\t\t\t\tprops.setCurrentView( VIEW_EDIT );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif ( VIEW_ADD === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<FontVariableCreation\n\t\t\t\t\tonGoBack={ () => props.setCurrentView( VIEW_LIST ) }\n\t\t\t\t\tonClose={ props.closePopover }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif ( VIEW_EDIT === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<FontVariableEdit\n\t\t\t\t\teditId={ props.editIdRef.current ?? '' }\n\t\t\t\t\tonGoBack={ () => props.setCurrentView( VIEW_LIST ) }\n\t\t\t\t\tonClose={ props.closePopover }\n\t\t\t\t\tonSubmit={ handleSubmitOnEdit }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t}\n\n\tif ( colorVariablePropTypeUtil.key === props.propTypeKey ) {\n\t\tif ( VIEW_LIST === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<ColorVariablesSelection\n\t\t\t\t\tclosePopover={ props.closePopover }\n\t\t\t\t\tonAdd={ () => {\n\t\t\t\t\t\tprops.setCurrentView( VIEW_ADD );\n\t\t\t\t\t} }\n\t\t\t\t\tonEdit={ ( key ) => {\n\t\t\t\t\t\tprops.editIdRef.current = key;\n\t\t\t\t\t\tprops.setCurrentView( VIEW_EDIT );\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif ( VIEW_ADD === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<ColorVariableCreation\n\t\t\t\t\tonGoBack={ () => props.setCurrentView( VIEW_LIST ) }\n\t\t\t\t\tonClose={ props.closePopover }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tif ( VIEW_EDIT === props.currentView ) {\n\t\t\treturn (\n\t\t\t\t<ColorVariableEdit\n\t\t\t\t\teditId={ props.editIdRef.current ?? '' }\n\t\t\t\t\tonGoBack={ () => props.setCurrentView( VIEW_LIST ) }\n\t\t\t\t\tonClose={ props.closePopover }\n\t\t\t\t\tonSubmit={ handleSubmitOnEdit }\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t}\n\n\treturn null;\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 { createPropUtils } from '@elementor/editor-props';\nimport { z } from '@elementor/schema';\n\nexport const fontVariablePropTypeUtil = createPropUtils( 'global-font-variable', z.string() );\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, BrushIcon } from '@elementor/icons';\nimport { Button, CardActions, Divider, IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { createVariable } from '../hooks/use-prop-variables';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { ColorField } from './fields/color-field';\nimport { LabelField } from './fields/label-field';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tonGoBack?: () => void;\n\tonClose: () => void;\n};\n\nexport const ColorVariableCreation = ( { onGoBack, onClose }: Props ) => {\n\tconst { setValue: setVariable } = useBoundProp( colorVariablePropTypeUtil );\n\n\tconst [ color, setColor ] = useState( '' );\n\tconst [ label, setLabel ] = useState( '' );\n\n\tconst resetFields = () => {\n\t\tsetColor( '' );\n\t\tsetLabel( '' );\n\t};\n\n\tconst closePopover = () => {\n\t\tresetFields();\n\t\tonClose();\n\t};\n\n\tconst handleCreate = () => {\n\t\tcreateVariable( {\n\t\t\tvalue: color,\n\t\t\tlabel,\n\t\t\ttype: colorVariablePropTypeUtil.key,\n\t\t} ).then( ( key ) => {\n\t\t\tsetVariable( key );\n\t\t\tclosePopover();\n\t\t} );\n\t};\n\n\tconst hasEmptyValue = () => {\n\t\treturn '' === color.trim() || '' === label.trim();\n\t};\n\n\tconst isSubmitDisabled = hasEmptyValue();\n\n\treturn (\n\t\t<PopoverScrollableContent 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<BrushIcon 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<LabelField value={ label } onChange={ setLabel } />\n\t\t\t\t<ColorField value={ color } onChange={ setColor } />\n\t\t\t</PopoverContent>\n\n\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isSubmitDisabled } onClick={ handleCreate }>\n\t\t\t\t\t{ __( 'Create', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardActions>\n\t\t</PopoverScrollableContent>\n\t);\n};\n","import { useMemo } from 'react';\nimport { type PropKey } from '@elementor/editor-props';\n\nimport { service } from '../service';\nimport { type Variable } from '../types';\n\nexport const useVariable = ( key: string ) => {\n\tconst variables = service.variables();\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 variables = usePropVariables( propTypeKey );\n\n\tconst filteredVariables = variables.filter( ( { label } ) => {\n\t\treturn label.toLowerCase().includes( searchValue.toLowerCase() );\n\t} );\n\n\treturn {\n\t\tlist: filteredVariables,\n\t\thasMatches: filteredVariables.length > 0,\n\t\tisSourceNotEmpty: variables.length > 0,\n\t};\n};\n\nconst usePropVariables = ( propKey: PropKey ) => {\n\treturn useMemo( () => normalizeVariables( propKey ), [ propKey ] );\n};\n\nconst isNotDeleted = ( { deleted }: { deleted?: boolean } ) => ! deleted;\n\nconst normalizeVariables = ( propKey: string ) => {\n\tconst variables = service.variables();\n\n\treturn Object.entries( variables )\n\t\t.filter( ( [ , variable ] ) => variable.type === propKey && isNotDeleted( variable ) )\n\t\t.map( ( [ key, { label, value } ] ) => ( {\n\t\t\tkey,\n\t\t\tlabel,\n\t\t\tvalue,\n\t\t} ) );\n};\n\nexport const createVariable = ( newVariable: Variable ): Promise< string > => {\n\treturn service.create( newVariable ).then( ( { id }: { id: string } ) => {\n\t\treturn id;\n\t} );\n};\n\nexport const updateVariable = ( updateId: string, { value, label }: { value: string; label: string } ) => {\n\treturn service.update( updateId, { value, label } ).then( ( { id }: { id: string } ) => {\n\t\treturn id;\n\t} );\n};\n\nexport const deleteVariable = ( deleteId: string ) => {\n\treturn service.delete( deleteId ).then( ( { id }: { id: string } ) => {\n\t\treturn id;\n\t} );\n};\n","import { httpService } from '@elementor/http-client';\n\nconst BASE_PATH = 'elementor/v1/variables';\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 ) => {\n\t\treturn httpService().put( BASE_PATH + '/update', {\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tvalue,\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 ) => {\n\t\treturn httpService().post( BASE_PATH + '/restore', { id } );\n\t},\n};\n","export type TVariable = {\n\ttype: string;\n\tlabel: string;\n\tvalue: string;\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\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}\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}\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}\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 { 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, newValue: string ): boolean => {\n\t\treturn ! ( key in variables ) || variables[ key ] !== newValue;\n\t};\n\n\tconst applyUpdates = ( updatedVars: Variables ): boolean => {\n\t\tlet hasChanges = false;\n\n\t\tfor ( const [ key, { value } ] of Object.entries( updatedVars ) ) {\n\t\t\tif ( shouldUpdate( key, value ) ) {\n\t\t\t\tvariables[ key ] = value;\n\t\t\t\thasChanges = true;\n\t\t\t}\n\t\t}\n\n\t\treturn hasChanges;\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 { apiClient } from './api';\nimport { OP_RW, Storage, 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\tinit: () => {\n\t\tservice.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\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, ...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 }: Omit< Variable, 'type' > ) => {\n\t\treturn apiClient\n\t\t\t.update( id, 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\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, ...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 ) => {\n\t\treturn apiClient\n\t\t\t.restore( 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, ...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\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 * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { FormHelperText, FormLabel, Grid, UnstableColorField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { validateValue } from '../../utils/validations';\nimport { usePopoverContentRef } from '../variable-selection-popover.context';\n\ntype ColorFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n};\n\nexport const ColorField = ( { value, onChange }: ColorFieldProps ) => {\n\tconst [ color, setColor ] = useState( value );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\n\tconst defaultRef = useRef< HTMLDivElement >( null );\n\tconst anchorRef = usePopoverContentRef() ?? defaultRef;\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetColor( newValue );\n\n\t\tconst errorMsg = validateValue( newValue );\n\t\tsetErrorMessage( errorMsg );\n\n\t\tonChange( errorMsg ? '' : newValue );\n\t};\n\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 size=\"tiny\">{ __( 'Value', 'elementor' ) }</FormLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<UnstableColorField\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tfullWidth\n\t\t\t\t\tvalue={ color }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\terror={ errorMessage ?? undefined }\n\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\tcolorPicker: {\n\t\t\t\t\t\t\tanchorEl: anchorRef.current,\n\t\t\t\t\t\t\tanchorOrigin: { vertical: 'top', horizontal: 'right' },\n\t\t\t\t\t\t\ttransformOrigin: { vertical: 'top', horizontal: -10 },\n\t\t\t\t\t\t},\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import { __ } from '@wordpress/i18n';\n\nexport const VARIABLE_LABEL_MAX_LENGTH = 50;\n\nexport const validateLabel = ( name: string ): string => {\n\tif ( ! name.trim() ) {\n\t\treturn __( 'Missing variable name.', 'elementor' );\n\t}\n\n\tconst allowedChars = /^[a-zA-Z0-9_-]+$/;\n\tif ( ! allowedChars.test( name ) ) {\n\t\treturn __( 'Names can only use letters, numbers, dashes (-) and underscores (_).', 'elementor' );\n\t}\n\n\tconst hasAlphanumeric = /[a-zA-Z0-9]/;\n\tif ( ! hasAlphanumeric.test( name ) ) {\n\t\treturn __( 'Names have to include at least one non-special character.', 'elementor' );\n\t}\n\n\tif ( VARIABLE_LABEL_MAX_LENGTH < name.length ) {\n\t\treturn __( 'Variable names can contain up to 50 characters.', 'elementor' );\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 __( 'Variable names can contain up to 50 characters.', 'elementor' );\n\t}\n\n\treturn '';\n};\n\nexport const validateValue = ( value: string ): string => {\n\tif ( ! value.trim() ) {\n\t\treturn __( 'Missing variable value.', 'elementor' );\n\t}\n\n\treturn '';\n};\n","import { createContext, useContext } from 'react';\n\nexport const PopoverContentRefContext = createContext< React.RefObject< HTMLDivElement > | null >( null );\n\nexport const usePopoverContentRef = () => {\n\treturn useContext( PopoverContentRefContext );\n};\n","import * as React from 'react';\nimport { useId, useState } from 'react';\nimport { FormHelperText, FormLabel, Grid, TextField } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { labelHint, validateLabel, VARIABLE_LABEL_MAX_LENGTH } from '../../utils/validations';\n\ntype LabelFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n};\n\nexport const LabelField = ( { value, onChange }: LabelFieldProps ) => {\n\tconst [ label, setLabel ] = useState( value );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\tconst [ noticeMessage, setNoticeMessage ] = useState( () => labelHint( value ) );\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetLabel( newValue );\n\n\t\tconst errorMsg = validateLabel( newValue );\n\t\tconst hintMsg = labelHint( newValue );\n\n\t\tsetErrorMessage( errorMsg );\n\t\tsetNoticeMessage( errorMsg ? '' : hintMsg );\n\n\t\tonChange( errorMsg ? '' : newValue );\n\t};\n\n\tconst id = useId();\n\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{ __( 'Name', 'elementor' ) }\n\t\t\t\t</FormLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<TextField\n\t\t\t\t\tid={ id }\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\tfullWidth\n\t\t\t\t\tvalue={ label }\n\t\t\t\t\terror={ !! errorMessage }\n\t\t\t\t\tonChange={ ( e: React.ChangeEvent< HTMLInputElement > ) => handleChange( e.target.value ) }\n\t\t\t\t\tinputProps={ { maxLength: VARIABLE_LABEL_MAX_LENGTH } }\n\t\t\t\t/>\n\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t\t{ noticeMessage && <FormHelperText>{ noticeMessage }</FormHelperText> }\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, BrushIcon, TrashIcon } from '@elementor/icons';\nimport { Button, CardActions, Divider, IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { deleteVariable, updateVariable, useVariable } from '../hooks/use-prop-variables';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { ColorField } from './fields/color-field';\nimport { LabelField } from './fields/label-field';\nimport { DeleteConfirmationDialog } from './ui/delete-confirmation-dialog';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\teditId: string;\n\tonClose: () => void;\n\tonGoBack?: () => void;\n\tonSubmit?: () => void;\n};\n\nexport const ColorVariableEdit = ( { onClose, onGoBack, onSubmit, editId }: Props ) => {\n\tconst { setValue: notifyBoundPropChange, value: assignedValue } = useBoundProp( colorVariablePropTypeUtil );\n\tconst [ deleteConfirmation, setDeleteConfirmation ] = useState( false );\n\n\tconst variable = useVariable( editId );\n\tif ( ! variable ) {\n\t\tthrow new Error( `Global color variable not found` );\n\t}\n\n\tconst [ color, setColor ] = useState( variable.value );\n\tconst [ label, setLabel ] = useState( variable.label );\n\n\tconst handleUpdate = () => {\n\t\tupdateVariable( editId, {\n\t\t\tvalue: color,\n\t\t\tlabel,\n\t\t} ).then( () => {\n\t\t\tmaybeTriggerBoundPropChange();\n\t\t\tonSubmit?.();\n\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 === assignedValue ) {\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 actions = [];\n\n\tactions.push(\n\t\t<IconButton\n\t\t\tkey=\"delete\"\n\t\t\tsize={ SIZE }\n\t\t\taria-label={ __( 'Delete', 'elementor' ) }\n\t\t\tonClick={ handleDeleteConfirmation }\n\t\t>\n\t\t\t<TrashIcon fontSize={ SIZE } />\n\t\t</IconButton>\n\t);\n\n\tconst hasEmptyValues = () => {\n\t\treturn ! color.trim() || ! label.trim();\n\t};\n\n\tconst noValueChanged = () => {\n\t\treturn color === variable.value && label === variable.label;\n\t};\n\n\tconst isSubmitDisabled = noValueChanged() || hasEmptyValues();\n\n\treturn (\n\t\t<>\n\t\t\t<PopoverScrollableContent 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<BrushIcon 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<LabelField value={ label } onChange={ setLabel } />\n\t\t\t\t\t<ColorField value={ color } onChange={ setColor } />\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</PopoverScrollableContent>\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\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { AlertOctagonFilledIcon } from '@elementor/icons';\nimport {\n\tButton,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogContentText,\n\tDialogTitle,\n\tTypography,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst TITLE_ID = 'delete-variable-dialog';\n\nexport const DeleteConfirmationDialog = ( {\n\topen,\n\tlabel,\n\tcloseDialog,\n\tonConfirm,\n}: {\n\topen: boolean;\n\tlabel: string;\n\tcloseDialog: () => void;\n\tonConfirm: () => void;\n} ) => {\n\treturn (\n\t\t<Dialog open={ open } onClose={ closeDialog } aria-labelledby={ TITLE_ID } maxWidth=\"xs\">\n\t\t\t<DialogTitle id={ TITLE_ID } display=\"flex\" alignItems=\"center\" gap={ 1 } sx={ { lineHeight: 1 } }>\n\t\t\t\t<AlertOctagonFilledIcon color=\"error\" />\n\t\t\t\t{ __( 'Delete Variable', '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{ __( 'You are about to delete', 'elementor' ) }\n\t\t\t\t\t<Typography variant=\"subtitle2\" component=\"span\">\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\t'Variable. Note that its value is still being used anywhere on your site where it was connected to the variable.',\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>\n\t\t\t\t<Button color=\"secondary\" onClick={ closeDialog }>\n\t\t\t\t\t{ __( 'Cancel', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"contained\" color=\"error\" onClick={ onConfirm }>\n\t\t\t\t\t{ __( 'Delete', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</DialogActions>\n\t\t</Dialog>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader, PopoverMenuList, PopoverSearch, type VirtualizedItem } from '@elementor/editor-ui';\nimport { BrushIcon, ColorFilterIcon, PlusIcon, SettingsIcon } from '@elementor/icons';\nimport { Divider, IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useFilteredVariables } from '../hooks/use-prop-variables';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { type ExtendedVirtualizedItem } from '../types';\nimport { ColorIndicator } from './ui/color-indicator';\nimport { MenuItemContent } from './ui/menu-item-content';\nimport { NoSearchResults } from './ui/no-search-results';\nimport { NoVariables } from './ui/no-variables';\nimport { VariablesStyledMenuList } from './ui/styled-menu-list';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tclosePopover: () => void;\n\tonAdd?: () => void;\n\tonEdit?: ( key: string ) => void;\n\tonSettings?: () => void;\n};\n\nexport const ColorVariablesSelection = ( { closePopover, onAdd, onEdit, onSettings }: Props ) => {\n\tconst { value: variable, setValue: setVariable } = useBoundProp( colorVariablePropTypeUtil );\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst {\n\t\tlist: variables,\n\t\thasMatches: hasSearchResults,\n\t\tisSourceNotEmpty: hasVariables,\n\t} = useFilteredVariables( searchValue, colorVariablePropTypeUtil.key );\n\n\tconst handleSetColorVariable = ( key: string ) => {\n\t\tsetVariable( key );\n\t\tclosePopover();\n\t};\n\n\tconst actions = [];\n\n\tif ( onAdd ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"add\" size={ SIZE } onClick={ onAdd }>\n\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\n\n\tif ( onSettings ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"settings\" size={ SIZE } onClick={ onSettings }>\n\t\t\t\t<SettingsIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\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: <ColorIndicator size=\"inherit\" component=\"span\" value={ value } />,\n\t\tsecondaryText: value,\n\t\tonEdit: () => onEdit?.( key ),\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<>\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<PopoverSearch\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<PopoverScrollableContent>\n\t\t\t\t{ hasVariables && hasSearchResults && (\n\t\t\t\t\t<PopoverMenuList\n\t\t\t\t\t\titems={ items }\n\t\t\t\t\t\tonSelect={ handleSetColorVariable }\n\t\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\t\tselectedValue={ variable }\n\t\t\t\t\t\tdata-testid=\"color-variables-list\"\n\t\t\t\t\t\tmenuListTemplate={ VariablesStyledMenuList }\n\t\t\t\t\t\tmenuItemContentTemplate={ ( item: VirtualizedItem< 'item', string > ) => (\n\t\t\t\t\t\t\t<MenuItemContent item={ item } />\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ ! hasSearchResults && hasVariables && (\n\t\t\t\t\t<NoSearchResults\n\t\t\t\t\t\tsearchValue={ searchValue }\n\t\t\t\t\t\tonClear={ handleClearSearch }\n\t\t\t\t\t\ticon={ <BrushIcon fontSize=\"large\" /> }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ ! hasVariables && (\n\t\t\t\t\t<NoVariables\n\t\t\t\t\t\ttitle={ __( 'Create your first color variable', 'elementor' ) }\n\t\t\t\t\t\ticon={ <BrushIcon fontSize=\"large\" /> }\n\t\t\t\t\t\tonAdd={ onAdd }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</PopoverScrollableContent>\n\t\t</>\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, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\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<IconButton\n\t\t\t\t\tsx={ { mx: 1, opacity: '0' } }\n\t\t\t\t\tonClick={ ( e: React.MouseEvent< HTMLButtonElement > ) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tonEdit( item.value );\n\t\t\t\t\t} }\n\t\t\t\t\taria-label={ __( 'Edit', 'elementor' ) }\n\t\t\t\t>\n\t\t\t\t\t<EditIcon color=\"action\" fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t) }\n\t\t</>\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\theight=\"100%\"\n\t\t\tp={ 2.5 }\n\t\t\tcolor=\"text.secondary\"\n\t\t\tsx={ { pb: 3.5 } }\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 * as React from 'react';\nimport { Button, Stack, Typography } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype Props = {\n\ticon?: React.ReactNode;\n\ttitle?: string;\n\tonAdd?: () => void;\n};\n\nexport const NoVariables = ( { icon, title, onAdd }: Props ) => (\n\t<Stack\n\t\tgap={ 1 }\n\t\talignItems=\"center\"\n\t\tjustifyContent=\"center\"\n\t\theight=\"100%\"\n\t\tcolor=\"text.secondary\"\n\t\tsx={ { p: 2.5, pb: 5.5 } }\n\t>\n\t\t{ icon }\n\n\t\t<Typography align=\"center\" variant=\"subtitle2\">\n\t\t\t{ title }\n\t\t</Typography>\n\n\t\t<Typography align=\"center\" variant=\"caption\" maxWidth=\"180px\">\n\t\t\t{ __( 'Variables are saved attributes that you can apply anywhere on your site.', 'elementor' ) }\n\t\t</Typography>\n\n\t\t{ onAdd && (\n\t\t\t<Button variant=\"outlined\" color=\"secondary\" size=\"small\" onClick={ onAdd }>\n\t\t\t\t{ __( 'Create a variable', 'elementor' ) }\n\t\t\t</Button>\n\t\t) }\n\t</Stack>\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 { useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, TextIcon } from '@elementor/icons';\nimport { Button, CardActions, Divider, IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { createVariable } from '../hooks/use-prop-variables';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\nimport { FontField } from './fields/font-field';\nimport { LabelField } from './fields/label-field';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tonGoBack?: () => void;\n\tonClose: () => void;\n};\n\nexport const FontVariableCreation = ( { onClose, onGoBack }: Props ) => {\n\tconst { setValue: setVariable } = useBoundProp( fontVariablePropTypeUtil );\n\n\tconst [ fontFamily, setFontFamily ] = useState( '' );\n\tconst [ label, setLabel ] = useState( '' );\n\n\tconst resetFields = () => {\n\t\tsetFontFamily( '' );\n\t\tsetLabel( '' );\n\t};\n\n\tconst closePopover = () => {\n\t\tresetFields();\n\t\tonClose();\n\t};\n\n\tconst handleCreate = () => {\n\t\tcreateVariable( {\n\t\t\tvalue: fontFamily,\n\t\t\tlabel,\n\t\t\ttype: fontVariablePropTypeUtil.key,\n\t\t} ).then( ( key ) => {\n\t\t\tsetVariable( key );\n\t\t\tclosePopover();\n\t\t} );\n\t};\n\n\tconst hasEmptyValue = () => {\n\t\treturn '' === fontFamily.trim() || '' === label.trim();\n\t};\n\n\tconst isSubmitDisabled = hasEmptyValue();\n\n\treturn (\n\t\t<PopoverScrollableContent 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<TextIcon 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<LabelField value={ label } onChange={ setLabel } />\n\t\t\t\t<FontField value={ fontFamily } onChange={ setFontFamily } />\n\t\t\t</PopoverContent>\n\n\t\t\t<CardActions sx={ { pt: 0.5, pb: 1 } }>\n\t\t\t\t<Button size=\"small\" variant=\"contained\" disabled={ isSubmitDisabled } onClick={ handleCreate }>\n\t\t\t\t\t{ __( 'Create', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardActions>\n\t\t</PopoverScrollableContent>\n\t);\n};\n","import * as React from 'react';\nimport { useRef, useState } from 'react';\nimport { FontFamilySelector } from '@elementor/editor-controls';\nimport { useFontFamilies, useSectionWidth } from '@elementor/editor-editing-panel';\nimport { ChevronDownIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tFormHelperText,\n\tFormLabel,\n\tGrid,\n\tPopover,\n\tUnstableTag,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { validateValue } from '../../utils/validations';\nimport { usePopoverContentRef } from '../variable-selection-popover.context';\n\ntype FontFieldProps = {\n\tvalue: string;\n\tonChange: ( value: string ) => void;\n};\n\nexport const FontField = ( { value, onChange }: FontFieldProps ) => {\n\tconst [ fontFamily, setFontFamily ] = useState( value );\n\tconst [ errorMessage, setErrorMessage ] = useState( '' );\n\n\tconst defaultRef = useRef< HTMLDivElement >( null );\n\tconst anchorRef = usePopoverContentRef() ?? defaultRef;\n\n\tconst fontPopoverState = usePopupState( { variant: 'popover' } );\n\n\tconst fontFamilies = useFontFamilies();\n\tconst sectionWidth = useSectionWidth();\n\n\tconst handleChange = ( newValue: string ) => {\n\t\tsetFontFamily( newValue );\n\n\t\tconst errorMsg = validateValue( newValue );\n\t\tsetErrorMessage( 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\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 size=\"tiny\">{ __( 'Value', 'elementor' ) }</FormLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<UnstableTag\n\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\tlabel={ fontFamily }\n\t\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t\t{ ...bindTrigger( fontPopoverState ) }\n\t\t\t\t\tfullWidth\n\t\t\t\t/>\n\t\t\t\t<Popover\n\t\t\t\t\tdisablePortal\n\t\t\t\t\tdisableScrollLock\n\t\t\t\t\tanchorEl={ anchorRef.current }\n\t\t\t\t\tanchorOrigin={ { vertical: 'top', horizontal: 'right' } }\n\t\t\t\t\ttransformOrigin={ { vertical: 'top', horizontal: -20 } }\n\t\t\t\t\t{ ...bindPopover( fontPopoverState ) }\n\t\t\t\t>\n\t\t\t\t\t<FontFamilySelector\n\t\t\t\t\t\tfontFamilies={ fontFamilies }\n\t\t\t\t\t\tfontFamily={ fontFamily }\n\t\t\t\t\t\tonFontFamilyChange={ handleFontFamilyChange }\n\t\t\t\t\t\tonClose={ fontPopoverState.close }\n\t\t\t\t\t\tsectionWidth={ sectionWidth }\n\t\t\t\t\t/>\n\t\t\t\t</Popover>\n\t\t\t\t{ errorMessage && <FormHelperText error>{ errorMessage }</FormHelperText> }\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { PopoverContent, useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader } from '@elementor/editor-ui';\nimport { ArrowLeftIcon, TextIcon, TrashIcon } from '@elementor/icons';\nimport { Button, CardActions, Divider, IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { deleteVariable, updateVariable, useVariable } from '../hooks/use-prop-variables';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\nimport { FontField } from './fields/font-field';\nimport { LabelField } from './fields/label-field';\nimport { DeleteConfirmationDialog } from './ui/delete-confirmation-dialog';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\teditId: string;\n\tonClose: () => void;\n\tonGoBack?: () => void;\n\tonSubmit?: () => void;\n};\n\nexport const FontVariableEdit = ( { onClose, onGoBack, onSubmit, editId }: Props ) => {\n\tconst { setValue: notifyBoundPropChange, value: assignedValue } = useBoundProp( fontVariablePropTypeUtil );\n\tconst [ deleteConfirmation, setDeleteConfirmation ] = useState( false );\n\n\tconst variable = useVariable( editId );\n\tif ( ! variable ) {\n\t\tthrow new Error( `Global font variable \"${ editId }\" not found` );\n\t}\n\n\tconst [ fontFamily, setFontFamily ] = useState( variable.value );\n\tconst [ label, setLabel ] = useState( variable.label );\n\n\tconst handleUpdate = () => {\n\t\tupdateVariable( editId, {\n\t\t\tvalue: fontFamily,\n\t\t\tlabel,\n\t\t} ).then( () => {\n\t\t\tmaybeTriggerBoundPropChange();\n\t\t\tonSubmit?.();\n\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 === assignedValue ) {\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 hasEmptyValue = () => {\n\t\treturn ! fontFamily.trim() || ! label.trim();\n\t};\n\n\tconst noValueChanged = () => {\n\t\treturn fontFamily === variable.value && label === variable.label;\n\t};\n\n\tconst isSubmitDisabled = noValueChanged() || hasEmptyValue();\n\n\tconst actions = [];\n\n\tactions.push(\n\t\t<IconButton\n\t\t\tkey=\"delete\"\n\t\t\tsize={ SIZE }\n\t\t\taria-label={ __( 'Delete', 'elementor' ) }\n\t\t\tonClick={ handleDeleteConfirmation }\n\t\t>\n\t\t\t<TrashIcon fontSize={ SIZE } />\n\t\t</IconButton>\n\t);\n\n\treturn (\n\t\t<>\n\t\t\t<PopoverScrollableContent height=\"auto\">\n\t\t\t\t<PopoverHeader\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<TextIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</>\n\t\t\t\t\t}\n\t\t\t\t\ttitle={ __( 'Edit variable', 'elementor' ) }\n\t\t\t\t\tonClose={ onClose }\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<LabelField value={ label } onChange={ setLabel } />\n\t\t\t\t\t<FontField value={ fontFamily } onChange={ setFontFamily } />\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</PopoverScrollableContent>\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\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { PopoverScrollableContent } from '@elementor/editor-editing-panel';\nimport { PopoverHeader, PopoverMenuList, PopoverSearch, type VirtualizedItem } from '@elementor/editor-ui';\nimport { ColorFilterIcon, PlusIcon, SettingsIcon, TextIcon } from '@elementor/icons';\nimport { Divider, IconButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useFilteredVariables } from '../hooks/use-prop-variables';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\nimport { type ExtendedVirtualizedItem } from '../types';\nimport { MenuItemContent } from './ui/menu-item-content';\nimport { NoSearchResults } from './ui/no-search-results';\nimport { NoVariables } from './ui/no-variables';\nimport { VariablesStyledMenuList } from './ui/styled-menu-list';\n\nconst SIZE = 'tiny';\n\ntype Props = {\n\tclosePopover: () => void;\n\tonAdd?: () => void;\n\tonEdit?: ( key: string ) => void;\n\tonSettings?: () => void;\n};\n\nexport const FontVariablesSelection = ( { closePopover, onAdd, onEdit, onSettings }: Props ) => {\n\tconst { value: variable, setValue: setVariable } = useBoundProp( fontVariablePropTypeUtil );\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst {\n\t\tlist: variables,\n\t\thasMatches: hasSearchResults,\n\t\tisSourceNotEmpty: hasVariables,\n\t} = useFilteredVariables( searchValue, fontVariablePropTypeUtil.key );\n\n\tconst handleSetVariable = ( key: string ) => {\n\t\tsetVariable( key );\n\t\tclosePopover();\n\t};\n\n\tconst actions = [];\n\n\tif ( onAdd ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"add\" size={ SIZE } onClick={ onAdd }>\n\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\n\n\tif ( onSettings ) {\n\t\tactions.push(\n\t\t\t<IconButton key=\"settings\" size={ SIZE } onClick={ onSettings }>\n\t\t\t\t<SettingsIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\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: <TextIcon fontSize={ SIZE } />,\n\t\tsecondaryText: value,\n\t\tonEdit: () => onEdit?.( key ),\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<>\n\t\t\t<PopoverHeader\n\t\t\t\ttitle={ __( 'Variables', 'elementor' ) }\n\t\t\t\tonClose={ closePopover }\n\t\t\t\ticon={ <ColorFilterIcon fontSize={ SIZE } /> }\n\t\t\t\tactions={ actions }\n\t\t\t/>\n\n\t\t\t{ hasVariables && (\n\t\t\t\t<PopoverSearch\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<PopoverScrollableContent>\n\t\t\t\t{ hasVariables && hasSearchResults && (\n\t\t\t\t\t<PopoverMenuList\n\t\t\t\t\t\titems={ items }\n\t\t\t\t\t\tonSelect={ handleSetVariable }\n\t\t\t\t\t\tonClose={ () => {} }\n\t\t\t\t\t\tselectedValue={ variable }\n\t\t\t\t\t\tdata-testid=\"font-variables-list\"\n\t\t\t\t\t\tmenuListTemplate={ VariablesStyledMenuList }\n\t\t\t\t\t\tmenuItemContentTemplate={ ( item: VirtualizedItem< 'item', string > ) => (\n\t\t\t\t\t\t\t<MenuItemContent item={ item } />\n\t\t\t\t\t\t) }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ ! hasSearchResults && hasVariables && (\n\t\t\t\t\t<NoSearchResults\n\t\t\t\t\t\tsearchValue={ searchValue }\n\t\t\t\t\t\tonClear={ handleClearSearch }\n\t\t\t\t\t\ticon={ <TextIcon fontSize=\"large\" /> }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\n\t\t\t\t{ ! hasVariables && (\n\t\t\t\t\t<NoVariables\n\t\t\t\t\t\ttitle={ __( 'Create your first font variable', 'elementor' ) }\n\t\t\t\t\t\ticon={ <TextIcon fontSize=\"large\" /> }\n\t\t\t\t\t\tonAdd={ onAdd }\n\t\t\t\t\t/>\n\t\t\t\t) }\n\t\t\t</PopoverScrollableContent>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport { DetachIcon } from '@elementor/icons';\nimport { Box, IconButton, Stack, Typography, UnstableTag as Tag, type UnstableTagProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const SIZE = 'tiny';\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<IconButton key=\"unlink\" size={ SIZE } onClick={ onUnlink } aria-label={ __( 'Unlink', 'elementor' ) }>\n\t\t\t\t<DetachIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Tag\n\t\t\tfullWidth\n\t\t\tshowActionsOnHover\n\t\t\tstartIcon={\n\t\t\t\t<Stack gap={ 0.5 } direction=\"row\" alignItems=\"center\">\n\t\t\t\t\t{ startIcon }\n\t\t\t\t</Stack>\n\t\t\t}\n\t\t\tlabel={\n\t\t\t\t<Box sx={ { display: 'inline-grid', minWidth: 0 } }>\n\t\t\t\t\t<Typography sx={ { lineHeight: 1.34 } } variant=\"caption\" noWrap>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t}\n\t\t\tactions={ actions }\n\t\t\t{ ...props }\n\t\t/>\n\t);\n};\n","import * as React from 'react';\nimport { useRef } from 'react';\nimport { Box } from '@elementor/ui';\n\nimport { type Variable } from '../../../types';\nimport { DeletedTag } from '../tags/deleted-tag';\n\ntype Props = {\n\tvariable: Variable;\n};\n\nexport const DeletedVariable = ( { variable }: Props ) => {\n\tconst anchorRef = useRef< HTMLDivElement >( null );\n\n\treturn (\n\t\t<Box ref={ anchorRef }>\n\t\t\t<DeletedTag label={ variable.label } />\n\t\t</Box>\n\t);\n};\n","import * as React from 'react';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { Box, Typography, UnstableTag as Tag, type UnstableTagProps } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const DeletedTag = ( { label }: UnstableTagProps ) => {\n\treturn (\n\t\t<Tag\n\t\t\tshowActionsOnHover\n\t\t\tfullWidth\n\t\t\tlabel={\n\t\t\t\t<Box sx={ { display: 'inline-grid', minWidth: 0 } }>\n\t\t\t\t\t<Typography sx={ { lineHeight: 1.34 } } variant=\"caption\" noWrap>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Box>\n\t\t\t}\n\t\t\tstartIcon={ <ColorFilterIcon fontSize=\"tiny\" /> }\n\t\t\tendAdornment={\n\t\t\t\t<Typography sx={ { lineHeight: 1.34 } } variant=\"caption\" noWrap>\n\t\t\t\t\t({ __( 'deleted', 'elementor' ) })\n\t\t\t\t</Typography>\n\t\t\t}\n\t\t/>\n\t);\n};\n","import * as React from 'react';\nimport { type PopoverActionProps, useBoundProp } from '@elementor/editor-editing-panel';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { VariableSelectionPopover } from '../components/variable-selection-popover';\nimport { colorVariablePropTypeUtil } from '../prop-types/color-variable-prop-type';\nimport { supportsColorVariables } from '../utils';\n\nexport const usePropColorVariableAction = (): PopoverActionProps => {\n\tconst { propType } = useBoundProp();\n\n\tconst visible = !! propType && supportsColorVariables( propType );\n\n\treturn {\n\t\tvisible,\n\t\ticon: ColorFilterIcon,\n\t\ttitle: __( 'Variables', 'elementor' ),\n\t\tcontent: ( { close: closePopover } ) => {\n\t\t\treturn (\n\t\t\t\t<VariableSelectionPopover closePopover={ closePopover } propTypeKey={ colorVariablePropTypeUtil.key } />\n\t\t\t);\n\t\t},\n\t};\n};\n","import { type PropType, type PropValue } from '@elementor/editor-props';\n\nimport { colorVariablePropTypeUtil } from './prop-types/color-variable-prop-type';\nimport { fontVariablePropTypeUtil } from './prop-types/font-variable-prop-type';\n\nexport const hasAssignedColorVariable = ( propValue: PropValue ): boolean => {\n\treturn !! colorVariablePropTypeUtil.isValid( propValue );\n};\n\nexport const supportsColorVariables = ( propType: PropType ): boolean => {\n\treturn propType.kind === 'union' && colorVariablePropTypeUtil.key in propType.prop_types;\n};\n\nexport const hasAssignedFontVariable = ( propValue: PropValue ): boolean => {\n\treturn !! fontVariablePropTypeUtil.isValid( propValue );\n};\n\nexport const supportsFontVariables = ( propType: PropType ): boolean => {\n\treturn propType.kind === 'union' && fontVariablePropTypeUtil.key in propType.prop_types;\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 { hasAssignedColorVariable } from './utils';\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","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 { createTransformer } from '@elementor/editor-canvas';\n\nexport const variableTransformer = createTransformer( ( value: string ) => {\n\tif ( ! value.trim() ) {\n\t\treturn null;\n\t}\n\n\treturn `var(--${ value })`;\n} );\n","import { styleTransformersRegistry } from '@elementor/editor-canvas';\nimport { controlActionsMenu, registerControlReplacement } from '@elementor/editor-editing-panel';\n\nimport { FontVariableControl } from './controls/font-variable-control';\nimport { usePropFontVariableAction } from './hooks/use-prop-font-variable-action';\nimport { fontVariablePropTypeUtil } from './prop-types/font-variable-prop-type';\nimport { variableTransformer } from './transformers/variable-transformer';\nimport { hasAssignedFontVariable } from './utils';\n\nconst { registerPopoverAction } = controlActionsMenu;\n\nexport function initFontVariables() {\n\tregisterControlReplacement( {\n\t\tcomponent: FontVariableControl,\n\t\tcondition: ( { value } ) => hasAssignedFontVariable( value ),\n\t} );\n\n\tregisterPopoverAction( {\n\t\tid: 'font-variables',\n\t\tuseProps: usePropFontVariableAction,\n\t} );\n\n\tstyleTransformersRegistry.register( fontVariablePropTypeUtil.key, variableTransformer );\n}\n","import * as React from 'react';\nimport { useBoundProp } from '@elementor/editor-controls';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\n\nimport { AssignedVariable } from '../components/ui/variable/assigned-variable';\nimport { DeletedVariable } from '../components/ui/variable/deleted-variable';\nimport { useVariable } from '../hooks/use-prop-variables';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\n\nexport const FontVariableControl = () => {\n\tconst { value: variableValue } = useBoundProp( fontVariablePropTypeUtil );\n\tconst assignedVariable = useVariable( variableValue );\n\n\tif ( ! assignedVariable ) {\n\t\tthrow new Error( `Global font variable ${ variableValue } not found` );\n\t}\n\n\tconst isVariableDeleted = assignedVariable?.deleted;\n\n\tif ( isVariableDeleted ) {\n\t\treturn <DeletedVariable variable={ assignedVariable } />;\n\t}\n\n\treturn (\n\t\t<AssignedVariable\n\t\t\tvariable={ assignedVariable }\n\t\t\tvariablePropTypeUtil={ fontVariablePropTypeUtil }\n\t\t\tfallbackPropTypeUtil={ stringPropTypeUtil }\n\t\t/>\n\t);\n};\n","import * as React from 'react';\nimport { type PopoverActionProps, useBoundProp } from '@elementor/editor-editing-panel';\nimport { ColorFilterIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { VariableSelectionPopover } from '../components/variable-selection-popover';\nimport { fontVariablePropTypeUtil } from '../prop-types/font-variable-prop-type';\nimport { supportsFontVariables } from '../utils';\n\nexport const usePropFontVariableAction = (): PopoverActionProps => {\n\tconst { propType } = useBoundProp();\n\n\tconst visible = !! propType && supportsFontVariables( propType );\n\n\treturn {\n\t\tvisible,\n\t\ticon: ColorFilterIcon,\n\t\ttitle: __( 'Variables', 'elementor' ),\n\t\tcontent: ( { close: closePopover } ) => {\n\t\t\treturn (\n\t\t\t\t<VariableSelectionPopover closePopover={ closePopover } propTypeKey={ fontVariablePropTypeUtil.key } />\n\t\t\t);\n\t\t},\n\t};\n};\n","import * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { Portal } from '@elementor/ui';\n\nimport { styleVariablesRepository } from '../style-variables-repository';\nimport { getCanvasIframeDocument } from '../sync/get-canvas-iframe-document';\nimport { type StyleVariables } 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 convertToCssVariables( variables: StyleVariables ): string {\n\treturn Object.entries( variables )\n\t\t.map( ( [ key, value ] ) => `--${ key }:${ value };` )\n\t\t.join( '' );\n}\n","import type { CanvasExtendedWindow } from './types';\n\nexport function getCanvasIframeDocument() {\n\tconst extendedWindow = window as unknown as CanvasExtendedWindow;\n\n\treturn extendedWindow.elementor?.$preview?.[ 0 ]?.contentDocument;\n}\n"],"mappings":"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","names":["import_editor_canvas","import_editor_editing_panel","React","import_editor_controls","import_editor_props","import_react","React","import_editor_controls","import_icons","import_ui","React","import_react","import_ui","import_editor_props","import_schema","React","import_react","import_ui","import_i18n","import_react","import_ui","import_i18n","import_react","React","import_react","import_ui","import_i18n","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","React","import_icons","import_ui","import_i18n","SIZE","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","React","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","React","import_ui","import_i18n","React","import_ui","import_i18n","import_ui","SIZE","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","React","import_react","import_editor_controls","import_editor_editing_panel","import_icons","import_ui","import_i18n","SIZE","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","React","import_react","import_editor_controls","import_editor_editing_panel","import_editor_ui","import_icons","import_ui","import_i18n","SIZE","React","import_icons","import_ui","import_i18n","SIZE","Tag","SIZE","React","import_react","import_ui","React","import_icons","import_ui","import_i18n","Tag","React","import_editor_editing_panel","import_icons","import_i18n","import_editor_controls","import_editor_props","React","import_editor_canvas","import_editor_editing_panel","React","import_editor_controls","import_editor_props","React","import_editor_editing_panel","import_icons","import_i18n","registerPopoverAction","React","import_react","import_ui","useListenTo"]}
|