@elementor/editor-controls 0.3.0 → 0.3.1

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @elementor/editor-controls
2
2
 
3
+ ## 0.3.1
4
+
5
+ ### Patch Changes
6
+
7
+ - a0ca1d8: fixed an issue where persisting dimensions values behaved unpredictably when switching breakpoints
8
+
3
9
  ## 0.3.0
4
10
 
5
11
  ### Minor Changes
package/dist/index.d.mts CHANGED
@@ -46,8 +46,9 @@ type Props$2 = {
46
46
  value: StringPropValue['value'];
47
47
  disabled?: boolean;
48
48
  }>;
49
+ onChange?: (newValue: string | null, previousValue: string | null | undefined) => void;
49
50
  };
50
- declare const SelectControl: ControlComponent<({ options }: Props$2) => React.JSX.Element>;
51
+ declare const SelectControl: ControlComponent<({ options, onChange }: Props$2) => React.JSX.Element>;
51
52
 
52
53
  declare const ColorControl: ControlComponent<(props: Partial<Omit<UnstableColorFieldProps, "value" | "onChange">>) => React.JSX.Element>;
53
54
 
package/dist/index.d.ts CHANGED
@@ -46,8 +46,9 @@ type Props$2 = {
46
46
  value: StringPropValue['value'];
47
47
  disabled?: boolean;
48
48
  }>;
49
+ onChange?: (newValue: string | null, previousValue: string | null | undefined) => void;
49
50
  };
50
- declare const SelectControl: ControlComponent<({ options }: Props$2) => React.JSX.Element>;
51
+ declare const SelectControl: ControlComponent<({ options, onChange }: Props$2) => React.JSX.Element>;
51
52
 
52
53
  declare const ColorControl: ControlComponent<(props: Partial<Omit<UnstableColorFieldProps, "value" | "onChange">>) => React.JSX.Element>;
53
54
 
package/dist/index.js CHANGED
@@ -237,9 +237,10 @@ var ImageMediaControl = createControl(() => {
237
237
  var React8 = __toESM(require("react"));
238
238
  var import_editor_props2 = require("@elementor/editor-props");
239
239
  var import_ui5 = require("@elementor/ui");
240
- var SelectControl = createControl(({ options }) => {
240
+ var SelectControl = createControl(({ options, onChange }) => {
241
241
  const { value, setValue } = useBoundProp(import_editor_props2.stringPropTypeUtil);
242
242
  const handleChange = (event) => {
243
+ onChange?.(event.target.value, value);
243
244
  setValue(event.target.value);
244
245
  };
245
246
  return /* @__PURE__ */ React8.createElement(ControlActions, null, /* @__PURE__ */ React8.createElement(import_ui5.Select, { displayEmpty: true, size: "tiny", value: value ?? "", onChange: handleChange, fullWidth: true }, options.map(({ label, ...props }) => /* @__PURE__ */ React8.createElement(import_ui5.MenuItem, { key: props.value, ...props }, label))));
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/controls/image-control.tsx","../src/bound-prop-context.tsx","../src/components/control-label.tsx","../src/create-control.tsx","../src/create-control-replacement.tsx","../src/controls/image-media-control.tsx","../src/control-actions/control-actions.tsx","../src/control-actions/control-actions-context.tsx","../src/controls/select-control.tsx","../src/controls/text-control.tsx","../src/controls/text-area-control.tsx","../src/controls/size-control.tsx","../src/components/text-field-inner-selection.tsx","../src/hooks/use-sync-external-state.tsx","../src/controls/stroke-control.tsx","../src/controls/color-control.tsx","../src/controls/box-shadow-repeater-control.tsx","../src/components/repeater.tsx","../src/controls/background-overlay-repeater-control.tsx","../src/controls/toggle-control.tsx","../src/components/control-toggle-button-group.tsx","../src/controls/number-control.tsx","../src/controls/equal-unequal-sizes-control.tsx","../src/controls/linked-dimensions-control.tsx","../src/controls/font-family-control.tsx","../src/hooks/use-filtered-font-families.ts","../src/controls/url-control.tsx","../src/controls/link-control.tsx","../src/controls/gap-control.tsx"],"sourcesContent":["// control types\nexport { ImageControl } from './controls/image-control';\nexport { TextControl } from './controls/text-control';\nexport { TextAreaControl } from './controls/text-area-control';\nexport { SizeControl } from './controls/size-control';\nexport { StrokeControl } from './controls/stroke-control';\nexport { BoxShadowRepeaterControl } from './controls/box-shadow-repeater-control';\nexport { BackgroundOverlayRepeaterControl } from './controls/background-overlay-repeater-control';\nexport { SelectControl } from './controls/select-control';\nexport { ColorControl } from './controls/color-control';\nexport { ToggleControl } from './controls/toggle-control';\nexport { NumberControl } from './controls/number-control';\nexport { EqualUnequalSizesControl } from './controls/equal-unequal-sizes-control';\nexport { LinkedDimensionsControl } from './controls/linked-dimensions-control';\nexport { FontFamilyControl } from './controls/font-family-control';\nexport { UrlControl } from './controls/url-control';\nexport { LinkControl } from './controls/link-control';\nexport { GapControl } from './controls/gap-control';\n\n// components\nexport { ControlLabel } from './components/control-label';\nexport { ControlToggleButtonGroup } from './components/control-toggle-button-group';\n\n// types\nexport type { ControlComponent } from './create-control';\nexport type { ToggleButtonGroupItem } from './components/control-toggle-button-group';\nexport type { EqualUnequalItems } from './controls/equal-unequal-sizes-control';\n\n// providers\nexport { createControlReplacement, ControlReplacementProvider } from './create-control-replacement';\nexport { useBoundProp, BoundPropProvider } from './bound-prop-context';\nexport { ControlActionsProvider, useControlActions } from './control-actions/control-actions-context';\n\n// hooks\nexport { useSyncExternalState } from './hooks/use-sync-external-state';\n","import * as React from 'react';\nimport { imagePropTypeUtil, type ImageSrcPropValue, type PropValue, type SizePropValue } from '@elementor/editor-props';\nimport { Grid, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { ImageMediaControl } from './image-media-control';\nimport { SelectControl } from './select-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport type ImageControlProps = {\n\tsizes: { label: string; value: string }[];\n};\n\nexport const ImageControl = createControl( ( props: ImageControlProps ) => {\n\tconst { value, setValue } = useBoundProp( imagePropTypeUtil );\n\tconst { src, size } = value || {};\n\n\tconst setImageSrc = ( newValue: ImageSrcPropValue ) => {\n\t\tsetValue( {\n\t\t\tsrc: newValue,\n\t\t\tsize: size as SizePropValue,\n\t\t} );\n\t};\n\n\tconst setImageSize = ( newValue: SizePropValue ) => {\n\t\tsetValue( {\n\t\t\tsrc: src as ImageSrcPropValue,\n\t\t\tsize: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<BoundPropProvider value={ src } setValue={ setImageSrc as SetContextValue } bind={ 'src' }>\n\t\t\t\t<ImageMediaControl />\n\t\t\t</BoundPropProvider>\n\t\t\t<BoundPropProvider value={ size } setValue={ setImageSize as SetContextValue } bind={ 'size' }>\n\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<ControlLabel> { __( 'Image Resolution', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<SelectControl options={ props.sizes } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</BoundPropProvider>\n\t\t</Stack>\n\t);\n} );\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { type CreateOptions, type PropKey, type PropTypeUtil, type PropValue } from '@elementor/editor-props';\n\n// Context\nexport type BoundPropContext< T extends PropValue > = {\n\tbind: PropKey;\n\tsetValue: ( value: T | null ) => void;\n\tvalue: T;\n};\n\nconst BoundPropContext = createContext< BoundPropContext< PropValue > | null >( null );\n\n// Provider\nexport type BoundPropProviderProps< T extends PropValue > = BoundPropContext< T > & {\n\tchildren: React.ReactNode;\n\tsetValue: ( value: T | null ) => void;\n};\n\nexport const BoundPropProvider = ( { children, value, setValue, bind }: BoundPropProviderProps< PropValue > ) => {\n\treturn <BoundPropContext.Provider value={ { value, setValue, bind } }>{ children }</BoundPropContext.Provider>;\n};\n\n// Hook\ntype SetValue< T > = ( value: T | null, options?: CreateOptions ) => void;\n\ntype UseBoundProp< TValue > = {\n\tbind: PropKey;\n\tsetValue: SetValue< TValue >;\n\tvalue: TValue;\n};\n\nexport function useBoundProp< TValue extends PropValue >(): BoundPropContext< TValue >;\n\nexport function useBoundProp< TKey extends string, TValue extends PropValue >(\n\tpropTypeUtil: PropTypeUtil< TKey, TValue >\n): UseBoundProp< TValue >;\n\nexport function useBoundProp< TKey extends string, TValue extends PropValue >(\n\tpropTypeUtil?: PropTypeUtil< TKey, TValue >\n) {\n\tconst boundPropContext = useContext< BoundPropContext< TValue > >( BoundPropContext as never );\n\n\tif ( ! boundPropContext ) {\n\t\tthrow new Error( 'useBoundProp must be used within a BoundPropProvider' );\n\t}\n\n\tif ( ! propTypeUtil ) {\n\t\treturn boundPropContext;\n\t}\n\n\tfunction setValue( value: TValue | null, options?: CreateOptions ) {\n\t\tif ( value === null ) {\n\t\t\treturn boundPropContext.setValue( null );\n\t\t}\n\n\t\treturn boundPropContext.setValue( propTypeUtil?.create( value, options ) as TValue );\n\t}\n\n\tconst value = propTypeUtil.extract( boundPropContext.value );\n\n\treturn {\n\t\t...boundPropContext,\n\t\tsetValue,\n\t\tvalue,\n\t};\n}\n","import * as React from 'react';\nimport { Typography } from '@elementor/ui';\n\nexport const ControlLabel = ( { children }: { children: React.ReactNode } ) => {\n\treturn (\n\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t{ children }\n\t\t</Typography>\n\t);\n};\n","import * as React from 'react';\nimport { type ComponentProps, type ComponentType } from 'react';\nimport { ErrorBoundary } from '@elementor/ui';\n\nimport { useControlReplacement } from './create-control-replacement';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyComponentType = ComponentType< any >;\n\ntype Options = {\n\tsupportsReplacements?: boolean;\n};\n\nconst brandSymbol = Symbol( 'control' );\n\nexport type ControlComponent< TComponent extends AnyComponentType = AnyComponentType > = TComponent & {\n\t[ brandSymbol ]: true;\n};\n\nexport function createControl< T extends AnyComponentType >(\n\tComponent: T,\n\t{ supportsReplacements = true }: Options = {}\n) {\n\treturn ( ( props: ComponentProps< T > ) => {\n\t\tconst ControlReplacement = useControlReplacement();\n\n\t\tif ( ControlReplacement && supportsReplacements ) {\n\t\t\treturn (\n\t\t\t\t<ErrorBoundary fallback={ null }>\n\t\t\t\t\t<ControlReplacement { ...props } />\n\t\t\t\t</ErrorBoundary>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<ErrorBoundary fallback={ null }>\n\t\t\t\t<Component { ...props } />\n\t\t\t</ErrorBoundary>\n\t\t);\n\t} ) as ControlComponent< T >;\n}\n","import * as React from 'react';\nimport { type ComponentType, createContext, useContext } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport { useBoundProp } from './bound-prop-context';\n\nexport type ReplaceWhenParams = {\n\tvalue: PropValue;\n};\n\nexport type CreateControlReplacement = {\n\tcomponent: ComponentType;\n\tcondition: ( { value }: ReplaceWhenParams ) => boolean;\n};\n\nconst ControlReplacementContext = createContext< CreateControlReplacement | undefined >( undefined );\n\nexport const ControlReplacementProvider = ( {\n\tcomponent,\n\tcondition,\n\tchildren,\n}: React.PropsWithChildren< CreateControlReplacement > ) => {\n\treturn (\n\t\t<ControlReplacementContext.Provider value={ { component, condition } }>\n\t\t\t{ children }\n\t\t</ControlReplacementContext.Provider>\n\t);\n};\nexport const useControlReplacement = () => {\n\tconst { value } = useBoundProp();\n\tconst controlReplacement = useContext( ControlReplacementContext );\n\n\tlet shouldReplace = false;\n\n\ttry {\n\t\tshouldReplace = !! controlReplacement?.condition( { value } ) && !! controlReplacement.component;\n\t} catch {}\n\n\treturn shouldReplace ? controlReplacement?.component : undefined;\n};\n\nexport const createControlReplacement = () => {\n\tlet controlReplacement: CreateControlReplacement;\n\n\tfunction replaceControl( { component, condition }: CreateControlReplacement ) {\n\t\tcontrolReplacement = { component, condition };\n\t}\n\n\tfunction getControlReplacement() {\n\t\treturn controlReplacement;\n\t}\n\n\treturn { replaceControl, getControlReplacement };\n};\n","import * as React from 'react';\nimport { imageSrcPropTypeUtil } from '@elementor/editor-props';\nimport { UploadIcon } from '@elementor/icons';\nimport { Button, Card, CardMedia, CardOverlay, CircularProgress, Stack } from '@elementor/ui';\nimport { useWpMediaAttachment, useWpMediaFrame } from '@elementor/wp-media';\nimport { __ } from '@wordpress/i18n';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const ImageMediaControl = createControl( () => {\n\tconst { value, setValue } = useBoundProp( imageSrcPropTypeUtil );\n\tconst { id, url } = value ?? {};\n\n\tconst { data: attachment, isFetching } = useWpMediaAttachment( id?.value || null );\n\tconst src = attachment?.url ?? url;\n\n\tconst { open } = useWpMediaFrame( {\n\t\ttypes: [ 'image' ],\n\t\tmultiple: false,\n\t\tselected: id?.value || null,\n\t\tonSelect: ( selectedAttachment ) => {\n\t\t\tsetValue( {\n\t\t\t\tid: {\n\t\t\t\t\t$$type: 'image-attachment-id',\n\t\t\t\t\tvalue: selectedAttachment.id,\n\t\t\t\t},\n\t\t\t\turl: null,\n\t\t\t} );\n\t\t},\n\t} );\n\n\treturn (\n\t\t<Card variant=\"outlined\">\n\t\t\t<CardMedia image={ src } sx={ { height: 150 } }>\n\t\t\t\t{ isFetching ? (\n\t\t\t\t\t<Stack justifyContent=\"center\" alignItems=\"center\" width=\"100%\" height=\"100%\">\n\t\t\t\t\t\t<CircularProgress />\n\t\t\t\t\t</Stack>\n\t\t\t\t) : null }\n\t\t\t</CardMedia>\n\t\t\t<CardOverlay>\n\t\t\t\t<ControlActions>\n\t\t\t\t\t<Stack gap={ 1 }>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\tonClick={ () => open( { mode: 'browse' } ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Select Image', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\t\tstartIcon={ <UploadIcon /> }\n\t\t\t\t\t\t\tonClick={ () => open( { mode: 'upload' } ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Upload Image', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</ControlActions>\n\t\t\t</CardOverlay>\n\t\t</Card>\n\t);\n} );\n","import * as React from 'react';\nimport { type PropsWithChildren, type ReactElement } from 'react';\nimport { styled, UnstableFloatingActionBar } from '@elementor/ui';\n\nimport { useControlActions } from './control-actions-context';\n\n// CSS hack to hide empty floating bars.\nconst FloatingBarContainer = styled( 'span' )`\n\tdisplay: contents;\n\n\t.MuiFloatingActionBar-popper:has( .MuiFloatingActionBar-actions:empty ) {\n\t\tdisplay: none;\n\t}\n`;\n\nexport type ControlActionsProps = PropsWithChildren< object >;\n\nexport default function ControlActions( { children }: ControlActionsProps ) {\n\tconst { items } = useControlActions();\n\n\tif ( items.length === 0 ) {\n\t\treturn children;\n\t}\n\n\tconst menuItems = items.map( ( { MenuItem, id } ) => <MenuItem key={ id } /> );\n\n\treturn (\n\t\t<FloatingBarContainer>\n\t\t\t<UnstableFloatingActionBar actions={ menuItems }>{ children as ReactElement }</UnstableFloatingActionBar>\n\t\t</FloatingBarContainer>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\ntype ControlActionsContext = {\n\titems: Array< {\n\t\tid: string;\n\t\tMenuItem: React.ComponentType;\n\t} >;\n};\n\nconst Context = createContext< ControlActionsContext | null >( null );\n\nexport type ControlActionsProviderProps = PropsWithChildren< ControlActionsContext >;\n\nexport const ControlActionsProvider = ( { children, items }: ControlActionsProviderProps ) => (\n\t<Context.Provider value={ { items } }>{ children }</Context.Provider>\n);\n\nexport const useControlActions = () => {\n\tconst context = useContext( Context );\n\n\tif ( ! context ) {\n\t\tthrow new Error( 'useControlActions must be used within a ControlActionsProvider' );\n\t}\n\n\treturn context;\n};\n","import * as React from 'react';\nimport { stringPropTypeUtil, type StringPropValue } from '@elementor/editor-props';\nimport { MenuItem, Select, type SelectChangeEvent } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\ntype Props = {\n\toptions: Array< { label: string; value: StringPropValue[ 'value' ]; disabled?: boolean } >;\n};\n\nexport const SelectControl = createControl( ( { options }: Props ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: SelectChangeEvent< StringPropValue[ 'value' ] > ) => {\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<Select displayEmpty size=\"tiny\" value={ value ?? '' } onChange={ handleChange } fullWidth>\n\t\t\t\t{ options.map( ( { label, ...props } ) => (\n\t\t\t\t\t<MenuItem key={ props.value } { ...props }>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Select>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const TextControl = createControl( ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => setValue( event.target.value );\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField size=\"tiny\" fullWidth value={ value } onChange={ handleChange } placeholder={ placeholder } />\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\ntype Props = {\n\tplaceholder?: string;\n};\n\nexport const TextAreaControl = createControl( ( { placeholder }: Props ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tmultiline\n\t\t\t\tfullWidth\n\t\t\t\trows={ 5 }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { sizePropTypeUtil } from '@elementor/editor-props';\nimport { InputAdornment } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { SelectionEndAdornment, TextFieldInnerSelection } from '../components/text-field-inner-selection';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\nimport { useSyncExternalState } from '../hooks/use-sync-external-state';\n\nexport type Unit = 'px' | '%' | 'em' | 'rem' | 'vw' | 'vh';\n\nconst defaultUnits: Unit[] = [ 'px', '%', 'em', 'rem', 'vw', 'vh' ];\n\nconst defaultUnit = 'px';\nconst defaultSize = NaN;\n\nexport type SizeControlProps = {\n\tplaceholder?: string;\n\tstartIcon?: React.ReactNode;\n\tunits?: Unit[];\n};\n\nexport const SizeControl = createControl( ( { units = defaultUnits, placeholder, startIcon }: SizeControlProps ) => {\n\tconst { value, setValue } = useBoundProp( sizePropTypeUtil );\n\n\tconst [ state, setState ] = useSyncExternalState( {\n\t\texternal: value,\n\t\tsetExternal: setValue,\n\t\tpersistWhen: ( controlValue ) => !! controlValue?.size || controlValue?.size === 0,\n\t\tfallback: ( controlValue ) => ( { unit: controlValue?.unit || defaultUnit, size: defaultSize } ),\n\t} );\n\n\tconst handleUnitChange = ( unit: Unit ) => {\n\t\tsetState( ( prev ) => ( {\n\t\t\tsize: prev?.size ?? defaultSize,\n\t\t\tunit,\n\t\t} ) );\n\t};\n\n\tconst handleSizeChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tconst { value: size } = event.target;\n\n\t\tsetState( ( prev ) => ( {\n\t\t\t...prev,\n\t\t\tsize: size || size === '0' ? parseFloat( size ) : defaultSize,\n\t\t} ) );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextFieldInnerSelection\n\t\t\t\tendAdornment={\n\t\t\t\t\t<SelectionEndAdornment\n\t\t\t\t\t\toptions={ units }\n\t\t\t\t\t\tonClick={ handleUnitChange }\n\t\t\t\t\t\tvalue={ state?.unit ?? defaultUnit }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\tstartAdornment={ startIcon ?? <InputAdornment position=\"start\">{ startIcon }</InputAdornment> }\n\t\t\t\ttype=\"number\"\n\t\t\t\tvalue={ Number.isNaN( state?.size ) ? '' : state?.size }\n\t\t\t\tonChange={ handleSizeChange }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { forwardRef, useId } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\nimport { bindMenu, bindTrigger, Button, InputAdornment, Menu, MenuItem, TextField, usePopupState } from '@elementor/ui';\n\nexport type TextFieldInnerSelectionProps = {\n\tplaceholder?: string;\n\ttype: string;\n\tvalue: PropValue;\n\tonChange: ( event: React.ChangeEvent< HTMLInputElement > ) => void;\n\tendAdornment: React.ReactNode;\n\tstartAdornment?: React.ReactNode;\n};\n\nexport const TextFieldInnerSelection = forwardRef(\n\t( { placeholder, type, value, onChange, endAdornment, startAdornment }: TextFieldInnerSelectionProps, ref ) => {\n\t\treturn (\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tfullWidth\n\t\t\t\ttype={ type }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\tInputProps={ {\n\t\t\t\t\tendAdornment,\n\t\t\t\t\tstartAdornment,\n\t\t\t\t} }\n\t\t\t\tref={ ref }\n\t\t\t/>\n\t\t);\n\t}\n);\n\nexport type SelectionEndAdornmentProps< T extends string > = {\n\toptions: T[];\n\tonClick: ( value: T ) => void;\n\tvalue: T;\n};\n\nexport const SelectionEndAdornment = < T extends string >( {\n\toptions,\n\tonClick,\n\tvalue,\n}: SelectionEndAdornmentProps< T > ) => {\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: useId(),\n\t} );\n\n\tconst handleMenuItemClick = ( index: number ) => {\n\t\tonClick( options[ index ] );\n\t\tpopupState.close();\n\t};\n\n\treturn (\n\t\t<InputAdornment position=\"end\">\n\t\t\t<Button\n\t\t\t\tsize=\"small\"\n\t\t\t\tcolor=\"inherit\"\n\t\t\t\tsx={ { font: 'inherit', minWidth: 'initial' } }\n\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t>\n\t\t\t\t{ value.toUpperCase() }\n\t\t\t</Button>\n\n\t\t\t<Menu MenuListProps={ { dense: true } } { ...bindMenu( popupState ) }>\n\t\t\t\t{ options.map( ( option, index ) => (\n\t\t\t\t\t<MenuItem key={ option } onClick={ () => handleMenuItemClick( index ) }>\n\t\t\t\t\t\t{ option.toUpperCase() }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Menu>\n\t\t</InputAdornment>\n\t);\n};\n","import { useEffect, useState } from 'react';\n\ntype UseInternalStateOptions< TValue > = {\n\texternal: TValue | null;\n\tsetExternal: ( value: TValue | null ) => void;\n\tpersistWhen: ( value: TValue | null ) => boolean;\n\tfallback: ( value: TValue | null ) => TValue;\n};\n\nexport const useSyncExternalState = < TValue, >( {\n\texternal,\n\tsetExternal,\n\tpersistWhen,\n\tfallback,\n}: UseInternalStateOptions< TValue > ) => {\n\tfunction toExternal( internalValue: TValue | null ) {\n\t\tif ( persistWhen( internalValue ) ) {\n\t\t\treturn internalValue;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction toInternal( externalValue: TValue | null, internalValue: TValue | null ) {\n\t\tif ( ! externalValue ) {\n\t\t\treturn fallback( internalValue );\n\t\t}\n\n\t\treturn externalValue;\n\t}\n\n\tconst [ internal, setInternal ] = useState< TValue >( toInternal( external, null ) );\n\n\tuseEffect( () => {\n\t\tsetInternal( ( prevInternal ) => toInternal( external, prevInternal ) );\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ external ] );\n\n\ttype SetterFunc = ( value: TValue ) => TValue;\n\n\tconst setInternalValue = ( setter: SetterFunc | TValue ) => {\n\t\tconst setterFn = ( typeof setter === 'function' ? setter : () => setter ) as SetterFunc;\n\t\tconst updated = setterFn( internal );\n\n\t\tsetInternal( updated );\n\t\tsetExternal( toExternal( updated ) );\n\t};\n\n\treturn [ internal, setInternalValue ] as const;\n};\n","import * as React from 'react';\nimport { type ColorPropValue, type PropValue, type SizePropValue, strokePropTypeUtil } from '@elementor/editor-props';\nimport { Grid, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\nimport { SizeControl, type Unit } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport type StrokeProps< T > = {\n\tbind: string;\n\tvalue: T;\n\tsetValue: ( v: T ) => void;\n\tlabel: string;\n\tchildren: React.ReactNode;\n};\nconst units: Unit[] = [ 'px', 'em', 'rem' ];\n\nexport const StrokeControl = createControl( () => {\n\tconst { value, setValue } = useBoundProp( strokePropTypeUtil );\n\n\tconst setStrokeWidth = ( newValue: SizePropValue ) => {\n\t\tconst updatedValue = {\n\t\t\t...value,\n\t\t\twidth: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst setStrokeColor = ( newValue: ColorPropValue ) => {\n\t\tconst updatedValue = {\n\t\t\t...value,\n\t\t\tcolor: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Control\n\t\t\t\tbind=\"width\"\n\t\t\t\tlabel={ __( 'Stroke Width', 'elementor' ) }\n\t\t\t\tvalue={ value?.width }\n\t\t\t\tsetValue={ setStrokeWidth }\n\t\t\t>\n\t\t\t\t<SizeControl units={ units } />\n\t\t\t</Control>\n\n\t\t\t<Control\n\t\t\t\tbind=\"color\"\n\t\t\t\tlabel={ __( 'Stroke Color', 'elementor' ) }\n\t\t\t\tvalue={ value?.color }\n\t\t\t\tsetValue={ setStrokeColor }\n\t\t\t>\n\t\t\t\t<ColorControl />\n\t\t\t</Control>\n\t\t</Stack>\n\t);\n} );\n\nconst Control = < T extends PropValue >( { bind, value, setValue, label, children }: StrokeProps< T > ) => (\n\t<BoundPropProvider bind={ bind } value={ value } setValue={ setValue as SetContextValue }>\n\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t{ children }\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n","import * as React from 'react';\nimport { colorPropTypeUtil } from '@elementor/editor-props';\nimport { UnstableColorField, type UnstableColorFieldProps } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const ColorControl = createControl(\n\t( props: Partial< Omit< UnstableColorFieldProps, 'value' | 'onChange' > > ) => {\n\t\tconst { value, setValue } = useBoundProp( colorPropTypeUtil );\n\n\t\tconst handleChange = ( selectedColor: string ) => {\n\t\t\tsetValue( selectedColor );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlActions>\n\t\t\t\t<UnstableColorField size=\"tiny\" { ...props } value={ value } onChange={ handleChange } fullWidth />\n\t\t\t</ControlActions>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport {\n\tboxShadowPropTypeUtil,\n\ttype BoxShadowPropValue,\n\ttype PropValue,\n\ttype ShadowPropValue,\n} from '@elementor/editor-props';\nimport { Grid, Stack, Typography, UnstableColorIndicator } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { Repeater } from '../components/repeater';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\nimport { SelectControl } from './select-control';\nimport { SizeControl } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport const BoxShadowRepeaterControl = createControl( () => {\n\tconst { value: boxShadowValues, setValue } = useBoundProp( boxShadowPropTypeUtil );\n\n\tconst setBoxShadow = ( newValue: BoxShadowPropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\tvalues={ boxShadowValues ?? [] }\n\t\t\tsetValues={ setBoxShadow }\n\t\t\tlabel={ __( 'Box shadow', 'elementor' ) }\n\t\t\titemSettings={ {\n\t\t\t\tIcon: ItemIcon,\n\t\t\t\tLabel: ItemLabel,\n\t\t\t\tContent: ItemContent,\n\t\t\t\tinitialValues: initialShadow,\n\t\t\t} }\n\t\t/>\n\t);\n} );\n\nconst ItemIcon = ( { value }: { value: ShadowPropValue } ) => (\n\t<UnstableColorIndicator size=\"inherit\" component=\"span\" value={ value.value.color.value } />\n);\n\nconst ItemContent = ( {\n\tvalue,\n\tsetValue,\n\tanchorEl,\n}: {\n\tvalue: ShadowPropValue;\n\tsetValue: ( newValue: ShadowPropValue ) => void;\n\tanchorEl: HTMLElement | null;\n} ) => {\n\tconst setShadow = ( newValue: ShadowPropValue[ 'value' ] ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'shadow',\n\t\t\tvalue: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"color\"\n\t\t\t\t\tvalue={ value.value.color }\n\t\t\t\t\tlabel={ __( 'Color', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'color' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, color: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<ColorControl\n\t\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\t\tcolorPicker: {\n\t\t\t\t\t\t\t\tanchorEl,\n\t\t\t\t\t\t\t\tanchorOrigin: {\n\t\t\t\t\t\t\t\t\tvertical: 'top',\n\t\t\t\t\t\t\t\t\thorizontal: 'right',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttransformOrigin: {\n\t\t\t\t\t\t\t\t\tvertical: 'top',\n\t\t\t\t\t\t\t\t\thorizontal: -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/>\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"position\"\n\t\t\t\t\tvalue={ value.value.position }\n\t\t\t\t\tlabel={ __( 'Position', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'position' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, position: v || null } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t{ label: __( 'Inset', 'elementor' ), value: 'inset' },\n\t\t\t\t\t\t\t{ label: __( 'Outset', 'elementor' ), value: '' },\n\t\t\t\t\t\t] }\n\t\t\t\t\t/>\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"hOffset\"\n\t\t\t\t\tlabel={ __( 'Horizontal', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.hOffset }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'hOffset' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, hOffset: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"vOffset\"\n\t\t\t\t\tlabel={ __( 'Vertical', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.vOffset }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'vOffset' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, vOffset: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"blur\"\n\t\t\t\t\tvalue={ value.value.blur }\n\t\t\t\t\tlabel={ __( 'Blur', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'blur' ] ) => setShadow( { ...value.value, blur: v } ) }\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"spread\"\n\t\t\t\t\tlabel={ __( 'Spread', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.spread }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'spread' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, spread: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n};\n\nconst Control = < T extends PropValue >( {\n\tvalue,\n\tsetValue,\n\tlabel,\n\tbind,\n\tchildren,\n}: {\n\tvalue: T;\n\tbind: string;\n\tlabel: string;\n\tchildren: React.ReactNode;\n\tsetValue: ( v: T ) => void;\n} ) => (\n\t<BoundPropProvider value={ value } setValue={ setValue as SetContextValue } bind={ bind }>\n\t\t<Grid item xs={ 6 }>\n\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n\nconst ItemLabel = ( { value }: { value: ShadowPropValue } ) => {\n\tconst { position, hOffset, vOffset, blur, spread } = value.value;\n\n\tconst { size: blurSize = '', unit: blurUnit = '' } = blur?.value || {};\n\tconst { size: spreadSize = '', unit: spreadUnit = '' } = spread?.value || {};\n\tconst { size: hOffsetSize = 'unset', unit: hOffsetUnit = '' } = hOffset?.value || {};\n\tconst { size: vOffsetSize = 'unset', unit: vOffsetUnit = '' } = vOffset?.value || {};\n\n\tconst sizes = [\n\t\thOffsetSize + hOffsetUnit,\n\t\tvOffsetSize + vOffsetUnit,\n\t\tblurSize + blurUnit,\n\t\tspreadSize + spreadUnit,\n\t].join( ' ' );\n\n\treturn (\n\t\t<span style={ { textTransform: 'capitalize' } }>\n\t\t\t{ position ?? 'outset' }: { sizes }\n\t\t</span>\n\t);\n};\n\nconst initialShadow: ShadowPropValue = {\n\t$$type: 'shadow',\n\tvalue: {\n\t\thOffset: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tvOffset: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tblur: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 10 },\n\t\t},\n\t\tspread: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tcolor: {\n\t\t\t$$type: 'color',\n\t\t\tvalue: 'rgba(0, 0, 0, 1)',\n\t\t},\n\t\tposition: null,\n\t},\n};\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { CopyIcon, EyeIcon, EyeOffIcon, PlusIcon, XIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tPopover,\n\tStack,\n\tTypography,\n\tUnstableTag,\n\ttype UnstableTagProps,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\ntype AnchorEl = HTMLElement | null;\n\ntype Item< T > = {\n\tdisabled?: boolean;\n} & T;\n\nexport type RepeaterProps< T > = {\n\tlabel: string;\n\tvalues?: T[];\n\tsetValues: ( newValue: T[] ) => void;\n\titemSettings: {\n\t\tinitialValues: T;\n\t\tLabel: React.ComponentType< { value: T } >;\n\t\tIcon: React.ComponentType< { value: T } >;\n\t\tContent: React.ComponentType< {\n\t\t\tvalue: T;\n\t\t\tsetValue: ( newValue: T ) => void;\n\t\t\tanchorEl: AnchorEl;\n\t\t} >;\n\t};\n};\n\nexport const Repeater = < T, >( {\n\tlabel,\n\titemSettings,\n\tvalues: repeaterValues = [],\n\tsetValues: setRepeaterValues,\n}: RepeaterProps< Item< T > > ) => {\n\tconst addRepeaterItem = () => {\n\t\tconst newItem = structuredClone( itemSettings.initialValues );\n\n\t\tsetRepeaterValues( [ ...repeaterValues, newItem ] );\n\t};\n\n\tconst duplicateRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues( [\n\t\t\t...repeaterValues.slice( 0, index ),\n\t\t\tstructuredClone( repeaterValues[ index ] ),\n\t\t\t...repeaterValues.slice( index ),\n\t\t] );\n\t};\n\n\tconst removeRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues( repeaterValues.filter( ( _, i ) => i !== index ) );\n\t};\n\n\tconst toggleDisableRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues(\n\t\t\trepeaterValues.map( ( value, i ) => {\n\t\t\t\tif ( i === index ) {\n\t\t\t\t\tconst { disabled, ...rest } = value;\n\n\t\t\t\t\t// If the items should not be disabled, remove the disabled property.\n\t\t\t\t\treturn { ...rest, ...( disabled ? {} : { disabled: true } ) } as Item< T >;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t} )\n\t\t);\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\" sx={ { pb: 1 } }>\n\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton size={ SIZE } onClick={ addRepeaterItem } aria-label={ __( 'Add item', 'elementor' ) }>\n\t\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Stack>\n\t\t\t<Stack gap={ 1 }>\n\t\t\t\t{ repeaterValues.map( ( value, index ) => (\n\t\t\t\t\t<RepeaterItem\n\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\tdisabled={ value.disabled }\n\t\t\t\t\t\tlabel={ <itemSettings.Label value={ value } /> }\n\t\t\t\t\t\tstartIcon={ <itemSettings.Icon value={ value } /> }\n\t\t\t\t\t\tremoveItem={ () => removeRepeaterItem( index ) }\n\t\t\t\t\t\tduplicateItem={ () => duplicateRepeaterItem( index ) }\n\t\t\t\t\t\ttoggleDisableItem={ () => toggleDisableRepeaterItem( index ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ( props ) => (\n\t\t\t\t\t\t\t<itemSettings.Content\n\t\t\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\tsetValue={ ( newValue ) =>\n\t\t\t\t\t\t\t\t\tsetRepeaterValues(\n\t\t\t\t\t\t\t\t\t\trepeaterValues.map( ( item, i ) => ( i === index ? newValue : item ) )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</RepeaterItem>\n\t\t\t\t) ) }\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n};\n\ntype RepeaterItemProps = {\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n\tstartIcon: UnstableTagProps[ 'startIcon' ];\n\tremoveItem: () => void;\n\tduplicateItem: () => void;\n\ttoggleDisableItem: () => void;\n\tchildren: ( { anchorEl }: { anchorEl: AnchorEl } ) => React.ReactNode;\n};\n\nconst RepeaterItem = ( {\n\tlabel,\n\tdisabled,\n\tstartIcon,\n\tchildren,\n\tremoveItem,\n\tduplicateItem,\n\ttoggleDisableItem,\n}: RepeaterItemProps ) => {\n\tconst popupId = useId();\n\tconst controlRef = useRef< HTMLElement >( null );\n\tconst [ anchorEl, setAnchorEl ] = useState< AnchorEl >( null );\n\n\tconst popoverState = usePopupState( { popupId, variant: 'popover' } );\n\n\tconst popoverProps = bindPopover( popoverState );\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tlabel={ label }\n\t\t\t\tshowActionsOnHover\n\t\t\t\tref={ controlRef }\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\taria-label={ __( 'Open item', 'elementor' ) }\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tstartIcon={ startIcon }\n\t\t\t\tactions={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ duplicateItem }\n\t\t\t\t\t\t\taria-label={ __( 'Duplicate item', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CopyIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ toggleDisableItem }\n\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\tdisabled ? __( 'Enable item', 'elementor' ) : __( 'Disable item', 'elementor' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ disabled ? <EyeOffIcon fontSize={ SIZE } /> : <EyeIcon fontSize={ SIZE } /> }\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ removeItem }\n\t\t\t\t\t\t\taria-label={ __( 'Remove item', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<XIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpaper: {\n\t\t\t\t\t\tref: setAnchorEl,\n\t\t\t\t\t\tsx: { mt: 0.5, p: 1, pt: 1, width: controlRef.current?.getBoundingClientRect().width },\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<Box p={ 0.5 }>{ children( { anchorEl } ) }</Box>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport {\n\tbackgroundImagePropTypeUtil,\n\ttype backgroundImageTypePropValue,\n\ttype ColorGradientPropValue,\n\ttype PropValue,\n} from '@elementor/editor-props';\nimport { Grid, Stack, Typography, UnstableColorIndicator } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { Repeater } from '../components/repeater';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport const BackgroundOverlayRepeaterControl = createControl( () => {\n\tconst { value: colorOverlayValues, setValue } = useBoundProp( backgroundImagePropTypeUtil );\n\n\tconst setColorOverlay = ( newValue: backgroundImageTypePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\tvalues={ colorOverlayValues }\n\t\t\tsetValues={ setColorOverlay }\n\t\t\tlabel={ __( 'Overlay', 'elementor' ) }\n\t\t\titemSettings={ {\n\t\t\t\tIcon: ItemIcon,\n\t\t\t\tLabel: ItemLabel,\n\t\t\t\tContent: ItemContent,\n\t\t\t\tinitialValues: initialGradient,\n\t\t\t} }\n\t\t/>\n\t);\n} );\n\nconst ItemIcon = ( { value }: { value: ColorGradientPropValue } ) => (\n\t<UnstableColorIndicator size=\"inherit\" component=\"span\" value={ value.value.color.value } />\n);\n\nconst ItemContent = ( {\n\tvalue,\n\tsetValue,\n}: {\n\tvalue: ColorGradientPropValue;\n\tsetValue: ( newValue: ColorGradientPropValue ) => void;\n} ) => {\n\tconst setColor = ( newValue: ColorGradientPropValue[ 'value' ] ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'background-overlay',\n\t\t\tvalue: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Control\n\t\t\t\tbind=\"color\"\n\t\t\t\tvalue={ value.value.color }\n\t\t\t\tlabel={ __( 'Color', 'elementor' ) }\n\t\t\t\tsetValue={ ( v: ColorGradientPropValue[ 'value' ][ 'color' ] ) =>\n\t\t\t\t\tsetColor( { ...value.value, color: v } )\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<ColorControl />\n\t\t\t</Control>\n\t\t</Stack>\n\t);\n};\n\nconst Control = < T extends PropValue >( {\n\tvalue,\n\tsetValue,\n\tlabel,\n\tbind,\n\tchildren,\n}: {\n\tvalue: T;\n\tbind: string;\n\tlabel: string;\n\tchildren: React.ReactNode;\n\tsetValue: ( v: T ) => void;\n} ) => (\n\t<BoundPropProvider value={ value } setValue={ setValue as SetContextValue } bind={ bind }>\n\t\t<Grid container spacing={ 1 } alignItems=\"center\">\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t{ children }\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n\nconst ItemLabel = ( { value }: { value: ColorGradientPropValue } ) => {\n\tconst color = value.value.color.value;\n\n\treturn <span>{ color }</span>;\n};\n\nconst initialGradient: ColorGradientPropValue = {\n\t$$type: 'background-overlay',\n\tvalue: {\n\t\tcolor: {\n\t\t\t$$type: 'color',\n\t\t\tvalue: 'rgba(0, 0, 0, 0.2)',\n\t\t},\n\t},\n};\n","import * as React from 'react';\nimport { type PropValue, stringPropTypeUtil, type StringPropValue } from '@elementor/editor-props';\nimport { type ToggleButtonProps } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { ControlToggleButtonGroup, type ToggleButtonGroupItem } from '../components/control-toggle-button-group';\nimport { createControl } from '../create-control';\n\ntype ToggleControlProps< T extends PropValue > = {\n\toptions: ToggleButtonGroupItem< T >[];\n\tfullWidth?: boolean;\n\tsize?: ToggleButtonProps[ 'size' ];\n};\n\nexport const ToggleControl = createControl(\n\t( { options, fullWidth = false, size = 'tiny' }: ToggleControlProps< StringPropValue[ 'value' ] > ) => {\n\t\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\t\tconst handleToggle = ( option: StringPropValue[ 'value' ] | null ) => {\n\t\t\tsetValue( option );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlToggleButtonGroup\n\t\t\t\titems={ options }\n\t\t\t\tvalue={ value ?? null }\n\t\t\t\tonChange={ handleToggle }\n\t\t\t\texclusive={ true }\n\t\t\t\tfullWidth={ fullWidth }\n\t\t\t\tsize={ size }\n\t\t\t/>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport {\n\ttype StackProps,\n\tstyled,\n\tToggleButton,\n\tToggleButtonGroup,\n\ttype ToggleButtonProps,\n\tTooltip,\n\tuseTheme,\n} from '@elementor/ui';\n\ntype RenderContentProps = { size: ToggleButtonProps[ 'size' ] };\n\nexport type ToggleButtonGroupItem< TValue > = {\n\tvalue: TValue;\n\tlabel: string;\n\trenderContent: ( { size }: RenderContentProps ) => React.ReactNode;\n\tshowTooltip?: boolean;\n};\n\nconst StyledToggleButtonGroup = styled( ToggleButtonGroup )`\n\t${ ( { justify } ) => `justify-content: ${ justify };` }\n`;\n\ntype ExclusiveValue< TValue > = TValue;\ntype NonExclusiveValue< TValue > = TValue[];\n\ntype Props< TValue > = {\n\tjustify?: StackProps[ 'justifyContent' ];\n\tsize?: ToggleButtonProps[ 'size' ];\n\titems: ToggleButtonGroupItem< TValue | null >[];\n\tfullWidth?: boolean;\n} & (\n\t| {\n\t\t\texclusive?: false;\n\t\t\tvalue: NonExclusiveValue< TValue >;\n\t\t\tonChange: ( value: NonExclusiveValue< TValue > ) => void;\n\t }\n\t| {\n\t\t\texclusive: true;\n\t\t\tvalue: ExclusiveValue< TValue >;\n\t\t\tonChange: ( value: ExclusiveValue< TValue > ) => void;\n\t }\n);\n\nexport const ControlToggleButtonGroup = < TValue, >( {\n\tjustify = 'end',\n\tsize = 'tiny',\n\tvalue,\n\tonChange,\n\titems,\n\texclusive = false,\n\tfullWidth = false,\n}: Props< TValue > ) => {\n\tconst isRtl = 'rtl' === useTheme().direction;\n\n\tconst handleChange = (\n\t\t_: React.MouseEvent< HTMLElement >,\n\t\tnewValue: typeof exclusive extends true ? ExclusiveValue< TValue > : NonExclusiveValue< TValue >\n\t) => {\n\t\tonChange( newValue as never );\n\t};\n\n\treturn (\n\t\t<StyledToggleButtonGroup\n\t\t\tjustify={ justify }\n\t\t\tvalue={ value }\n\t\t\tonChange={ handleChange }\n\t\t\texclusive={ exclusive }\n\t\t\tsx={ {\n\t\t\t\tdirection: isRtl ? 'rtl /* @noflip */' : 'ltr /* @noflip */',\n\t\t\t} }\n\t\t>\n\t\t\t{ items.map( ( { label, value: buttonValue, renderContent: Content, showTooltip } ) =>\n\t\t\t\tshowTooltip ? (\n\t\t\t\t\t<Tooltip key={ buttonValue } title={ label } disableFocusListener={ true } placement=\"top\">\n\t\t\t\t\t\t<ToggleButton value={ buttonValue } aria-label={ label } size={ size } fullWidth={ fullWidth }>\n\t\t\t\t\t\t\t<Content size={ size } />\n\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) : (\n\t\t\t\t\t<ToggleButton\n\t\t\t\t\t\tkey={ buttonValue }\n\t\t\t\t\t\tvalue={ buttonValue }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\tfullWidth={ fullWidth }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Content size={ size } />\n\t\t\t\t\t</ToggleButton>\n\t\t\t\t)\n\t\t\t) }\n\t\t</StyledToggleButtonGroup>\n\t);\n};\n","import * as React from 'react';\nimport { numberPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nconst isEmptyOrNaN = ( value?: string | number ) =>\n\tvalue === null || value === undefined || value === '' || Number.isNaN( Number( value ) );\n\nexport const NumberControl = createControl(\n\t( {\n\t\tplaceholder,\n\t\tmax = Number.MAX_VALUE,\n\t\tmin = -Number.MAX_VALUE,\n\t\tstep = 1,\n\t\tshouldForceInt = false,\n\t}: {\n\t\tplaceholder?: string;\n\t\tmax?: number;\n\t\tmin?: number;\n\t\tstep?: number;\n\t\tshouldForceInt?: boolean;\n\t} ) => {\n\t\tconst { value, setValue } = useBoundProp( numberPropTypeUtil );\n\n\t\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\t\tconst eventValue: string = event.target.value;\n\n\t\t\tif ( isEmptyOrNaN( eventValue ) ) {\n\t\t\t\tsetValue( null );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst formattedValue = shouldForceInt ? +parseInt( eventValue ) : Number( eventValue );\n\n\t\t\tsetValue( Math.min( Math.max( formattedValue, min ), max ) );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlActions>\n\t\t\t\t<TextField\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tfullWidth\n\t\t\t\t\tvalue={ isEmptyOrNaN( value ) ? '' : value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\tinputProps={ { step } }\n\t\t\t\t/>\n\t\t\t</ControlActions>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport { type ReactNode, useId, useRef } from 'react';\nimport {\n\ttype PropKey,\n\ttype PropTypeUtil,\n\ttype PropValue,\n\tsizePropTypeUtil,\n\ttype SizePropValue,\n} from '@elementor/editor-props';\nimport { bindPopover, bindToggle, Grid, Popover, Stack, ToggleButton, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { SizeControl } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\ntype MultiSizePropValue = Record< PropKey, SizePropValue >;\n\ntype Item = {\n\ticon: ReactNode;\n\tlabel: string;\n\tbind: PropKey;\n};\n\nexport type EqualUnequalItems = [ Item, Item, Item, Item ];\n\ntype Props< TMultiPropType extends string, TPropValue extends MultiSizePropValue > = {\n\tlabel: string;\n\ticon: ReactNode;\n\titems: EqualUnequalItems;\n\tmultiSizePropTypeUtil: PropTypeUtil< TMultiPropType, TPropValue >;\n};\n\nconst isEqualSizes = ( values: SizePropValue[], items: EqualUnequalItems ) => {\n\tif ( values.length !== items.length ) {\n\t\treturn false;\n\t}\n\n\tconst [ firstValue, ...restValues ] = values;\n\n\treturn restValues.every(\n\t\t( value ) => value.value?.size === firstValue.value?.size && value.value?.unit === firstValue.value?.unit\n\t);\n};\n\nexport function EqualUnequalSizesControl< TMultiPropType extends string, TPropValue extends MultiSizePropValue >( {\n\tlabel,\n\ticon,\n\titems,\n\tmultiSizePropTypeUtil,\n}: Props< TMultiPropType, TPropValue > ) {\n\tconst popupId = useId();\n\tconst controlRef = useRef< HTMLElement >( null );\n\tconst popupState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst { value: sizeValue, setValue: setSizeValue } = useBoundProp( sizePropTypeUtil );\n\tconst { value: multiSizeValue, setValue: setMultiSizeValue } = useBoundProp( multiSizePropTypeUtil );\n\n\tconst splitEqualValue = () => {\n\t\treturn items.reduce( ( acc, item ) => ( { ...acc, [ item.bind ]: sizePropTypeUtil.create( sizeValue ) } ), {} );\n\t};\n\n\tconst setNestedProp = ( item: Item, newValue: SizePropValue ) => {\n\t\tconst newMappedValues = {\n\t\t\t...( multiSizeValue ?? splitEqualValue() ),\n\t\t\t[ item.bind ]: newValue,\n\t\t};\n\n\t\tconst isEqual = isEqualSizes( Object.values( newMappedValues ), items );\n\n\t\tif ( isEqual ) {\n\t\t\treturn setSizeValue( newValue?.value );\n\t\t}\n\n\t\tsetMultiSizeValue( newMappedValues );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\" ref={ controlRef }>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<EqualSizeControl\n\t\t\t\t\t\titems={ items }\n\t\t\t\t\t\tvalue={ sizeValue }\n\t\t\t\t\t\tmultiSizeValue={ multiSizeValue }\n\t\t\t\t\t\tsetValue={ setSizeValue }\n\t\t\t\t\t\ticonButton={\n\t\t\t\t\t\t\t<ToggleButton\n\t\t\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\t{ ...bindToggle( popupState ) }\n\t\t\t\t\t\t\t\tselected={ popupState.isOpen }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ icon }\n\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpaper: { sx: { mt: 0.5, p: 2, pt: 1, width: controlRef.current?.getBoundingClientRect().width } },\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 0 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 1 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 3 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 2 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nconst MultiSizeValueControl = < TPropValue extends MultiSizePropValue >( {\n\titem,\n\tvalue,\n\tsetNestedProp,\n\tsplitEqualValue,\n}: {\n\titem: Item;\n\tvalue: TPropValue | undefined;\n\tsetNestedProp: ( item: Item, newValue: SizePropValue ) => void;\n\tsplitEqualValue: () => TPropValue;\n} ) => {\n\tconst handleChange = ( val: SizePropValue ) => setNestedProp( item, val );\n\n\tconst getMultiSizeValues = () => {\n\t\tif ( value ) {\n\t\t\treturn value?.[ item.bind ] ?? null;\n\t\t}\n\n\t\treturn splitEqualValue()?.[ item.bind ] ?? null;\n\t};\n\n\treturn (\n\t\t<BoundPropProvider bind={ '' } setValue={ handleChange as SetContextValue } value={ getMultiSizeValues() }>\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ item.label }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<SizeControl startIcon={ item.icon } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</BoundPropProvider>\n\t);\n};\n\nconst EqualSizeControl = ( {\n\tvalue,\n\titems,\n\tsetValue,\n\ticonButton,\n\tmultiSizeValue,\n}: {\n\tvalue: SizePropValue[ 'value' ] | null;\n\titems: EqualUnequalItems;\n\tsetValue: ( newValue: SizePropValue[ 'value' ] ) => void;\n\ticonButton: ReactNode;\n\tmultiSizeValue: PropValue;\n} ) => {\n\tconst handleChange = ( newValue: SizePropValue ) => {\n\t\tsetValue( newValue.value );\n\t};\n\n\tconst getDisplayValue = () => {\n\t\tif ( value ) {\n\t\t\treturn sizePropTypeUtil.create( value );\n\t\t}\n\n\t\tconst multiValues = Object.values( multiSizeValue ?? {} ) as SizePropValue[];\n\n\t\tif ( isEqualSizes( multiValues, items ) ) {\n\t\t\treturn sizePropTypeUtil.create( multiValues[ 0 ].value );\n\t\t}\n\t};\n\n\treturn (\n\t\t<BoundPropProvider bind={ '' } setValue={ handleChange as SetContextValue } value={ getDisplayValue() ?? null }>\n\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t<SizeControl placeholder={ __( 'MIXED', 'elementor' ) } />\n\t\t\t\t{ iconButton }\n\t\t\t</Stack>\n\t\t</BoundPropProvider>\n\t);\n};\n","import * as React from 'react';\nimport { linkedDimensionsPropTypeUtil, type PropValue } from '@elementor/editor-props';\nimport { DetachIcon, LinkIcon, SideBottomIcon, SideLeftIcon, SideRightIcon, SideTopIcon } from '@elementor/icons';\nimport { Grid, Stack, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { SizeControl } from './size-control';\n\nexport type Position = 'top' | 'right' | 'bottom' | 'left';\n\nexport const LinkedDimensionsControl = createControl( ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useBoundProp( linkedDimensionsPropTypeUtil );\n\tconst { top, right, bottom, left, isLinked = true } = value || {};\n\n\tconst setLinkedValue = ( position: Position, newValue: PropValue ) => {\n\t\tconst updatedValue = {\n\t\t\tisLinked,\n\t\t\ttop: isLinked ? newValue : top,\n\t\t\tright: isLinked ? newValue : right,\n\t\t\tbottom: isLinked ? newValue : bottom,\n\t\t\tleft: isLinked ? newValue : left,\n\t\t\t[ position ]: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst toggleLinked = () => {\n\t\tconst updatedValue = {\n\t\t\tisLinked: ! isLinked,\n\t\t\ttop,\n\t\t\tright: ! isLinked ? top : right,\n\t\t\tbottom: ! isLinked ? top : bottom,\n\t\t\tleft: ! isLinked ? top : left,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t<ToggleButton\n\t\t\t\t\taria-label={ __( 'Link Inputs', 'elementor' ) }\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\tselected={ isLinked }\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\tonChange={ toggleLinked }\n\t\t\t\t>\n\t\t\t\t\t<LinkedIcon fontSize={ 'tiny' } />\n\t\t\t\t</ToggleButton>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Top', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'top' }\n\t\t\t\t\t\t\tvalue={ top }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideTopIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Right', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'right' }\n\t\t\t\t\t\t\tvalue={ right }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideRightIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Bottom', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'bottom' }\n\t\t\t\t\t\t\tvalue={ bottom }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideBottomIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Left', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'left' }\n\t\t\t\t\t\t\tvalue={ left }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideLeftIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t</>\n\t);\n} );\n\nconst Control = ( {\n\tbind,\n\tstartIcon,\n\tvalue,\n\tsetValue,\n}: {\n\tbind: Position;\n\tvalue: PropValue;\n\tstartIcon: React.ReactNode;\n\tsetValue: ( bind: Position, newValue: PropValue ) => void;\n} ) => (\n\t<BoundPropProvider setValue={ ( newValue ) => setValue( bind, newValue ) } value={ value } bind={ bind }>\n\t\t<SizeControl startIcon={ startIcon } />\n\t</BoundPropProvider>\n);\n","import { Fragment, useId, useState } from 'react';\nimport * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { ChevronDownIcon, EditIcon, PhotoIcon, SearchIcon, XIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tDivider,\n\tIconButton,\n\tInputAdornment,\n\tLink,\n\tListSubheader,\n\tMenuItem,\n\tMenuList,\n\tPopover,\n\tStack,\n\tTextField,\n\tTypography,\n\tUnstableTag,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { createControl } from '../create-control';\nimport { useFilteredFontFamilies } from '../hooks/use-filtered-font-families';\n\nconst SIZE = 'tiny';\n\nexport const FontFamilyControl = createControl( ( { fontFamilies } ) => {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\tconst { value: fontFamily, setValue: setFontFamily } = useBoundProp( stringPropTypeUtil );\n\n\tconst popupId = useId();\n\tconst popoverState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst filteredFontFamilies = useFilteredFontFamilies( fontFamilies, searchValue );\n\n\tif ( ! filteredFontFamilies ) {\n\t\treturn null;\n\t}\n\n\tconst handleSearch = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetSearchValue( event.target.value );\n\t};\n\n\tconst handleClose = () => {\n\t\tsetSearchValue( '' );\n\n\t\tpopoverState.close();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\tlabel={ fontFamily }\n\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tfullWidth\n\t\t\t/>\n\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...bindPopover( popoverState ) }\n\t\t\t\tonClose={ handleClose }\n\t\t\t>\n\t\t\t\t<Stack>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" pl={ 1.5 } pr={ 0.5 } py={ 1.5 }>\n\t\t\t\t\t\t<EditIcon fontSize={ SIZE } sx={ { mr: 0.5 } } />\n\t\t\t\t\t\t<Typography variant=\"subtitle2\">{ __( 'Font Family', 'elementor' ) }</Typography>\n\t\t\t\t\t\t<IconButton size={ SIZE } sx={ { ml: 'auto' } } onClick={ handleClose }>\n\t\t\t\t\t\t\t<XIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Stack>\n\n\t\t\t\t\t<Box px={ 1.5 } pb={ 1 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\t\t\tonChange={ handleSearch }\n\t\t\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t\t\t<SearchIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t\t\t</InputAdornment>\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</Box>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Box sx={ { overflowY: 'auto', height: 260, width: 220 } }>\n\t\t\t\t\t\t{ filteredFontFamilies.length > 0 ? (\n\t\t\t\t\t\t\t<MenuList role=\"listbox\" tabIndex={ 0 }>\n\t\t\t\t\t\t\t\t{ filteredFontFamilies.map( ( [ category, items ], index ) => (\n\t\t\t\t\t\t\t\t\t<Fragment key={ index }>\n\t\t\t\t\t\t\t\t\t\t<ListSubheader sx={ { typography: 'caption', color: 'text.tertiary' } }>\n\t\t\t\t\t\t\t\t\t\t\t{ category }\n\t\t\t\t\t\t\t\t\t\t</ListSubheader>\n\t\t\t\t\t\t\t\t\t\t{ items.map( ( item ) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isSelected = item === fontFamily;\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ item }\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\t\t\t\t\t\t\t\t\tautoFocus={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetFontFamily( item );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleClose();\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ { typography: 'caption' } }\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={ { fontFamily: item } }\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ item }\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Stack alignItems=\"center\" p={ 2.5 } gap={ 1.5 }>\n\t\t\t\t\t\t\t\t<PhotoIcon fontSize=\"large\" />\n\t\t\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t&ldquo;{ searchValue }&rdquo;.\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\t\tcomponent=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={ () => setSearchValue( '' ) }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Clear the filters', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t\t\t\t{ __( 'and try again.', 'elementor' ) }\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Box>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</>\n\t);\n} );\n","import { __ } from '@wordpress/i18n';\n\nexport type SupportedFonts = 'system' | 'googlefonts' | 'customfonts';\n\nconst supportedCategories: Record< SupportedFonts, string > = {\n\tsystem: __( 'System', 'elementor' ),\n\tgooglefonts: __( 'Google Fonts', 'elementor' ),\n\tcustomfonts: __( 'Custom Fonts', 'elementor' ),\n};\n\nexport const useFilteredFontFamilies = ( fontFamilies: Record< string, SupportedFonts >, searchValue: string ) => {\n\tconst filteredFontFamilies = Object.entries( fontFamilies ).reduce< Map< string, string[] > >(\n\t\t( acc, [ font, category ] ) => {\n\t\t\tconst isMatch = font.toLowerCase().includes( searchValue.trim().toLowerCase() );\n\n\t\t\tif ( ! isMatch ) {\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tconst categoryLabel = supportedCategories[ category as SupportedFonts ];\n\n\t\t\tif ( categoryLabel ) {\n\t\t\t\tconst existingCategory = acc.get( categoryLabel );\n\n\t\t\t\tif ( existingCategory ) {\n\t\t\t\t\texistingCategory.push( font );\n\t\t\t\t} else {\n\t\t\t\t\tacc.set( categoryLabel, [ font ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t},\n\t\tnew Map()\n\t);\n\n\treturn [ ...filteredFontFamilies ];\n};\n","import * as React from 'react';\nimport { type UrlPropValue } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const UrlControl = createControl( ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useBoundProp< UrlPropValue >();\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) =>\n\t\tsetValue( {\n\t\t\t$$type: 'url',\n\t\t\tvalue: event.target.value,\n\t\t} );\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tfullWidth\n\t\t\t\tvalue={ value?.value }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { type LinkPropValue, type UrlPropValue } from '@elementor/editor-props';\nimport { MinusIcon, PlusIcon } from '@elementor/icons';\nimport { Collapse, Divider, Grid, IconButton, Stack, Switch } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { UrlControl } from './url-control';\n\nconst SIZE = 'tiny';\n\nconst DEFAULT_LINK_CONTROL_VALUE: LinkPropValue = {\n\t$$type: 'link',\n\tvalue: {\n\t\tenabled: false,\n\t\thref: {\n\t\t\t$$type: 'url',\n\t\t\tvalue: '',\n\t\t},\n\t\tisTargetBlank: false,\n\t},\n};\n\nexport const LinkControl = createControl( () => {\n\tconst { value = DEFAULT_LINK_CONTROL_VALUE, setValue } = useBoundProp< LinkPropValue >();\n\tconst { enabled, href, isTargetBlank } = value?.value || {};\n\n\tconst handleOnChange = < T extends keyof LinkPropValue[ 'value' ] >(\n\t\tkey: T,\n\t\tnewValue: LinkPropValue[ 'value' ][ T ]\n\t) => {\n\t\tsetValue( {\n\t\t\t$$type: 'link',\n\t\t\tvalue: {\n\t\t\t\t...( value?.value ?? DEFAULT_LINK_CONTROL_VALUE.value ),\n\t\t\t\t[ key ]: newValue,\n\t\t\t},\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Divider />\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\tsx={ {\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<ControlLabel>{ __( 'Link', 'elementor' ) }</ControlLabel>\n\t\t\t\t<IconButton size={ SIZE } onClick={ () => handleOnChange( 'enabled', ! enabled ) }>\n\t\t\t\t\t{ enabled ? <MinusIcon fontSize={ SIZE } /> : <PlusIcon fontSize={ SIZE } /> }\n\t\t\t\t</IconButton>\n\t\t\t</Stack>\n\t\t\t<Collapse in={ enabled } timeout=\"auto\" unmountOnExit>\n\t\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\tvalue={ href }\n\t\t\t\t\t\tsetValue={ ( newHref ) => handleOnChange( 'href', newHref as UrlPropValue ) }\n\t\t\t\t\t\tbind={ 'href' }\n\t\t\t\t\t>\n\t\t\t\t\t\t<UrlControl placeholder={ __( 'Paste URL or type', 'elementor' ) } />\n\t\t\t\t\t</BoundPropProvider>\n\n\t\t\t\t\t<SwitchControl\n\t\t\t\t\t\tvalue={ isTargetBlank }\n\t\t\t\t\t\tonSwitch={ () => handleOnChange( 'isTargetBlank', ! isTargetBlank ) }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</Stack>\n\t);\n} );\n\n// @TODO Should be refactored in ED-16323\nconst SwitchControl = ( { value, onSwitch }: { value: boolean; onSwitch: () => void } ) => {\n\treturn (\n\t\t<Grid container alignItems=\"center\" flexWrap=\"nowrap\" justifyContent=\"space-between\">\n\t\t\t<Grid item>\n\t\t\t\t<ControlLabel>{ __( 'Open in new tab', 'elementor' ) }</ControlLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item>\n\t\t\t\t<Switch checked={ value } onChange={ onSwitch } />\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import * as React from 'react';\nimport { gapPropTypeUtil, type PropValue } from '@elementor/editor-props';\nimport { DetachIcon, LinkIcon } from '@elementor/icons';\nimport { Grid, Stack, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { SizeControl } from './size-control';\n\nexport type Gap = 'row' | 'column';\n\nexport const GapControl = createControl( ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useBoundProp( gapPropTypeUtil );\n\tconst { column, row, isLinked = true } = value || {};\n\n\tconst setLinkedValue = ( gap: Gap, newValue: PropValue ) => {\n\t\tconst updatedValue = {\n\t\t\tisLinked,\n\t\t\tcolumn: isLinked ? newValue : column,\n\t\t\trow: isLinked ? newValue : row,\n\t\t\t[ gap ]: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst toggleLinked = () => {\n\t\tconst updatedValue = {\n\t\t\tisLinked: ! isLinked,\n\t\t\tcolumn,\n\t\t\trow: ! isLinked ? column : row,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t<ToggleButton\n\t\t\t\t\taria-label={ __( 'Link Inputs', 'elementor' ) }\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\tselected={ isLinked }\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\tonChange={ toggleLinked }\n\t\t\t\t>\n\t\t\t\t\t<LinkedIcon fontSize={ 'tiny' } />\n\t\t\t\t</ToggleButton>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Column', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\t\tsetValue={ ( newValue ) => setLinkedValue( 'column', newValue ) }\n\t\t\t\t\t\t\tvalue={ column }\n\t\t\t\t\t\t\tbind=\"column\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SizeControl />\n\t\t\t\t\t\t</BoundPropProvider>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Row', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\t\tsetValue={ ( newValue ) => setLinkedValue( 'row', newValue ) }\n\t\t\t\t\t\t\tvalue={ row }\n\t\t\t\t\t\t\tbind=\"row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SizeControl />\n\t\t\t\t\t\t</BoundPropProvider>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t</>\n\t);\n} );\n"],"mappings":"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","names":["React","import_editor_props","import_ui","import_i18n","value","React","React","import_ui","React","import_react","React","import_ui","React","import_ui","React","import_react","MenuItem","React","import_editor_props","import_ui","React","import_editor_props","import_ui","React","import_editor_props","import_ui","React","import_editor_props","import_ui","React","import_react","import_ui","import_react","units","React","import_editor_props","import_ui","import_i18n","React","import_editor_props","import_ui","React","import_editor_props","import_ui","import_i18n","React","import_react","import_icons","import_ui","import_i18n","Control","React","import_editor_props","import_ui","import_i18n","ItemIcon","ItemLabel","ItemContent","Control","React","import_editor_props","React","import_ui","React","import_editor_props","import_ui","React","import_react","import_editor_props","import_ui","import_i18n","React","import_editor_props","import_icons","import_ui","import_i18n","Control","import_react","React","import_editor_props","import_icons","import_ui","import_i18n","import_i18n","SIZE","React","import_ui","React","import_icons","import_ui","import_i18n","SIZE","React","import_editor_props","import_icons","import_ui","import_i18n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/controls/image-control.tsx","../src/bound-prop-context.tsx","../src/components/control-label.tsx","../src/create-control.tsx","../src/create-control-replacement.tsx","../src/controls/image-media-control.tsx","../src/control-actions/control-actions.tsx","../src/control-actions/control-actions-context.tsx","../src/controls/select-control.tsx","../src/controls/text-control.tsx","../src/controls/text-area-control.tsx","../src/controls/size-control.tsx","../src/components/text-field-inner-selection.tsx","../src/hooks/use-sync-external-state.tsx","../src/controls/stroke-control.tsx","../src/controls/color-control.tsx","../src/controls/box-shadow-repeater-control.tsx","../src/components/repeater.tsx","../src/controls/background-overlay-repeater-control.tsx","../src/controls/toggle-control.tsx","../src/components/control-toggle-button-group.tsx","../src/controls/number-control.tsx","../src/controls/equal-unequal-sizes-control.tsx","../src/controls/linked-dimensions-control.tsx","../src/controls/font-family-control.tsx","../src/hooks/use-filtered-font-families.ts","../src/controls/url-control.tsx","../src/controls/link-control.tsx","../src/controls/gap-control.tsx"],"sourcesContent":["// control types\nexport { ImageControl } from './controls/image-control';\nexport { TextControl } from './controls/text-control';\nexport { TextAreaControl } from './controls/text-area-control';\nexport { SizeControl } from './controls/size-control';\nexport { StrokeControl } from './controls/stroke-control';\nexport { BoxShadowRepeaterControl } from './controls/box-shadow-repeater-control';\nexport { BackgroundOverlayRepeaterControl } from './controls/background-overlay-repeater-control';\nexport { SelectControl } from './controls/select-control';\nexport { ColorControl } from './controls/color-control';\nexport { ToggleControl } from './controls/toggle-control';\nexport { NumberControl } from './controls/number-control';\nexport { EqualUnequalSizesControl } from './controls/equal-unequal-sizes-control';\nexport { LinkedDimensionsControl } from './controls/linked-dimensions-control';\nexport { FontFamilyControl } from './controls/font-family-control';\nexport { UrlControl } from './controls/url-control';\nexport { LinkControl } from './controls/link-control';\nexport { GapControl } from './controls/gap-control';\n\n// components\nexport { ControlLabel } from './components/control-label';\nexport { ControlToggleButtonGroup } from './components/control-toggle-button-group';\n\n// types\nexport type { ControlComponent } from './create-control';\nexport type { ToggleButtonGroupItem } from './components/control-toggle-button-group';\nexport type { EqualUnequalItems } from './controls/equal-unequal-sizes-control';\n\n// providers\nexport { createControlReplacement, ControlReplacementProvider } from './create-control-replacement';\nexport { useBoundProp, BoundPropProvider } from './bound-prop-context';\nexport { ControlActionsProvider, useControlActions } from './control-actions/control-actions-context';\n\n// hooks\nexport { useSyncExternalState } from './hooks/use-sync-external-state';\n","import * as React from 'react';\nimport { imagePropTypeUtil, type ImageSrcPropValue, type PropValue, type SizePropValue } from '@elementor/editor-props';\nimport { Grid, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { ImageMediaControl } from './image-media-control';\nimport { SelectControl } from './select-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport type ImageControlProps = {\n\tsizes: { label: string; value: string }[];\n};\n\nexport const ImageControl = createControl( ( props: ImageControlProps ) => {\n\tconst { value, setValue } = useBoundProp( imagePropTypeUtil );\n\tconst { src, size } = value || {};\n\n\tconst setImageSrc = ( newValue: ImageSrcPropValue ) => {\n\t\tsetValue( {\n\t\t\tsrc: newValue,\n\t\t\tsize: size as SizePropValue,\n\t\t} );\n\t};\n\n\tconst setImageSize = ( newValue: SizePropValue ) => {\n\t\tsetValue( {\n\t\t\tsrc: src as ImageSrcPropValue,\n\t\t\tsize: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<BoundPropProvider value={ src } setValue={ setImageSrc as SetContextValue } bind={ 'src' }>\n\t\t\t\t<ImageMediaControl />\n\t\t\t</BoundPropProvider>\n\t\t\t<BoundPropProvider value={ size } setValue={ setImageSize as SetContextValue } bind={ 'size' }>\n\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<ControlLabel> { __( 'Image Resolution', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<SelectControl options={ props.sizes } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</BoundPropProvider>\n\t\t</Stack>\n\t);\n} );\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { type CreateOptions, type PropKey, type PropTypeUtil, type PropValue } from '@elementor/editor-props';\n\n// Context\nexport type BoundPropContext< T extends PropValue > = {\n\tbind: PropKey;\n\tsetValue: ( value: T | null ) => void;\n\tvalue: T;\n};\n\nconst BoundPropContext = createContext< BoundPropContext< PropValue > | null >( null );\n\n// Provider\nexport type BoundPropProviderProps< T extends PropValue > = BoundPropContext< T > & {\n\tchildren: React.ReactNode;\n\tsetValue: ( value: T | null ) => void;\n};\n\nexport const BoundPropProvider = ( { children, value, setValue, bind }: BoundPropProviderProps< PropValue > ) => {\n\treturn <BoundPropContext.Provider value={ { value, setValue, bind } }>{ children }</BoundPropContext.Provider>;\n};\n\n// Hook\ntype SetValue< T > = ( value: T | null, options?: CreateOptions ) => void;\n\ntype UseBoundProp< TValue > = {\n\tbind: PropKey;\n\tsetValue: SetValue< TValue >;\n\tvalue: TValue;\n};\n\nexport function useBoundProp< TValue extends PropValue >(): BoundPropContext< TValue >;\n\nexport function useBoundProp< TKey extends string, TValue extends PropValue >(\n\tpropTypeUtil: PropTypeUtil< TKey, TValue >\n): UseBoundProp< TValue >;\n\nexport function useBoundProp< TKey extends string, TValue extends PropValue >(\n\tpropTypeUtil?: PropTypeUtil< TKey, TValue >\n) {\n\tconst boundPropContext = useContext< BoundPropContext< TValue > >( BoundPropContext as never );\n\n\tif ( ! boundPropContext ) {\n\t\tthrow new Error( 'useBoundProp must be used within a BoundPropProvider' );\n\t}\n\n\tif ( ! propTypeUtil ) {\n\t\treturn boundPropContext;\n\t}\n\n\tfunction setValue( value: TValue | null, options?: CreateOptions ) {\n\t\tif ( value === null ) {\n\t\t\treturn boundPropContext.setValue( null );\n\t\t}\n\n\t\treturn boundPropContext.setValue( propTypeUtil?.create( value, options ) as TValue );\n\t}\n\n\tconst value = propTypeUtil.extract( boundPropContext.value );\n\n\treturn {\n\t\t...boundPropContext,\n\t\tsetValue,\n\t\tvalue,\n\t};\n}\n","import * as React from 'react';\nimport { Typography } from '@elementor/ui';\n\nexport const ControlLabel = ( { children }: { children: React.ReactNode } ) => {\n\treturn (\n\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t{ children }\n\t\t</Typography>\n\t);\n};\n","import * as React from 'react';\nimport { type ComponentProps, type ComponentType } from 'react';\nimport { ErrorBoundary } from '@elementor/ui';\n\nimport { useControlReplacement } from './create-control-replacement';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyComponentType = ComponentType< any >;\n\ntype Options = {\n\tsupportsReplacements?: boolean;\n};\n\nconst brandSymbol = Symbol( 'control' );\n\nexport type ControlComponent< TComponent extends AnyComponentType = AnyComponentType > = TComponent & {\n\t[ brandSymbol ]: true;\n};\n\nexport function createControl< T extends AnyComponentType >(\n\tComponent: T,\n\t{ supportsReplacements = true }: Options = {}\n) {\n\treturn ( ( props: ComponentProps< T > ) => {\n\t\tconst ControlReplacement = useControlReplacement();\n\n\t\tif ( ControlReplacement && supportsReplacements ) {\n\t\t\treturn (\n\t\t\t\t<ErrorBoundary fallback={ null }>\n\t\t\t\t\t<ControlReplacement { ...props } />\n\t\t\t\t</ErrorBoundary>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<ErrorBoundary fallback={ null }>\n\t\t\t\t<Component { ...props } />\n\t\t\t</ErrorBoundary>\n\t\t);\n\t} ) as ControlComponent< T >;\n}\n","import * as React from 'react';\nimport { type ComponentType, createContext, useContext } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport { useBoundProp } from './bound-prop-context';\n\nexport type ReplaceWhenParams = {\n\tvalue: PropValue;\n};\n\nexport type CreateControlReplacement = {\n\tcomponent: ComponentType;\n\tcondition: ( { value }: ReplaceWhenParams ) => boolean;\n};\n\nconst ControlReplacementContext = createContext< CreateControlReplacement | undefined >( undefined );\n\nexport const ControlReplacementProvider = ( {\n\tcomponent,\n\tcondition,\n\tchildren,\n}: React.PropsWithChildren< CreateControlReplacement > ) => {\n\treturn (\n\t\t<ControlReplacementContext.Provider value={ { component, condition } }>\n\t\t\t{ children }\n\t\t</ControlReplacementContext.Provider>\n\t);\n};\nexport const useControlReplacement = () => {\n\tconst { value } = useBoundProp();\n\tconst controlReplacement = useContext( ControlReplacementContext );\n\n\tlet shouldReplace = false;\n\n\ttry {\n\t\tshouldReplace = !! controlReplacement?.condition( { value } ) && !! controlReplacement.component;\n\t} catch {}\n\n\treturn shouldReplace ? controlReplacement?.component : undefined;\n};\n\nexport const createControlReplacement = () => {\n\tlet controlReplacement: CreateControlReplacement;\n\n\tfunction replaceControl( { component, condition }: CreateControlReplacement ) {\n\t\tcontrolReplacement = { component, condition };\n\t}\n\n\tfunction getControlReplacement() {\n\t\treturn controlReplacement;\n\t}\n\n\treturn { replaceControl, getControlReplacement };\n};\n","import * as React from 'react';\nimport { imageSrcPropTypeUtil } from '@elementor/editor-props';\nimport { UploadIcon } from '@elementor/icons';\nimport { Button, Card, CardMedia, CardOverlay, CircularProgress, Stack } from '@elementor/ui';\nimport { useWpMediaAttachment, useWpMediaFrame } from '@elementor/wp-media';\nimport { __ } from '@wordpress/i18n';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const ImageMediaControl = createControl( () => {\n\tconst { value, setValue } = useBoundProp( imageSrcPropTypeUtil );\n\tconst { id, url } = value ?? {};\n\n\tconst { data: attachment, isFetching } = useWpMediaAttachment( id?.value || null );\n\tconst src = attachment?.url ?? url;\n\n\tconst { open } = useWpMediaFrame( {\n\t\ttypes: [ 'image' ],\n\t\tmultiple: false,\n\t\tselected: id?.value || null,\n\t\tonSelect: ( selectedAttachment ) => {\n\t\t\tsetValue( {\n\t\t\t\tid: {\n\t\t\t\t\t$$type: 'image-attachment-id',\n\t\t\t\t\tvalue: selectedAttachment.id,\n\t\t\t\t},\n\t\t\t\turl: null,\n\t\t\t} );\n\t\t},\n\t} );\n\n\treturn (\n\t\t<Card variant=\"outlined\">\n\t\t\t<CardMedia image={ src } sx={ { height: 150 } }>\n\t\t\t\t{ isFetching ? (\n\t\t\t\t\t<Stack justifyContent=\"center\" alignItems=\"center\" width=\"100%\" height=\"100%\">\n\t\t\t\t\t\t<CircularProgress />\n\t\t\t\t\t</Stack>\n\t\t\t\t) : null }\n\t\t\t</CardMedia>\n\t\t\t<CardOverlay>\n\t\t\t\t<ControlActions>\n\t\t\t\t\t<Stack gap={ 1 }>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\tonClick={ () => open( { mode: 'browse' } ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Select Image', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\t\tstartIcon={ <UploadIcon /> }\n\t\t\t\t\t\t\tonClick={ () => open( { mode: 'upload' } ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Upload Image', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</ControlActions>\n\t\t\t</CardOverlay>\n\t\t</Card>\n\t);\n} );\n","import * as React from 'react';\nimport { type PropsWithChildren, type ReactElement } from 'react';\nimport { styled, UnstableFloatingActionBar } from '@elementor/ui';\n\nimport { useControlActions } from './control-actions-context';\n\n// CSS hack to hide empty floating bars.\nconst FloatingBarContainer = styled( 'span' )`\n\tdisplay: contents;\n\n\t.MuiFloatingActionBar-popper:has( .MuiFloatingActionBar-actions:empty ) {\n\t\tdisplay: none;\n\t}\n`;\n\nexport type ControlActionsProps = PropsWithChildren< object >;\n\nexport default function ControlActions( { children }: ControlActionsProps ) {\n\tconst { items } = useControlActions();\n\n\tif ( items.length === 0 ) {\n\t\treturn children;\n\t}\n\n\tconst menuItems = items.map( ( { MenuItem, id } ) => <MenuItem key={ id } /> );\n\n\treturn (\n\t\t<FloatingBarContainer>\n\t\t\t<UnstableFloatingActionBar actions={ menuItems }>{ children as ReactElement }</UnstableFloatingActionBar>\n\t\t</FloatingBarContainer>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\ntype ControlActionsContext = {\n\titems: Array< {\n\t\tid: string;\n\t\tMenuItem: React.ComponentType;\n\t} >;\n};\n\nconst Context = createContext< ControlActionsContext | null >( null );\n\nexport type ControlActionsProviderProps = PropsWithChildren< ControlActionsContext >;\n\nexport const ControlActionsProvider = ( { children, items }: ControlActionsProviderProps ) => (\n\t<Context.Provider value={ { items } }>{ children }</Context.Provider>\n);\n\nexport const useControlActions = () => {\n\tconst context = useContext( Context );\n\n\tif ( ! context ) {\n\t\tthrow new Error( 'useControlActions must be used within a ControlActionsProvider' );\n\t}\n\n\treturn context;\n};\n","import * as React from 'react';\nimport { stringPropTypeUtil, type StringPropValue } from '@elementor/editor-props';\nimport { MenuItem, Select, type SelectChangeEvent } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\ntype Props = {\n\toptions: Array< { label: string; value: StringPropValue[ 'value' ]; disabled?: boolean } >;\n\tonChange?: ( newValue: string | null, previousValue: string | null | undefined ) => void;\n};\n\nexport const SelectControl = createControl( ( { options, onChange }: Props ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: SelectChangeEvent< StringPropValue[ 'value' ] > ) => {\n\t\tonChange?.( event.target.value, value );\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<Select displayEmpty size=\"tiny\" value={ value ?? '' } onChange={ handleChange } fullWidth>\n\t\t\t\t{ options.map( ( { label, ...props } ) => (\n\t\t\t\t\t<MenuItem key={ props.value } { ...props }>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Select>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const TextControl = createControl( ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => setValue( event.target.value );\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField size=\"tiny\" fullWidth value={ value } onChange={ handleChange } placeholder={ placeholder } />\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\ntype Props = {\n\tplaceholder?: string;\n};\n\nexport const TextAreaControl = createControl( ( { placeholder }: Props ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tmultiline\n\t\t\t\tfullWidth\n\t\t\t\trows={ 5 }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { sizePropTypeUtil } from '@elementor/editor-props';\nimport { InputAdornment } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { SelectionEndAdornment, TextFieldInnerSelection } from '../components/text-field-inner-selection';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\nimport { useSyncExternalState } from '../hooks/use-sync-external-state';\n\nexport type Unit = 'px' | '%' | 'em' | 'rem' | 'vw' | 'vh';\n\nconst defaultUnits: Unit[] = [ 'px', '%', 'em', 'rem', 'vw', 'vh' ];\n\nconst defaultUnit = 'px';\nconst defaultSize = NaN;\n\nexport type SizeControlProps = {\n\tplaceholder?: string;\n\tstartIcon?: React.ReactNode;\n\tunits?: Unit[];\n};\n\nexport const SizeControl = createControl( ( { units = defaultUnits, placeholder, startIcon }: SizeControlProps ) => {\n\tconst { value, setValue } = useBoundProp( sizePropTypeUtil );\n\n\tconst [ state, setState ] = useSyncExternalState( {\n\t\texternal: value,\n\t\tsetExternal: setValue,\n\t\tpersistWhen: ( controlValue ) => !! controlValue?.size || controlValue?.size === 0,\n\t\tfallback: ( controlValue ) => ( { unit: controlValue?.unit || defaultUnit, size: defaultSize } ),\n\t} );\n\n\tconst handleUnitChange = ( unit: Unit ) => {\n\t\tsetState( ( prev ) => ( {\n\t\t\tsize: prev?.size ?? defaultSize,\n\t\t\tunit,\n\t\t} ) );\n\t};\n\n\tconst handleSizeChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tconst { value: size } = event.target;\n\n\t\tsetState( ( prev ) => ( {\n\t\t\t...prev,\n\t\t\tsize: size || size === '0' ? parseFloat( size ) : defaultSize,\n\t\t} ) );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextFieldInnerSelection\n\t\t\t\tendAdornment={\n\t\t\t\t\t<SelectionEndAdornment\n\t\t\t\t\t\toptions={ units }\n\t\t\t\t\t\tonClick={ handleUnitChange }\n\t\t\t\t\t\tvalue={ state?.unit ?? defaultUnit }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\tstartAdornment={ startIcon ?? <InputAdornment position=\"start\">{ startIcon }</InputAdornment> }\n\t\t\t\ttype=\"number\"\n\t\t\t\tvalue={ Number.isNaN( state?.size ) ? '' : state?.size }\n\t\t\t\tonChange={ handleSizeChange }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { forwardRef, useId } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\nimport { bindMenu, bindTrigger, Button, InputAdornment, Menu, MenuItem, TextField, usePopupState } from '@elementor/ui';\n\nexport type TextFieldInnerSelectionProps = {\n\tplaceholder?: string;\n\ttype: string;\n\tvalue: PropValue;\n\tonChange: ( event: React.ChangeEvent< HTMLInputElement > ) => void;\n\tendAdornment: React.ReactNode;\n\tstartAdornment?: React.ReactNode;\n};\n\nexport const TextFieldInnerSelection = forwardRef(\n\t( { placeholder, type, value, onChange, endAdornment, startAdornment }: TextFieldInnerSelectionProps, ref ) => {\n\t\treturn (\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tfullWidth\n\t\t\t\ttype={ type }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\tInputProps={ {\n\t\t\t\t\tendAdornment,\n\t\t\t\t\tstartAdornment,\n\t\t\t\t} }\n\t\t\t\tref={ ref }\n\t\t\t/>\n\t\t);\n\t}\n);\n\nexport type SelectionEndAdornmentProps< T extends string > = {\n\toptions: T[];\n\tonClick: ( value: T ) => void;\n\tvalue: T;\n};\n\nexport const SelectionEndAdornment = < T extends string >( {\n\toptions,\n\tonClick,\n\tvalue,\n}: SelectionEndAdornmentProps< T > ) => {\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: useId(),\n\t} );\n\n\tconst handleMenuItemClick = ( index: number ) => {\n\t\tonClick( options[ index ] );\n\t\tpopupState.close();\n\t};\n\n\treturn (\n\t\t<InputAdornment position=\"end\">\n\t\t\t<Button\n\t\t\t\tsize=\"small\"\n\t\t\t\tcolor=\"inherit\"\n\t\t\t\tsx={ { font: 'inherit', minWidth: 'initial' } }\n\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t>\n\t\t\t\t{ value.toUpperCase() }\n\t\t\t</Button>\n\n\t\t\t<Menu MenuListProps={ { dense: true } } { ...bindMenu( popupState ) }>\n\t\t\t\t{ options.map( ( option, index ) => (\n\t\t\t\t\t<MenuItem key={ option } onClick={ () => handleMenuItemClick( index ) }>\n\t\t\t\t\t\t{ option.toUpperCase() }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Menu>\n\t\t</InputAdornment>\n\t);\n};\n","import { useEffect, useState } from 'react';\n\ntype UseInternalStateOptions< TValue > = {\n\texternal: TValue | null;\n\tsetExternal: ( value: TValue | null ) => void;\n\tpersistWhen: ( value: TValue | null ) => boolean;\n\tfallback: ( value: TValue | null ) => TValue;\n};\n\nexport const useSyncExternalState = < TValue, >( {\n\texternal,\n\tsetExternal,\n\tpersistWhen,\n\tfallback,\n}: UseInternalStateOptions< TValue > ) => {\n\tfunction toExternal( internalValue: TValue | null ) {\n\t\tif ( persistWhen( internalValue ) ) {\n\t\t\treturn internalValue;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction toInternal( externalValue: TValue | null, internalValue: TValue | null ) {\n\t\tif ( ! externalValue ) {\n\t\t\treturn fallback( internalValue );\n\t\t}\n\n\t\treturn externalValue;\n\t}\n\n\tconst [ internal, setInternal ] = useState< TValue >( toInternal( external, null ) );\n\n\tuseEffect( () => {\n\t\tsetInternal( ( prevInternal ) => toInternal( external, prevInternal ) );\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ external ] );\n\n\ttype SetterFunc = ( value: TValue ) => TValue;\n\n\tconst setInternalValue = ( setter: SetterFunc | TValue ) => {\n\t\tconst setterFn = ( typeof setter === 'function' ? setter : () => setter ) as SetterFunc;\n\t\tconst updated = setterFn( internal );\n\n\t\tsetInternal( updated );\n\t\tsetExternal( toExternal( updated ) );\n\t};\n\n\treturn [ internal, setInternalValue ] as const;\n};\n","import * as React from 'react';\nimport { type ColorPropValue, type PropValue, type SizePropValue, strokePropTypeUtil } from '@elementor/editor-props';\nimport { Grid, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\nimport { SizeControl, type Unit } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport type StrokeProps< T > = {\n\tbind: string;\n\tvalue: T;\n\tsetValue: ( v: T ) => void;\n\tlabel: string;\n\tchildren: React.ReactNode;\n};\nconst units: Unit[] = [ 'px', 'em', 'rem' ];\n\nexport const StrokeControl = createControl( () => {\n\tconst { value, setValue } = useBoundProp( strokePropTypeUtil );\n\n\tconst setStrokeWidth = ( newValue: SizePropValue ) => {\n\t\tconst updatedValue = {\n\t\t\t...value,\n\t\t\twidth: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst setStrokeColor = ( newValue: ColorPropValue ) => {\n\t\tconst updatedValue = {\n\t\t\t...value,\n\t\t\tcolor: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Control\n\t\t\t\tbind=\"width\"\n\t\t\t\tlabel={ __( 'Stroke Width', 'elementor' ) }\n\t\t\t\tvalue={ value?.width }\n\t\t\t\tsetValue={ setStrokeWidth }\n\t\t\t>\n\t\t\t\t<SizeControl units={ units } />\n\t\t\t</Control>\n\n\t\t\t<Control\n\t\t\t\tbind=\"color\"\n\t\t\t\tlabel={ __( 'Stroke Color', 'elementor' ) }\n\t\t\t\tvalue={ value?.color }\n\t\t\t\tsetValue={ setStrokeColor }\n\t\t\t>\n\t\t\t\t<ColorControl />\n\t\t\t</Control>\n\t\t</Stack>\n\t);\n} );\n\nconst Control = < T extends PropValue >( { bind, value, setValue, label, children }: StrokeProps< T > ) => (\n\t<BoundPropProvider bind={ bind } value={ value } setValue={ setValue as SetContextValue }>\n\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t{ children }\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n","import * as React from 'react';\nimport { colorPropTypeUtil } from '@elementor/editor-props';\nimport { UnstableColorField, type UnstableColorFieldProps } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const ColorControl = createControl(\n\t( props: Partial< Omit< UnstableColorFieldProps, 'value' | 'onChange' > > ) => {\n\t\tconst { value, setValue } = useBoundProp( colorPropTypeUtil );\n\n\t\tconst handleChange = ( selectedColor: string ) => {\n\t\t\tsetValue( selectedColor );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlActions>\n\t\t\t\t<UnstableColorField size=\"tiny\" { ...props } value={ value } onChange={ handleChange } fullWidth />\n\t\t\t</ControlActions>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport {\n\tboxShadowPropTypeUtil,\n\ttype BoxShadowPropValue,\n\ttype PropValue,\n\ttype ShadowPropValue,\n} from '@elementor/editor-props';\nimport { Grid, Stack, Typography, UnstableColorIndicator } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { Repeater } from '../components/repeater';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\nimport { SelectControl } from './select-control';\nimport { SizeControl } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport const BoxShadowRepeaterControl = createControl( () => {\n\tconst { value: boxShadowValues, setValue } = useBoundProp( boxShadowPropTypeUtil );\n\n\tconst setBoxShadow = ( newValue: BoxShadowPropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\tvalues={ boxShadowValues ?? [] }\n\t\t\tsetValues={ setBoxShadow }\n\t\t\tlabel={ __( 'Box shadow', 'elementor' ) }\n\t\t\titemSettings={ {\n\t\t\t\tIcon: ItemIcon,\n\t\t\t\tLabel: ItemLabel,\n\t\t\t\tContent: ItemContent,\n\t\t\t\tinitialValues: initialShadow,\n\t\t\t} }\n\t\t/>\n\t);\n} );\n\nconst ItemIcon = ( { value }: { value: ShadowPropValue } ) => (\n\t<UnstableColorIndicator size=\"inherit\" component=\"span\" value={ value.value.color.value } />\n);\n\nconst ItemContent = ( {\n\tvalue,\n\tsetValue,\n\tanchorEl,\n}: {\n\tvalue: ShadowPropValue;\n\tsetValue: ( newValue: ShadowPropValue ) => void;\n\tanchorEl: HTMLElement | null;\n} ) => {\n\tconst setShadow = ( newValue: ShadowPropValue[ 'value' ] ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'shadow',\n\t\t\tvalue: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"color\"\n\t\t\t\t\tvalue={ value.value.color }\n\t\t\t\t\tlabel={ __( 'Color', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'color' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, color: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<ColorControl\n\t\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\t\tcolorPicker: {\n\t\t\t\t\t\t\t\tanchorEl,\n\t\t\t\t\t\t\t\tanchorOrigin: {\n\t\t\t\t\t\t\t\t\tvertical: 'top',\n\t\t\t\t\t\t\t\t\thorizontal: 'right',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttransformOrigin: {\n\t\t\t\t\t\t\t\t\tvertical: 'top',\n\t\t\t\t\t\t\t\t\thorizontal: -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/>\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"position\"\n\t\t\t\t\tvalue={ value.value.position }\n\t\t\t\t\tlabel={ __( 'Position', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'position' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, position: v || null } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t{ label: __( 'Inset', 'elementor' ), value: 'inset' },\n\t\t\t\t\t\t\t{ label: __( 'Outset', 'elementor' ), value: '' },\n\t\t\t\t\t\t] }\n\t\t\t\t\t/>\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"hOffset\"\n\t\t\t\t\tlabel={ __( 'Horizontal', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.hOffset }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'hOffset' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, hOffset: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"vOffset\"\n\t\t\t\t\tlabel={ __( 'Vertical', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.vOffset }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'vOffset' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, vOffset: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"blur\"\n\t\t\t\t\tvalue={ value.value.blur }\n\t\t\t\t\tlabel={ __( 'Blur', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'blur' ] ) => setShadow( { ...value.value, blur: v } ) }\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"spread\"\n\t\t\t\t\tlabel={ __( 'Spread', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.spread }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'spread' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, spread: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n};\n\nconst Control = < T extends PropValue >( {\n\tvalue,\n\tsetValue,\n\tlabel,\n\tbind,\n\tchildren,\n}: {\n\tvalue: T;\n\tbind: string;\n\tlabel: string;\n\tchildren: React.ReactNode;\n\tsetValue: ( v: T ) => void;\n} ) => (\n\t<BoundPropProvider value={ value } setValue={ setValue as SetContextValue } bind={ bind }>\n\t\t<Grid item xs={ 6 }>\n\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n\nconst ItemLabel = ( { value }: { value: ShadowPropValue } ) => {\n\tconst { position, hOffset, vOffset, blur, spread } = value.value;\n\n\tconst { size: blurSize = '', unit: blurUnit = '' } = blur?.value || {};\n\tconst { size: spreadSize = '', unit: spreadUnit = '' } = spread?.value || {};\n\tconst { size: hOffsetSize = 'unset', unit: hOffsetUnit = '' } = hOffset?.value || {};\n\tconst { size: vOffsetSize = 'unset', unit: vOffsetUnit = '' } = vOffset?.value || {};\n\n\tconst sizes = [\n\t\thOffsetSize + hOffsetUnit,\n\t\tvOffsetSize + vOffsetUnit,\n\t\tblurSize + blurUnit,\n\t\tspreadSize + spreadUnit,\n\t].join( ' ' );\n\n\treturn (\n\t\t<span style={ { textTransform: 'capitalize' } }>\n\t\t\t{ position ?? 'outset' }: { sizes }\n\t\t</span>\n\t);\n};\n\nconst initialShadow: ShadowPropValue = {\n\t$$type: 'shadow',\n\tvalue: {\n\t\thOffset: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tvOffset: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tblur: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 10 },\n\t\t},\n\t\tspread: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tcolor: {\n\t\t\t$$type: 'color',\n\t\t\tvalue: 'rgba(0, 0, 0, 1)',\n\t\t},\n\t\tposition: null,\n\t},\n};\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { CopyIcon, EyeIcon, EyeOffIcon, PlusIcon, XIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tPopover,\n\tStack,\n\tTypography,\n\tUnstableTag,\n\ttype UnstableTagProps,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\ntype AnchorEl = HTMLElement | null;\n\ntype Item< T > = {\n\tdisabled?: boolean;\n} & T;\n\nexport type RepeaterProps< T > = {\n\tlabel: string;\n\tvalues?: T[];\n\tsetValues: ( newValue: T[] ) => void;\n\titemSettings: {\n\t\tinitialValues: T;\n\t\tLabel: React.ComponentType< { value: T } >;\n\t\tIcon: React.ComponentType< { value: T } >;\n\t\tContent: React.ComponentType< {\n\t\t\tvalue: T;\n\t\t\tsetValue: ( newValue: T ) => void;\n\t\t\tanchorEl: AnchorEl;\n\t\t} >;\n\t};\n};\n\nexport const Repeater = < T, >( {\n\tlabel,\n\titemSettings,\n\tvalues: repeaterValues = [],\n\tsetValues: setRepeaterValues,\n}: RepeaterProps< Item< T > > ) => {\n\tconst addRepeaterItem = () => {\n\t\tconst newItem = structuredClone( itemSettings.initialValues );\n\n\t\tsetRepeaterValues( [ ...repeaterValues, newItem ] );\n\t};\n\n\tconst duplicateRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues( [\n\t\t\t...repeaterValues.slice( 0, index ),\n\t\t\tstructuredClone( repeaterValues[ index ] ),\n\t\t\t...repeaterValues.slice( index ),\n\t\t] );\n\t};\n\n\tconst removeRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues( repeaterValues.filter( ( _, i ) => i !== index ) );\n\t};\n\n\tconst toggleDisableRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues(\n\t\t\trepeaterValues.map( ( value, i ) => {\n\t\t\t\tif ( i === index ) {\n\t\t\t\t\tconst { disabled, ...rest } = value;\n\n\t\t\t\t\t// If the items should not be disabled, remove the disabled property.\n\t\t\t\t\treturn { ...rest, ...( disabled ? {} : { disabled: true } ) } as Item< T >;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t} )\n\t\t);\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\" sx={ { pb: 1 } }>\n\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton size={ SIZE } onClick={ addRepeaterItem } aria-label={ __( 'Add item', 'elementor' ) }>\n\t\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Stack>\n\t\t\t<Stack gap={ 1 }>\n\t\t\t\t{ repeaterValues.map( ( value, index ) => (\n\t\t\t\t\t<RepeaterItem\n\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\tdisabled={ value.disabled }\n\t\t\t\t\t\tlabel={ <itemSettings.Label value={ value } /> }\n\t\t\t\t\t\tstartIcon={ <itemSettings.Icon value={ value } /> }\n\t\t\t\t\t\tremoveItem={ () => removeRepeaterItem( index ) }\n\t\t\t\t\t\tduplicateItem={ () => duplicateRepeaterItem( index ) }\n\t\t\t\t\t\ttoggleDisableItem={ () => toggleDisableRepeaterItem( index ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ( props ) => (\n\t\t\t\t\t\t\t<itemSettings.Content\n\t\t\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\tsetValue={ ( newValue ) =>\n\t\t\t\t\t\t\t\t\tsetRepeaterValues(\n\t\t\t\t\t\t\t\t\t\trepeaterValues.map( ( item, i ) => ( i === index ? newValue : item ) )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</RepeaterItem>\n\t\t\t\t) ) }\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n};\n\ntype RepeaterItemProps = {\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n\tstartIcon: UnstableTagProps[ 'startIcon' ];\n\tremoveItem: () => void;\n\tduplicateItem: () => void;\n\ttoggleDisableItem: () => void;\n\tchildren: ( { anchorEl }: { anchorEl: AnchorEl } ) => React.ReactNode;\n};\n\nconst RepeaterItem = ( {\n\tlabel,\n\tdisabled,\n\tstartIcon,\n\tchildren,\n\tremoveItem,\n\tduplicateItem,\n\ttoggleDisableItem,\n}: RepeaterItemProps ) => {\n\tconst popupId = useId();\n\tconst controlRef = useRef< HTMLElement >( null );\n\tconst [ anchorEl, setAnchorEl ] = useState< AnchorEl >( null );\n\n\tconst popoverState = usePopupState( { popupId, variant: 'popover' } );\n\n\tconst popoverProps = bindPopover( popoverState );\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tlabel={ label }\n\t\t\t\tshowActionsOnHover\n\t\t\t\tref={ controlRef }\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\taria-label={ __( 'Open item', 'elementor' ) }\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tstartIcon={ startIcon }\n\t\t\t\tactions={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ duplicateItem }\n\t\t\t\t\t\t\taria-label={ __( 'Duplicate item', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CopyIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ toggleDisableItem }\n\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\tdisabled ? __( 'Enable item', 'elementor' ) : __( 'Disable item', 'elementor' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ disabled ? <EyeOffIcon fontSize={ SIZE } /> : <EyeIcon fontSize={ SIZE } /> }\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ removeItem }\n\t\t\t\t\t\t\taria-label={ __( 'Remove item', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<XIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpaper: {\n\t\t\t\t\t\tref: setAnchorEl,\n\t\t\t\t\t\tsx: { mt: 0.5, p: 1, pt: 1, width: controlRef.current?.getBoundingClientRect().width },\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<Box p={ 0.5 }>{ children( { anchorEl } ) }</Box>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport {\n\tbackgroundImagePropTypeUtil,\n\ttype backgroundImageTypePropValue,\n\ttype ColorGradientPropValue,\n\ttype PropValue,\n} from '@elementor/editor-props';\nimport { Grid, Stack, Typography, UnstableColorIndicator } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { Repeater } from '../components/repeater';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport const BackgroundOverlayRepeaterControl = createControl( () => {\n\tconst { value: colorOverlayValues, setValue } = useBoundProp( backgroundImagePropTypeUtil );\n\n\tconst setColorOverlay = ( newValue: backgroundImageTypePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\tvalues={ colorOverlayValues }\n\t\t\tsetValues={ setColorOverlay }\n\t\t\tlabel={ __( 'Overlay', 'elementor' ) }\n\t\t\titemSettings={ {\n\t\t\t\tIcon: ItemIcon,\n\t\t\t\tLabel: ItemLabel,\n\t\t\t\tContent: ItemContent,\n\t\t\t\tinitialValues: initialGradient,\n\t\t\t} }\n\t\t/>\n\t);\n} );\n\nconst ItemIcon = ( { value }: { value: ColorGradientPropValue } ) => (\n\t<UnstableColorIndicator size=\"inherit\" component=\"span\" value={ value.value.color.value } />\n);\n\nconst ItemContent = ( {\n\tvalue,\n\tsetValue,\n}: {\n\tvalue: ColorGradientPropValue;\n\tsetValue: ( newValue: ColorGradientPropValue ) => void;\n} ) => {\n\tconst setColor = ( newValue: ColorGradientPropValue[ 'value' ] ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'background-overlay',\n\t\t\tvalue: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Control\n\t\t\t\tbind=\"color\"\n\t\t\t\tvalue={ value.value.color }\n\t\t\t\tlabel={ __( 'Color', 'elementor' ) }\n\t\t\t\tsetValue={ ( v: ColorGradientPropValue[ 'value' ][ 'color' ] ) =>\n\t\t\t\t\tsetColor( { ...value.value, color: v } )\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<ColorControl />\n\t\t\t</Control>\n\t\t</Stack>\n\t);\n};\n\nconst Control = < T extends PropValue >( {\n\tvalue,\n\tsetValue,\n\tlabel,\n\tbind,\n\tchildren,\n}: {\n\tvalue: T;\n\tbind: string;\n\tlabel: string;\n\tchildren: React.ReactNode;\n\tsetValue: ( v: T ) => void;\n} ) => (\n\t<BoundPropProvider value={ value } setValue={ setValue as SetContextValue } bind={ bind }>\n\t\t<Grid container spacing={ 1 } alignItems=\"center\">\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t{ children }\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n\nconst ItemLabel = ( { value }: { value: ColorGradientPropValue } ) => {\n\tconst color = value.value.color.value;\n\n\treturn <span>{ color }</span>;\n};\n\nconst initialGradient: ColorGradientPropValue = {\n\t$$type: 'background-overlay',\n\tvalue: {\n\t\tcolor: {\n\t\t\t$$type: 'color',\n\t\t\tvalue: 'rgba(0, 0, 0, 0.2)',\n\t\t},\n\t},\n};\n","import * as React from 'react';\nimport { type PropValue, stringPropTypeUtil, type StringPropValue } from '@elementor/editor-props';\nimport { type ToggleButtonProps } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { ControlToggleButtonGroup, type ToggleButtonGroupItem } from '../components/control-toggle-button-group';\nimport { createControl } from '../create-control';\n\ntype ToggleControlProps< T extends PropValue > = {\n\toptions: ToggleButtonGroupItem< T >[];\n\tfullWidth?: boolean;\n\tsize?: ToggleButtonProps[ 'size' ];\n};\n\nexport const ToggleControl = createControl(\n\t( { options, fullWidth = false, size = 'tiny' }: ToggleControlProps< StringPropValue[ 'value' ] > ) => {\n\t\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\t\tconst handleToggle = ( option: StringPropValue[ 'value' ] | null ) => {\n\t\t\tsetValue( option );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlToggleButtonGroup\n\t\t\t\titems={ options }\n\t\t\t\tvalue={ value ?? null }\n\t\t\t\tonChange={ handleToggle }\n\t\t\t\texclusive={ true }\n\t\t\t\tfullWidth={ fullWidth }\n\t\t\t\tsize={ size }\n\t\t\t/>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport {\n\ttype StackProps,\n\tstyled,\n\tToggleButton,\n\tToggleButtonGroup,\n\ttype ToggleButtonProps,\n\tTooltip,\n\tuseTheme,\n} from '@elementor/ui';\n\ntype RenderContentProps = { size: ToggleButtonProps[ 'size' ] };\n\nexport type ToggleButtonGroupItem< TValue > = {\n\tvalue: TValue;\n\tlabel: string;\n\trenderContent: ( { size }: RenderContentProps ) => React.ReactNode;\n\tshowTooltip?: boolean;\n};\n\nconst StyledToggleButtonGroup = styled( ToggleButtonGroup )`\n\t${ ( { justify } ) => `justify-content: ${ justify };` }\n`;\n\ntype ExclusiveValue< TValue > = TValue;\ntype NonExclusiveValue< TValue > = TValue[];\n\ntype Props< TValue > = {\n\tjustify?: StackProps[ 'justifyContent' ];\n\tsize?: ToggleButtonProps[ 'size' ];\n\titems: ToggleButtonGroupItem< TValue | null >[];\n\tfullWidth?: boolean;\n} & (\n\t| {\n\t\t\texclusive?: false;\n\t\t\tvalue: NonExclusiveValue< TValue >;\n\t\t\tonChange: ( value: NonExclusiveValue< TValue > ) => void;\n\t }\n\t| {\n\t\t\texclusive: true;\n\t\t\tvalue: ExclusiveValue< TValue >;\n\t\t\tonChange: ( value: ExclusiveValue< TValue > ) => void;\n\t }\n);\n\nexport const ControlToggleButtonGroup = < TValue, >( {\n\tjustify = 'end',\n\tsize = 'tiny',\n\tvalue,\n\tonChange,\n\titems,\n\texclusive = false,\n\tfullWidth = false,\n}: Props< TValue > ) => {\n\tconst isRtl = 'rtl' === useTheme().direction;\n\n\tconst handleChange = (\n\t\t_: React.MouseEvent< HTMLElement >,\n\t\tnewValue: typeof exclusive extends true ? ExclusiveValue< TValue > : NonExclusiveValue< TValue >\n\t) => {\n\t\tonChange( newValue as never );\n\t};\n\n\treturn (\n\t\t<StyledToggleButtonGroup\n\t\t\tjustify={ justify }\n\t\t\tvalue={ value }\n\t\t\tonChange={ handleChange }\n\t\t\texclusive={ exclusive }\n\t\t\tsx={ {\n\t\t\t\tdirection: isRtl ? 'rtl /* @noflip */' : 'ltr /* @noflip */',\n\t\t\t} }\n\t\t>\n\t\t\t{ items.map( ( { label, value: buttonValue, renderContent: Content, showTooltip } ) =>\n\t\t\t\tshowTooltip ? (\n\t\t\t\t\t<Tooltip key={ buttonValue } title={ label } disableFocusListener={ true } placement=\"top\">\n\t\t\t\t\t\t<ToggleButton value={ buttonValue } aria-label={ label } size={ size } fullWidth={ fullWidth }>\n\t\t\t\t\t\t\t<Content size={ size } />\n\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) : (\n\t\t\t\t\t<ToggleButton\n\t\t\t\t\t\tkey={ buttonValue }\n\t\t\t\t\t\tvalue={ buttonValue }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\tfullWidth={ fullWidth }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Content size={ size } />\n\t\t\t\t\t</ToggleButton>\n\t\t\t\t)\n\t\t\t) }\n\t\t</StyledToggleButtonGroup>\n\t);\n};\n","import * as React from 'react';\nimport { numberPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nconst isEmptyOrNaN = ( value?: string | number ) =>\n\tvalue === null || value === undefined || value === '' || Number.isNaN( Number( value ) );\n\nexport const NumberControl = createControl(\n\t( {\n\t\tplaceholder,\n\t\tmax = Number.MAX_VALUE,\n\t\tmin = -Number.MAX_VALUE,\n\t\tstep = 1,\n\t\tshouldForceInt = false,\n\t}: {\n\t\tplaceholder?: string;\n\t\tmax?: number;\n\t\tmin?: number;\n\t\tstep?: number;\n\t\tshouldForceInt?: boolean;\n\t} ) => {\n\t\tconst { value, setValue } = useBoundProp( numberPropTypeUtil );\n\n\t\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\t\tconst eventValue: string = event.target.value;\n\n\t\t\tif ( isEmptyOrNaN( eventValue ) ) {\n\t\t\t\tsetValue( null );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst formattedValue = shouldForceInt ? +parseInt( eventValue ) : Number( eventValue );\n\n\t\t\tsetValue( Math.min( Math.max( formattedValue, min ), max ) );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlActions>\n\t\t\t\t<TextField\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tfullWidth\n\t\t\t\t\tvalue={ isEmptyOrNaN( value ) ? '' : value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\tinputProps={ { step } }\n\t\t\t\t/>\n\t\t\t</ControlActions>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport { type ReactNode, useId, useRef } from 'react';\nimport {\n\ttype PropKey,\n\ttype PropTypeUtil,\n\ttype PropValue,\n\tsizePropTypeUtil,\n\ttype SizePropValue,\n} from '@elementor/editor-props';\nimport { bindPopover, bindToggle, Grid, Popover, Stack, ToggleButton, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { SizeControl } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\ntype MultiSizePropValue = Record< PropKey, SizePropValue >;\n\ntype Item = {\n\ticon: ReactNode;\n\tlabel: string;\n\tbind: PropKey;\n};\n\nexport type EqualUnequalItems = [ Item, Item, Item, Item ];\n\ntype Props< TMultiPropType extends string, TPropValue extends MultiSizePropValue > = {\n\tlabel: string;\n\ticon: ReactNode;\n\titems: EqualUnequalItems;\n\tmultiSizePropTypeUtil: PropTypeUtil< TMultiPropType, TPropValue >;\n};\n\nconst isEqualSizes = ( values: SizePropValue[], items: EqualUnequalItems ) => {\n\tif ( values.length !== items.length ) {\n\t\treturn false;\n\t}\n\n\tconst [ firstValue, ...restValues ] = values;\n\n\treturn restValues.every(\n\t\t( value ) => value.value?.size === firstValue.value?.size && value.value?.unit === firstValue.value?.unit\n\t);\n};\n\nexport function EqualUnequalSizesControl< TMultiPropType extends string, TPropValue extends MultiSizePropValue >( {\n\tlabel,\n\ticon,\n\titems,\n\tmultiSizePropTypeUtil,\n}: Props< TMultiPropType, TPropValue > ) {\n\tconst popupId = useId();\n\tconst controlRef = useRef< HTMLElement >( null );\n\tconst popupState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst { value: sizeValue, setValue: setSizeValue } = useBoundProp( sizePropTypeUtil );\n\tconst { value: multiSizeValue, setValue: setMultiSizeValue } = useBoundProp( multiSizePropTypeUtil );\n\n\tconst splitEqualValue = () => {\n\t\treturn items.reduce( ( acc, item ) => ( { ...acc, [ item.bind ]: sizePropTypeUtil.create( sizeValue ) } ), {} );\n\t};\n\n\tconst setNestedProp = ( item: Item, newValue: SizePropValue ) => {\n\t\tconst newMappedValues = {\n\t\t\t...( multiSizeValue ?? splitEqualValue() ),\n\t\t\t[ item.bind ]: newValue,\n\t\t};\n\n\t\tconst isEqual = isEqualSizes( Object.values( newMappedValues ), items );\n\n\t\tif ( isEqual ) {\n\t\t\treturn setSizeValue( newValue?.value );\n\t\t}\n\n\t\tsetMultiSizeValue( newMappedValues );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\" ref={ controlRef }>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<EqualSizeControl\n\t\t\t\t\t\titems={ items }\n\t\t\t\t\t\tvalue={ sizeValue }\n\t\t\t\t\t\tmultiSizeValue={ multiSizeValue }\n\t\t\t\t\t\tsetValue={ setSizeValue }\n\t\t\t\t\t\ticonButton={\n\t\t\t\t\t\t\t<ToggleButton\n\t\t\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\t{ ...bindToggle( popupState ) }\n\t\t\t\t\t\t\t\tselected={ popupState.isOpen }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ icon }\n\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpaper: { sx: { mt: 0.5, p: 2, pt: 1, width: controlRef.current?.getBoundingClientRect().width } },\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 0 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 1 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 3 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 2 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nconst MultiSizeValueControl = < TPropValue extends MultiSizePropValue >( {\n\titem,\n\tvalue,\n\tsetNestedProp,\n\tsplitEqualValue,\n}: {\n\titem: Item;\n\tvalue: TPropValue | undefined;\n\tsetNestedProp: ( item: Item, newValue: SizePropValue ) => void;\n\tsplitEqualValue: () => TPropValue;\n} ) => {\n\tconst handleChange = ( val: SizePropValue ) => setNestedProp( item, val );\n\n\tconst getMultiSizeValues = () => {\n\t\tif ( value ) {\n\t\t\treturn value?.[ item.bind ] ?? null;\n\t\t}\n\n\t\treturn splitEqualValue()?.[ item.bind ] ?? null;\n\t};\n\n\treturn (\n\t\t<BoundPropProvider bind={ '' } setValue={ handleChange as SetContextValue } value={ getMultiSizeValues() }>\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ item.label }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<SizeControl startIcon={ item.icon } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</BoundPropProvider>\n\t);\n};\n\nconst EqualSizeControl = ( {\n\tvalue,\n\titems,\n\tsetValue,\n\ticonButton,\n\tmultiSizeValue,\n}: {\n\tvalue: SizePropValue[ 'value' ] | null;\n\titems: EqualUnequalItems;\n\tsetValue: ( newValue: SizePropValue[ 'value' ] ) => void;\n\ticonButton: ReactNode;\n\tmultiSizeValue: PropValue;\n} ) => {\n\tconst handleChange = ( newValue: SizePropValue ) => {\n\t\tsetValue( newValue.value );\n\t};\n\n\tconst getDisplayValue = () => {\n\t\tif ( value ) {\n\t\t\treturn sizePropTypeUtil.create( value );\n\t\t}\n\n\t\tconst multiValues = Object.values( multiSizeValue ?? {} ) as SizePropValue[];\n\n\t\tif ( isEqualSizes( multiValues, items ) ) {\n\t\t\treturn sizePropTypeUtil.create( multiValues[ 0 ].value );\n\t\t}\n\t};\n\n\treturn (\n\t\t<BoundPropProvider bind={ '' } setValue={ handleChange as SetContextValue } value={ getDisplayValue() ?? null }>\n\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t<SizeControl placeholder={ __( 'MIXED', 'elementor' ) } />\n\t\t\t\t{ iconButton }\n\t\t\t</Stack>\n\t\t</BoundPropProvider>\n\t);\n};\n","import * as React from 'react';\nimport { linkedDimensionsPropTypeUtil, type PropValue } from '@elementor/editor-props';\nimport { DetachIcon, LinkIcon, SideBottomIcon, SideLeftIcon, SideRightIcon, SideTopIcon } from '@elementor/icons';\nimport { Grid, Stack, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { SizeControl } from './size-control';\n\nexport type Position = 'top' | 'right' | 'bottom' | 'left';\n\nexport const LinkedDimensionsControl = createControl( ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useBoundProp( linkedDimensionsPropTypeUtil );\n\tconst { top, right, bottom, left, isLinked = true } = value || {};\n\n\tconst setLinkedValue = ( position: Position, newValue: PropValue ) => {\n\t\tconst updatedValue = {\n\t\t\tisLinked,\n\t\t\ttop: isLinked ? newValue : top,\n\t\t\tright: isLinked ? newValue : right,\n\t\t\tbottom: isLinked ? newValue : bottom,\n\t\t\tleft: isLinked ? newValue : left,\n\t\t\t[ position ]: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst toggleLinked = () => {\n\t\tconst updatedValue = {\n\t\t\tisLinked: ! isLinked,\n\t\t\ttop,\n\t\t\tright: ! isLinked ? top : right,\n\t\t\tbottom: ! isLinked ? top : bottom,\n\t\t\tleft: ! isLinked ? top : left,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t<ToggleButton\n\t\t\t\t\taria-label={ __( 'Link Inputs', 'elementor' ) }\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\tselected={ isLinked }\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\tonChange={ toggleLinked }\n\t\t\t\t>\n\t\t\t\t\t<LinkedIcon fontSize={ 'tiny' } />\n\t\t\t\t</ToggleButton>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Top', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'top' }\n\t\t\t\t\t\t\tvalue={ top }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideTopIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Right', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'right' }\n\t\t\t\t\t\t\tvalue={ right }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideRightIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Bottom', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'bottom' }\n\t\t\t\t\t\t\tvalue={ bottom }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideBottomIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Left', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'left' }\n\t\t\t\t\t\t\tvalue={ left }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideLeftIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t</>\n\t);\n} );\n\nconst Control = ( {\n\tbind,\n\tstartIcon,\n\tvalue,\n\tsetValue,\n}: {\n\tbind: Position;\n\tvalue: PropValue;\n\tstartIcon: React.ReactNode;\n\tsetValue: ( bind: Position, newValue: PropValue ) => void;\n} ) => (\n\t<BoundPropProvider setValue={ ( newValue ) => setValue( bind, newValue ) } value={ value } bind={ bind }>\n\t\t<SizeControl startIcon={ startIcon } />\n\t</BoundPropProvider>\n);\n","import { Fragment, useId, useState } from 'react';\nimport * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { ChevronDownIcon, EditIcon, PhotoIcon, SearchIcon, XIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tDivider,\n\tIconButton,\n\tInputAdornment,\n\tLink,\n\tListSubheader,\n\tMenuItem,\n\tMenuList,\n\tPopover,\n\tStack,\n\tTextField,\n\tTypography,\n\tUnstableTag,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { createControl } from '../create-control';\nimport { useFilteredFontFamilies } from '../hooks/use-filtered-font-families';\n\nconst SIZE = 'tiny';\n\nexport const FontFamilyControl = createControl( ( { fontFamilies } ) => {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\tconst { value: fontFamily, setValue: setFontFamily } = useBoundProp( stringPropTypeUtil );\n\n\tconst popupId = useId();\n\tconst popoverState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst filteredFontFamilies = useFilteredFontFamilies( fontFamilies, searchValue );\n\n\tif ( ! filteredFontFamilies ) {\n\t\treturn null;\n\t}\n\n\tconst handleSearch = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetSearchValue( event.target.value );\n\t};\n\n\tconst handleClose = () => {\n\t\tsetSearchValue( '' );\n\n\t\tpopoverState.close();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\tlabel={ fontFamily }\n\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tfullWidth\n\t\t\t/>\n\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...bindPopover( popoverState ) }\n\t\t\t\tonClose={ handleClose }\n\t\t\t>\n\t\t\t\t<Stack>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" pl={ 1.5 } pr={ 0.5 } py={ 1.5 }>\n\t\t\t\t\t\t<EditIcon fontSize={ SIZE } sx={ { mr: 0.5 } } />\n\t\t\t\t\t\t<Typography variant=\"subtitle2\">{ __( 'Font Family', 'elementor' ) }</Typography>\n\t\t\t\t\t\t<IconButton size={ SIZE } sx={ { ml: 'auto' } } onClick={ handleClose }>\n\t\t\t\t\t\t\t<XIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Stack>\n\n\t\t\t\t\t<Box px={ 1.5 } pb={ 1 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\t\t\tonChange={ handleSearch }\n\t\t\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t\t\t<SearchIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t\t\t</InputAdornment>\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</Box>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Box sx={ { overflowY: 'auto', height: 260, width: 220 } }>\n\t\t\t\t\t\t{ filteredFontFamilies.length > 0 ? (\n\t\t\t\t\t\t\t<MenuList role=\"listbox\" tabIndex={ 0 }>\n\t\t\t\t\t\t\t\t{ filteredFontFamilies.map( ( [ category, items ], index ) => (\n\t\t\t\t\t\t\t\t\t<Fragment key={ index }>\n\t\t\t\t\t\t\t\t\t\t<ListSubheader sx={ { typography: 'caption', color: 'text.tertiary' } }>\n\t\t\t\t\t\t\t\t\t\t\t{ category }\n\t\t\t\t\t\t\t\t\t\t</ListSubheader>\n\t\t\t\t\t\t\t\t\t\t{ items.map( ( item ) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isSelected = item === fontFamily;\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ item }\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\t\t\t\t\t\t\t\t\tautoFocus={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetFontFamily( item );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleClose();\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ { typography: 'caption' } }\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={ { fontFamily: item } }\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ item }\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Stack alignItems=\"center\" p={ 2.5 } gap={ 1.5 }>\n\t\t\t\t\t\t\t\t<PhotoIcon fontSize=\"large\" />\n\t\t\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t&ldquo;{ searchValue }&rdquo;.\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\t\tcomponent=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={ () => setSearchValue( '' ) }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Clear the filters', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t\t\t\t{ __( 'and try again.', 'elementor' ) }\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Box>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</>\n\t);\n} );\n","import { __ } from '@wordpress/i18n';\n\nexport type SupportedFonts = 'system' | 'googlefonts' | 'customfonts';\n\nconst supportedCategories: Record< SupportedFonts, string > = {\n\tsystem: __( 'System', 'elementor' ),\n\tgooglefonts: __( 'Google Fonts', 'elementor' ),\n\tcustomfonts: __( 'Custom Fonts', 'elementor' ),\n};\n\nexport const useFilteredFontFamilies = ( fontFamilies: Record< string, SupportedFonts >, searchValue: string ) => {\n\tconst filteredFontFamilies = Object.entries( fontFamilies ).reduce< Map< string, string[] > >(\n\t\t( acc, [ font, category ] ) => {\n\t\t\tconst isMatch = font.toLowerCase().includes( searchValue.trim().toLowerCase() );\n\n\t\t\tif ( ! isMatch ) {\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tconst categoryLabel = supportedCategories[ category as SupportedFonts ];\n\n\t\t\tif ( categoryLabel ) {\n\t\t\t\tconst existingCategory = acc.get( categoryLabel );\n\n\t\t\t\tif ( existingCategory ) {\n\t\t\t\t\texistingCategory.push( font );\n\t\t\t\t} else {\n\t\t\t\t\tacc.set( categoryLabel, [ font ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t},\n\t\tnew Map()\n\t);\n\n\treturn [ ...filteredFontFamilies ];\n};\n","import * as React from 'react';\nimport { type UrlPropValue } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const UrlControl = createControl( ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useBoundProp< UrlPropValue >();\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) =>\n\t\tsetValue( {\n\t\t\t$$type: 'url',\n\t\t\tvalue: event.target.value,\n\t\t} );\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tfullWidth\n\t\t\t\tvalue={ value?.value }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { type LinkPropValue, type UrlPropValue } from '@elementor/editor-props';\nimport { MinusIcon, PlusIcon } from '@elementor/icons';\nimport { Collapse, Divider, Grid, IconButton, Stack, Switch } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { UrlControl } from './url-control';\n\nconst SIZE = 'tiny';\n\nconst DEFAULT_LINK_CONTROL_VALUE: LinkPropValue = {\n\t$$type: 'link',\n\tvalue: {\n\t\tenabled: false,\n\t\thref: {\n\t\t\t$$type: 'url',\n\t\t\tvalue: '',\n\t\t},\n\t\tisTargetBlank: false,\n\t},\n};\n\nexport const LinkControl = createControl( () => {\n\tconst { value = DEFAULT_LINK_CONTROL_VALUE, setValue } = useBoundProp< LinkPropValue >();\n\tconst { enabled, href, isTargetBlank } = value?.value || {};\n\n\tconst handleOnChange = < T extends keyof LinkPropValue[ 'value' ] >(\n\t\tkey: T,\n\t\tnewValue: LinkPropValue[ 'value' ][ T ]\n\t) => {\n\t\tsetValue( {\n\t\t\t$$type: 'link',\n\t\t\tvalue: {\n\t\t\t\t...( value?.value ?? DEFAULT_LINK_CONTROL_VALUE.value ),\n\t\t\t\t[ key ]: newValue,\n\t\t\t},\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Divider />\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\tsx={ {\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<ControlLabel>{ __( 'Link', 'elementor' ) }</ControlLabel>\n\t\t\t\t<IconButton size={ SIZE } onClick={ () => handleOnChange( 'enabled', ! enabled ) }>\n\t\t\t\t\t{ enabled ? <MinusIcon fontSize={ SIZE } /> : <PlusIcon fontSize={ SIZE } /> }\n\t\t\t\t</IconButton>\n\t\t\t</Stack>\n\t\t\t<Collapse in={ enabled } timeout=\"auto\" unmountOnExit>\n\t\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\tvalue={ href }\n\t\t\t\t\t\tsetValue={ ( newHref ) => handleOnChange( 'href', newHref as UrlPropValue ) }\n\t\t\t\t\t\tbind={ 'href' }\n\t\t\t\t\t>\n\t\t\t\t\t\t<UrlControl placeholder={ __( 'Paste URL or type', 'elementor' ) } />\n\t\t\t\t\t</BoundPropProvider>\n\n\t\t\t\t\t<SwitchControl\n\t\t\t\t\t\tvalue={ isTargetBlank }\n\t\t\t\t\t\tonSwitch={ () => handleOnChange( 'isTargetBlank', ! isTargetBlank ) }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</Stack>\n\t);\n} );\n\n// @TODO Should be refactored in ED-16323\nconst SwitchControl = ( { value, onSwitch }: { value: boolean; onSwitch: () => void } ) => {\n\treturn (\n\t\t<Grid container alignItems=\"center\" flexWrap=\"nowrap\" justifyContent=\"space-between\">\n\t\t\t<Grid item>\n\t\t\t\t<ControlLabel>{ __( 'Open in new tab', 'elementor' ) }</ControlLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item>\n\t\t\t\t<Switch checked={ value } onChange={ onSwitch } />\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import * as React from 'react';\nimport { gapPropTypeUtil, type PropValue } from '@elementor/editor-props';\nimport { DetachIcon, LinkIcon } from '@elementor/icons';\nimport { Grid, Stack, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { SizeControl } from './size-control';\n\nexport type Gap = 'row' | 'column';\n\nexport const GapControl = createControl( ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useBoundProp( gapPropTypeUtil );\n\tconst { column, row, isLinked = true } = value || {};\n\n\tconst setLinkedValue = ( gap: Gap, newValue: PropValue ) => {\n\t\tconst updatedValue = {\n\t\t\tisLinked,\n\t\t\tcolumn: isLinked ? newValue : column,\n\t\t\trow: isLinked ? newValue : row,\n\t\t\t[ gap ]: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst toggleLinked = () => {\n\t\tconst updatedValue = {\n\t\t\tisLinked: ! isLinked,\n\t\t\tcolumn,\n\t\t\trow: ! isLinked ? column : row,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t<ToggleButton\n\t\t\t\t\taria-label={ __( 'Link Inputs', 'elementor' ) }\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\tselected={ isLinked }\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\tonChange={ toggleLinked }\n\t\t\t\t>\n\t\t\t\t\t<LinkedIcon fontSize={ 'tiny' } />\n\t\t\t\t</ToggleButton>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Column', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\t\tsetValue={ ( newValue ) => setLinkedValue( 'column', newValue ) }\n\t\t\t\t\t\t\tvalue={ column }\n\t\t\t\t\t\t\tbind=\"column\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SizeControl />\n\t\t\t\t\t\t</BoundPropProvider>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Row', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\t\tsetValue={ ( newValue ) => setLinkedValue( 'row', newValue ) }\n\t\t\t\t\t\t\tvalue={ row }\n\t\t\t\t\t\t\tbind=\"row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SizeControl />\n\t\t\t\t\t\t</BoundPropProvider>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t</>\n\t);\n} );\n"],"mappings":"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","names":["React","import_editor_props","import_ui","import_i18n","value","React","React","import_ui","React","import_react","React","import_ui","React","import_ui","React","import_react","MenuItem","React","import_editor_props","import_ui","React","import_editor_props","import_ui","React","import_editor_props","import_ui","React","import_editor_props","import_ui","React","import_react","import_ui","import_react","units","React","import_editor_props","import_ui","import_i18n","React","import_editor_props","import_ui","React","import_editor_props","import_ui","import_i18n","React","import_react","import_icons","import_ui","import_i18n","Control","React","import_editor_props","import_ui","import_i18n","ItemIcon","ItemLabel","ItemContent","Control","React","import_editor_props","React","import_ui","React","import_editor_props","import_ui","React","import_react","import_editor_props","import_ui","import_i18n","React","import_editor_props","import_icons","import_ui","import_i18n","Control","import_react","React","import_editor_props","import_icons","import_ui","import_i18n","import_i18n","SIZE","React","import_ui","React","import_icons","import_ui","import_i18n","SIZE","React","import_editor_props","import_icons","import_ui","import_i18n"]}
package/dist/index.mjs CHANGED
@@ -176,9 +176,10 @@ var ImageMediaControl = createControl(() => {
176
176
  import * as React8 from "react";
177
177
  import { stringPropTypeUtil } from "@elementor/editor-props";
178
178
  import { MenuItem, Select } from "@elementor/ui";
179
- var SelectControl = createControl(({ options }) => {
179
+ var SelectControl = createControl(({ options, onChange }) => {
180
180
  const { value, setValue } = useBoundProp(stringPropTypeUtil);
181
181
  const handleChange = (event) => {
182
+ onChange?.(event.target.value, value);
182
183
  setValue(event.target.value);
183
184
  };
184
185
  return /* @__PURE__ */ React8.createElement(ControlActions, null, /* @__PURE__ */ React8.createElement(Select, { displayEmpty: true, size: "tiny", value: value ?? "", onChange: handleChange, fullWidth: true }, options.map(({ label, ...props }) => /* @__PURE__ */ React8.createElement(MenuItem, { key: props.value, ...props }, label))));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/controls/image-control.tsx","../src/bound-prop-context.tsx","../src/components/control-label.tsx","../src/create-control.tsx","../src/create-control-replacement.tsx","../src/controls/image-media-control.tsx","../src/control-actions/control-actions.tsx","../src/control-actions/control-actions-context.tsx","../src/controls/select-control.tsx","../src/controls/text-control.tsx","../src/controls/text-area-control.tsx","../src/controls/size-control.tsx","../src/components/text-field-inner-selection.tsx","../src/hooks/use-sync-external-state.tsx","../src/controls/stroke-control.tsx","../src/controls/color-control.tsx","../src/controls/box-shadow-repeater-control.tsx","../src/components/repeater.tsx","../src/controls/background-overlay-repeater-control.tsx","../src/controls/toggle-control.tsx","../src/components/control-toggle-button-group.tsx","../src/controls/number-control.tsx","../src/controls/equal-unequal-sizes-control.tsx","../src/controls/linked-dimensions-control.tsx","../src/controls/font-family-control.tsx","../src/hooks/use-filtered-font-families.ts","../src/controls/url-control.tsx","../src/controls/link-control.tsx","../src/controls/gap-control.tsx"],"sourcesContent":["import * as React from 'react';\nimport { imagePropTypeUtil, type ImageSrcPropValue, type PropValue, type SizePropValue } from '@elementor/editor-props';\nimport { Grid, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { ImageMediaControl } from './image-media-control';\nimport { SelectControl } from './select-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport type ImageControlProps = {\n\tsizes: { label: string; value: string }[];\n};\n\nexport const ImageControl = createControl( ( props: ImageControlProps ) => {\n\tconst { value, setValue } = useBoundProp( imagePropTypeUtil );\n\tconst { src, size } = value || {};\n\n\tconst setImageSrc = ( newValue: ImageSrcPropValue ) => {\n\t\tsetValue( {\n\t\t\tsrc: newValue,\n\t\t\tsize: size as SizePropValue,\n\t\t} );\n\t};\n\n\tconst setImageSize = ( newValue: SizePropValue ) => {\n\t\tsetValue( {\n\t\t\tsrc: src as ImageSrcPropValue,\n\t\t\tsize: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<BoundPropProvider value={ src } setValue={ setImageSrc as SetContextValue } bind={ 'src' }>\n\t\t\t\t<ImageMediaControl />\n\t\t\t</BoundPropProvider>\n\t\t\t<BoundPropProvider value={ size } setValue={ setImageSize as SetContextValue } bind={ 'size' }>\n\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<ControlLabel> { __( 'Image Resolution', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<SelectControl options={ props.sizes } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</BoundPropProvider>\n\t\t</Stack>\n\t);\n} );\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { type CreateOptions, type PropKey, type PropTypeUtil, type PropValue } from '@elementor/editor-props';\n\n// Context\nexport type BoundPropContext< T extends PropValue > = {\n\tbind: PropKey;\n\tsetValue: ( value: T | null ) => void;\n\tvalue: T;\n};\n\nconst BoundPropContext = createContext< BoundPropContext< PropValue > | null >( null );\n\n// Provider\nexport type BoundPropProviderProps< T extends PropValue > = BoundPropContext< T > & {\n\tchildren: React.ReactNode;\n\tsetValue: ( value: T | null ) => void;\n};\n\nexport const BoundPropProvider = ( { children, value, setValue, bind }: BoundPropProviderProps< PropValue > ) => {\n\treturn <BoundPropContext.Provider value={ { value, setValue, bind } }>{ children }</BoundPropContext.Provider>;\n};\n\n// Hook\ntype SetValue< T > = ( value: T | null, options?: CreateOptions ) => void;\n\ntype UseBoundProp< TValue > = {\n\tbind: PropKey;\n\tsetValue: SetValue< TValue >;\n\tvalue: TValue;\n};\n\nexport function useBoundProp< TValue extends PropValue >(): BoundPropContext< TValue >;\n\nexport function useBoundProp< TKey extends string, TValue extends PropValue >(\n\tpropTypeUtil: PropTypeUtil< TKey, TValue >\n): UseBoundProp< TValue >;\n\nexport function useBoundProp< TKey extends string, TValue extends PropValue >(\n\tpropTypeUtil?: PropTypeUtil< TKey, TValue >\n) {\n\tconst boundPropContext = useContext< BoundPropContext< TValue > >( BoundPropContext as never );\n\n\tif ( ! boundPropContext ) {\n\t\tthrow new Error( 'useBoundProp must be used within a BoundPropProvider' );\n\t}\n\n\tif ( ! propTypeUtil ) {\n\t\treturn boundPropContext;\n\t}\n\n\tfunction setValue( value: TValue | null, options?: CreateOptions ) {\n\t\tif ( value === null ) {\n\t\t\treturn boundPropContext.setValue( null );\n\t\t}\n\n\t\treturn boundPropContext.setValue( propTypeUtil?.create( value, options ) as TValue );\n\t}\n\n\tconst value = propTypeUtil.extract( boundPropContext.value );\n\n\treturn {\n\t\t...boundPropContext,\n\t\tsetValue,\n\t\tvalue,\n\t};\n}\n","import * as React from 'react';\nimport { Typography } from '@elementor/ui';\n\nexport const ControlLabel = ( { children }: { children: React.ReactNode } ) => {\n\treturn (\n\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t{ children }\n\t\t</Typography>\n\t);\n};\n","import * as React from 'react';\nimport { type ComponentProps, type ComponentType } from 'react';\nimport { ErrorBoundary } from '@elementor/ui';\n\nimport { useControlReplacement } from './create-control-replacement';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyComponentType = ComponentType< any >;\n\ntype Options = {\n\tsupportsReplacements?: boolean;\n};\n\nconst brandSymbol = Symbol( 'control' );\n\nexport type ControlComponent< TComponent extends AnyComponentType = AnyComponentType > = TComponent & {\n\t[ brandSymbol ]: true;\n};\n\nexport function createControl< T extends AnyComponentType >(\n\tComponent: T,\n\t{ supportsReplacements = true }: Options = {}\n) {\n\treturn ( ( props: ComponentProps< T > ) => {\n\t\tconst ControlReplacement = useControlReplacement();\n\n\t\tif ( ControlReplacement && supportsReplacements ) {\n\t\t\treturn (\n\t\t\t\t<ErrorBoundary fallback={ null }>\n\t\t\t\t\t<ControlReplacement { ...props } />\n\t\t\t\t</ErrorBoundary>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<ErrorBoundary fallback={ null }>\n\t\t\t\t<Component { ...props } />\n\t\t\t</ErrorBoundary>\n\t\t);\n\t} ) as ControlComponent< T >;\n}\n","import * as React from 'react';\nimport { type ComponentType, createContext, useContext } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport { useBoundProp } from './bound-prop-context';\n\nexport type ReplaceWhenParams = {\n\tvalue: PropValue;\n};\n\nexport type CreateControlReplacement = {\n\tcomponent: ComponentType;\n\tcondition: ( { value }: ReplaceWhenParams ) => boolean;\n};\n\nconst ControlReplacementContext = createContext< CreateControlReplacement | undefined >( undefined );\n\nexport const ControlReplacementProvider = ( {\n\tcomponent,\n\tcondition,\n\tchildren,\n}: React.PropsWithChildren< CreateControlReplacement > ) => {\n\treturn (\n\t\t<ControlReplacementContext.Provider value={ { component, condition } }>\n\t\t\t{ children }\n\t\t</ControlReplacementContext.Provider>\n\t);\n};\nexport const useControlReplacement = () => {\n\tconst { value } = useBoundProp();\n\tconst controlReplacement = useContext( ControlReplacementContext );\n\n\tlet shouldReplace = false;\n\n\ttry {\n\t\tshouldReplace = !! controlReplacement?.condition( { value } ) && !! controlReplacement.component;\n\t} catch {}\n\n\treturn shouldReplace ? controlReplacement?.component : undefined;\n};\n\nexport const createControlReplacement = () => {\n\tlet controlReplacement: CreateControlReplacement;\n\n\tfunction replaceControl( { component, condition }: CreateControlReplacement ) {\n\t\tcontrolReplacement = { component, condition };\n\t}\n\n\tfunction getControlReplacement() {\n\t\treturn controlReplacement;\n\t}\n\n\treturn { replaceControl, getControlReplacement };\n};\n","import * as React from 'react';\nimport { imageSrcPropTypeUtil } from '@elementor/editor-props';\nimport { UploadIcon } from '@elementor/icons';\nimport { Button, Card, CardMedia, CardOverlay, CircularProgress, Stack } from '@elementor/ui';\nimport { useWpMediaAttachment, useWpMediaFrame } from '@elementor/wp-media';\nimport { __ } from '@wordpress/i18n';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const ImageMediaControl = createControl( () => {\n\tconst { value, setValue } = useBoundProp( imageSrcPropTypeUtil );\n\tconst { id, url } = value ?? {};\n\n\tconst { data: attachment, isFetching } = useWpMediaAttachment( id?.value || null );\n\tconst src = attachment?.url ?? url;\n\n\tconst { open } = useWpMediaFrame( {\n\t\ttypes: [ 'image' ],\n\t\tmultiple: false,\n\t\tselected: id?.value || null,\n\t\tonSelect: ( selectedAttachment ) => {\n\t\t\tsetValue( {\n\t\t\t\tid: {\n\t\t\t\t\t$$type: 'image-attachment-id',\n\t\t\t\t\tvalue: selectedAttachment.id,\n\t\t\t\t},\n\t\t\t\turl: null,\n\t\t\t} );\n\t\t},\n\t} );\n\n\treturn (\n\t\t<Card variant=\"outlined\">\n\t\t\t<CardMedia image={ src } sx={ { height: 150 } }>\n\t\t\t\t{ isFetching ? (\n\t\t\t\t\t<Stack justifyContent=\"center\" alignItems=\"center\" width=\"100%\" height=\"100%\">\n\t\t\t\t\t\t<CircularProgress />\n\t\t\t\t\t</Stack>\n\t\t\t\t) : null }\n\t\t\t</CardMedia>\n\t\t\t<CardOverlay>\n\t\t\t\t<ControlActions>\n\t\t\t\t\t<Stack gap={ 1 }>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\tonClick={ () => open( { mode: 'browse' } ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Select Image', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\t\tstartIcon={ <UploadIcon /> }\n\t\t\t\t\t\t\tonClick={ () => open( { mode: 'upload' } ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Upload Image', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</ControlActions>\n\t\t\t</CardOverlay>\n\t\t</Card>\n\t);\n} );\n","import * as React from 'react';\nimport { type PropsWithChildren, type ReactElement } from 'react';\nimport { styled, UnstableFloatingActionBar } from '@elementor/ui';\n\nimport { useControlActions } from './control-actions-context';\n\n// CSS hack to hide empty floating bars.\nconst FloatingBarContainer = styled( 'span' )`\n\tdisplay: contents;\n\n\t.MuiFloatingActionBar-popper:has( .MuiFloatingActionBar-actions:empty ) {\n\t\tdisplay: none;\n\t}\n`;\n\nexport type ControlActionsProps = PropsWithChildren< object >;\n\nexport default function ControlActions( { children }: ControlActionsProps ) {\n\tconst { items } = useControlActions();\n\n\tif ( items.length === 0 ) {\n\t\treturn children;\n\t}\n\n\tconst menuItems = items.map( ( { MenuItem, id } ) => <MenuItem key={ id } /> );\n\n\treturn (\n\t\t<FloatingBarContainer>\n\t\t\t<UnstableFloatingActionBar actions={ menuItems }>{ children as ReactElement }</UnstableFloatingActionBar>\n\t\t</FloatingBarContainer>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\ntype ControlActionsContext = {\n\titems: Array< {\n\t\tid: string;\n\t\tMenuItem: React.ComponentType;\n\t} >;\n};\n\nconst Context = createContext< ControlActionsContext | null >( null );\n\nexport type ControlActionsProviderProps = PropsWithChildren< ControlActionsContext >;\n\nexport const ControlActionsProvider = ( { children, items }: ControlActionsProviderProps ) => (\n\t<Context.Provider value={ { items } }>{ children }</Context.Provider>\n);\n\nexport const useControlActions = () => {\n\tconst context = useContext( Context );\n\n\tif ( ! context ) {\n\t\tthrow new Error( 'useControlActions must be used within a ControlActionsProvider' );\n\t}\n\n\treturn context;\n};\n","import * as React from 'react';\nimport { stringPropTypeUtil, type StringPropValue } from '@elementor/editor-props';\nimport { MenuItem, Select, type SelectChangeEvent } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\ntype Props = {\n\toptions: Array< { label: string; value: StringPropValue[ 'value' ]; disabled?: boolean } >;\n};\n\nexport const SelectControl = createControl( ( { options }: Props ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: SelectChangeEvent< StringPropValue[ 'value' ] > ) => {\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<Select displayEmpty size=\"tiny\" value={ value ?? '' } onChange={ handleChange } fullWidth>\n\t\t\t\t{ options.map( ( { label, ...props } ) => (\n\t\t\t\t\t<MenuItem key={ props.value } { ...props }>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Select>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const TextControl = createControl( ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => setValue( event.target.value );\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField size=\"tiny\" fullWidth value={ value } onChange={ handleChange } placeholder={ placeholder } />\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\ntype Props = {\n\tplaceholder?: string;\n};\n\nexport const TextAreaControl = createControl( ( { placeholder }: Props ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tmultiline\n\t\t\t\tfullWidth\n\t\t\t\trows={ 5 }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { sizePropTypeUtil } from '@elementor/editor-props';\nimport { InputAdornment } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { SelectionEndAdornment, TextFieldInnerSelection } from '../components/text-field-inner-selection';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\nimport { useSyncExternalState } from '../hooks/use-sync-external-state';\n\nexport type Unit = 'px' | '%' | 'em' | 'rem' | 'vw' | 'vh';\n\nconst defaultUnits: Unit[] = [ 'px', '%', 'em', 'rem', 'vw', 'vh' ];\n\nconst defaultUnit = 'px';\nconst defaultSize = NaN;\n\nexport type SizeControlProps = {\n\tplaceholder?: string;\n\tstartIcon?: React.ReactNode;\n\tunits?: Unit[];\n};\n\nexport const SizeControl = createControl( ( { units = defaultUnits, placeholder, startIcon }: SizeControlProps ) => {\n\tconst { value, setValue } = useBoundProp( sizePropTypeUtil );\n\n\tconst [ state, setState ] = useSyncExternalState( {\n\t\texternal: value,\n\t\tsetExternal: setValue,\n\t\tpersistWhen: ( controlValue ) => !! controlValue?.size || controlValue?.size === 0,\n\t\tfallback: ( controlValue ) => ( { unit: controlValue?.unit || defaultUnit, size: defaultSize } ),\n\t} );\n\n\tconst handleUnitChange = ( unit: Unit ) => {\n\t\tsetState( ( prev ) => ( {\n\t\t\tsize: prev?.size ?? defaultSize,\n\t\t\tunit,\n\t\t} ) );\n\t};\n\n\tconst handleSizeChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tconst { value: size } = event.target;\n\n\t\tsetState( ( prev ) => ( {\n\t\t\t...prev,\n\t\t\tsize: size || size === '0' ? parseFloat( size ) : defaultSize,\n\t\t} ) );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextFieldInnerSelection\n\t\t\t\tendAdornment={\n\t\t\t\t\t<SelectionEndAdornment\n\t\t\t\t\t\toptions={ units }\n\t\t\t\t\t\tonClick={ handleUnitChange }\n\t\t\t\t\t\tvalue={ state?.unit ?? defaultUnit }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\tstartAdornment={ startIcon ?? <InputAdornment position=\"start\">{ startIcon }</InputAdornment> }\n\t\t\t\ttype=\"number\"\n\t\t\t\tvalue={ Number.isNaN( state?.size ) ? '' : state?.size }\n\t\t\t\tonChange={ handleSizeChange }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { forwardRef, useId } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\nimport { bindMenu, bindTrigger, Button, InputAdornment, Menu, MenuItem, TextField, usePopupState } from '@elementor/ui';\n\nexport type TextFieldInnerSelectionProps = {\n\tplaceholder?: string;\n\ttype: string;\n\tvalue: PropValue;\n\tonChange: ( event: React.ChangeEvent< HTMLInputElement > ) => void;\n\tendAdornment: React.ReactNode;\n\tstartAdornment?: React.ReactNode;\n};\n\nexport const TextFieldInnerSelection = forwardRef(\n\t( { placeholder, type, value, onChange, endAdornment, startAdornment }: TextFieldInnerSelectionProps, ref ) => {\n\t\treturn (\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tfullWidth\n\t\t\t\ttype={ type }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\tInputProps={ {\n\t\t\t\t\tendAdornment,\n\t\t\t\t\tstartAdornment,\n\t\t\t\t} }\n\t\t\t\tref={ ref }\n\t\t\t/>\n\t\t);\n\t}\n);\n\nexport type SelectionEndAdornmentProps< T extends string > = {\n\toptions: T[];\n\tonClick: ( value: T ) => void;\n\tvalue: T;\n};\n\nexport const SelectionEndAdornment = < T extends string >( {\n\toptions,\n\tonClick,\n\tvalue,\n}: SelectionEndAdornmentProps< T > ) => {\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: useId(),\n\t} );\n\n\tconst handleMenuItemClick = ( index: number ) => {\n\t\tonClick( options[ index ] );\n\t\tpopupState.close();\n\t};\n\n\treturn (\n\t\t<InputAdornment position=\"end\">\n\t\t\t<Button\n\t\t\t\tsize=\"small\"\n\t\t\t\tcolor=\"inherit\"\n\t\t\t\tsx={ { font: 'inherit', minWidth: 'initial' } }\n\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t>\n\t\t\t\t{ value.toUpperCase() }\n\t\t\t</Button>\n\n\t\t\t<Menu MenuListProps={ { dense: true } } { ...bindMenu( popupState ) }>\n\t\t\t\t{ options.map( ( option, index ) => (\n\t\t\t\t\t<MenuItem key={ option } onClick={ () => handleMenuItemClick( index ) }>\n\t\t\t\t\t\t{ option.toUpperCase() }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Menu>\n\t\t</InputAdornment>\n\t);\n};\n","import { useEffect, useState } from 'react';\n\ntype UseInternalStateOptions< TValue > = {\n\texternal: TValue | null;\n\tsetExternal: ( value: TValue | null ) => void;\n\tpersistWhen: ( value: TValue | null ) => boolean;\n\tfallback: ( value: TValue | null ) => TValue;\n};\n\nexport const useSyncExternalState = < TValue, >( {\n\texternal,\n\tsetExternal,\n\tpersistWhen,\n\tfallback,\n}: UseInternalStateOptions< TValue > ) => {\n\tfunction toExternal( internalValue: TValue | null ) {\n\t\tif ( persistWhen( internalValue ) ) {\n\t\t\treturn internalValue;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction toInternal( externalValue: TValue | null, internalValue: TValue | null ) {\n\t\tif ( ! externalValue ) {\n\t\t\treturn fallback( internalValue );\n\t\t}\n\n\t\treturn externalValue;\n\t}\n\n\tconst [ internal, setInternal ] = useState< TValue >( toInternal( external, null ) );\n\n\tuseEffect( () => {\n\t\tsetInternal( ( prevInternal ) => toInternal( external, prevInternal ) );\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ external ] );\n\n\ttype SetterFunc = ( value: TValue ) => TValue;\n\n\tconst setInternalValue = ( setter: SetterFunc | TValue ) => {\n\t\tconst setterFn = ( typeof setter === 'function' ? setter : () => setter ) as SetterFunc;\n\t\tconst updated = setterFn( internal );\n\n\t\tsetInternal( updated );\n\t\tsetExternal( toExternal( updated ) );\n\t};\n\n\treturn [ internal, setInternalValue ] as const;\n};\n","import * as React from 'react';\nimport { type ColorPropValue, type PropValue, type SizePropValue, strokePropTypeUtil } from '@elementor/editor-props';\nimport { Grid, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\nimport { SizeControl, type Unit } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport type StrokeProps< T > = {\n\tbind: string;\n\tvalue: T;\n\tsetValue: ( v: T ) => void;\n\tlabel: string;\n\tchildren: React.ReactNode;\n};\nconst units: Unit[] = [ 'px', 'em', 'rem' ];\n\nexport const StrokeControl = createControl( () => {\n\tconst { value, setValue } = useBoundProp( strokePropTypeUtil );\n\n\tconst setStrokeWidth = ( newValue: SizePropValue ) => {\n\t\tconst updatedValue = {\n\t\t\t...value,\n\t\t\twidth: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst setStrokeColor = ( newValue: ColorPropValue ) => {\n\t\tconst updatedValue = {\n\t\t\t...value,\n\t\t\tcolor: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Control\n\t\t\t\tbind=\"width\"\n\t\t\t\tlabel={ __( 'Stroke Width', 'elementor' ) }\n\t\t\t\tvalue={ value?.width }\n\t\t\t\tsetValue={ setStrokeWidth }\n\t\t\t>\n\t\t\t\t<SizeControl units={ units } />\n\t\t\t</Control>\n\n\t\t\t<Control\n\t\t\t\tbind=\"color\"\n\t\t\t\tlabel={ __( 'Stroke Color', 'elementor' ) }\n\t\t\t\tvalue={ value?.color }\n\t\t\t\tsetValue={ setStrokeColor }\n\t\t\t>\n\t\t\t\t<ColorControl />\n\t\t\t</Control>\n\t\t</Stack>\n\t);\n} );\n\nconst Control = < T extends PropValue >( { bind, value, setValue, label, children }: StrokeProps< T > ) => (\n\t<BoundPropProvider bind={ bind } value={ value } setValue={ setValue as SetContextValue }>\n\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t{ children }\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n","import * as React from 'react';\nimport { colorPropTypeUtil } from '@elementor/editor-props';\nimport { UnstableColorField, type UnstableColorFieldProps } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const ColorControl = createControl(\n\t( props: Partial< Omit< UnstableColorFieldProps, 'value' | 'onChange' > > ) => {\n\t\tconst { value, setValue } = useBoundProp( colorPropTypeUtil );\n\n\t\tconst handleChange = ( selectedColor: string ) => {\n\t\t\tsetValue( selectedColor );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlActions>\n\t\t\t\t<UnstableColorField size=\"tiny\" { ...props } value={ value } onChange={ handleChange } fullWidth />\n\t\t\t</ControlActions>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport {\n\tboxShadowPropTypeUtil,\n\ttype BoxShadowPropValue,\n\ttype PropValue,\n\ttype ShadowPropValue,\n} from '@elementor/editor-props';\nimport { Grid, Stack, Typography, UnstableColorIndicator } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { Repeater } from '../components/repeater';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\nimport { SelectControl } from './select-control';\nimport { SizeControl } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport const BoxShadowRepeaterControl = createControl( () => {\n\tconst { value: boxShadowValues, setValue } = useBoundProp( boxShadowPropTypeUtil );\n\n\tconst setBoxShadow = ( newValue: BoxShadowPropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\tvalues={ boxShadowValues ?? [] }\n\t\t\tsetValues={ setBoxShadow }\n\t\t\tlabel={ __( 'Box shadow', 'elementor' ) }\n\t\t\titemSettings={ {\n\t\t\t\tIcon: ItemIcon,\n\t\t\t\tLabel: ItemLabel,\n\t\t\t\tContent: ItemContent,\n\t\t\t\tinitialValues: initialShadow,\n\t\t\t} }\n\t\t/>\n\t);\n} );\n\nconst ItemIcon = ( { value }: { value: ShadowPropValue } ) => (\n\t<UnstableColorIndicator size=\"inherit\" component=\"span\" value={ value.value.color.value } />\n);\n\nconst ItemContent = ( {\n\tvalue,\n\tsetValue,\n\tanchorEl,\n}: {\n\tvalue: ShadowPropValue;\n\tsetValue: ( newValue: ShadowPropValue ) => void;\n\tanchorEl: HTMLElement | null;\n} ) => {\n\tconst setShadow = ( newValue: ShadowPropValue[ 'value' ] ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'shadow',\n\t\t\tvalue: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"color\"\n\t\t\t\t\tvalue={ value.value.color }\n\t\t\t\t\tlabel={ __( 'Color', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'color' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, color: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<ColorControl\n\t\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\t\tcolorPicker: {\n\t\t\t\t\t\t\t\tanchorEl,\n\t\t\t\t\t\t\t\tanchorOrigin: {\n\t\t\t\t\t\t\t\t\tvertical: 'top',\n\t\t\t\t\t\t\t\t\thorizontal: 'right',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttransformOrigin: {\n\t\t\t\t\t\t\t\t\tvertical: 'top',\n\t\t\t\t\t\t\t\t\thorizontal: -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/>\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"position\"\n\t\t\t\t\tvalue={ value.value.position }\n\t\t\t\t\tlabel={ __( 'Position', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'position' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, position: v || null } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t{ label: __( 'Inset', 'elementor' ), value: 'inset' },\n\t\t\t\t\t\t\t{ label: __( 'Outset', 'elementor' ), value: '' },\n\t\t\t\t\t\t] }\n\t\t\t\t\t/>\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"hOffset\"\n\t\t\t\t\tlabel={ __( 'Horizontal', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.hOffset }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'hOffset' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, hOffset: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"vOffset\"\n\t\t\t\t\tlabel={ __( 'Vertical', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.vOffset }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'vOffset' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, vOffset: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"blur\"\n\t\t\t\t\tvalue={ value.value.blur }\n\t\t\t\t\tlabel={ __( 'Blur', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'blur' ] ) => setShadow( { ...value.value, blur: v } ) }\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"spread\"\n\t\t\t\t\tlabel={ __( 'Spread', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.spread }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'spread' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, spread: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n};\n\nconst Control = < T extends PropValue >( {\n\tvalue,\n\tsetValue,\n\tlabel,\n\tbind,\n\tchildren,\n}: {\n\tvalue: T;\n\tbind: string;\n\tlabel: string;\n\tchildren: React.ReactNode;\n\tsetValue: ( v: T ) => void;\n} ) => (\n\t<BoundPropProvider value={ value } setValue={ setValue as SetContextValue } bind={ bind }>\n\t\t<Grid item xs={ 6 }>\n\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n\nconst ItemLabel = ( { value }: { value: ShadowPropValue } ) => {\n\tconst { position, hOffset, vOffset, blur, spread } = value.value;\n\n\tconst { size: blurSize = '', unit: blurUnit = '' } = blur?.value || {};\n\tconst { size: spreadSize = '', unit: spreadUnit = '' } = spread?.value || {};\n\tconst { size: hOffsetSize = 'unset', unit: hOffsetUnit = '' } = hOffset?.value || {};\n\tconst { size: vOffsetSize = 'unset', unit: vOffsetUnit = '' } = vOffset?.value || {};\n\n\tconst sizes = [\n\t\thOffsetSize + hOffsetUnit,\n\t\tvOffsetSize + vOffsetUnit,\n\t\tblurSize + blurUnit,\n\t\tspreadSize + spreadUnit,\n\t].join( ' ' );\n\n\treturn (\n\t\t<span style={ { textTransform: 'capitalize' } }>\n\t\t\t{ position ?? 'outset' }: { sizes }\n\t\t</span>\n\t);\n};\n\nconst initialShadow: ShadowPropValue = {\n\t$$type: 'shadow',\n\tvalue: {\n\t\thOffset: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tvOffset: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tblur: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 10 },\n\t\t},\n\t\tspread: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tcolor: {\n\t\t\t$$type: 'color',\n\t\t\tvalue: 'rgba(0, 0, 0, 1)',\n\t\t},\n\t\tposition: null,\n\t},\n};\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { CopyIcon, EyeIcon, EyeOffIcon, PlusIcon, XIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tPopover,\n\tStack,\n\tTypography,\n\tUnstableTag,\n\ttype UnstableTagProps,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\ntype AnchorEl = HTMLElement | null;\n\ntype Item< T > = {\n\tdisabled?: boolean;\n} & T;\n\nexport type RepeaterProps< T > = {\n\tlabel: string;\n\tvalues?: T[];\n\tsetValues: ( newValue: T[] ) => void;\n\titemSettings: {\n\t\tinitialValues: T;\n\t\tLabel: React.ComponentType< { value: T } >;\n\t\tIcon: React.ComponentType< { value: T } >;\n\t\tContent: React.ComponentType< {\n\t\t\tvalue: T;\n\t\t\tsetValue: ( newValue: T ) => void;\n\t\t\tanchorEl: AnchorEl;\n\t\t} >;\n\t};\n};\n\nexport const Repeater = < T, >( {\n\tlabel,\n\titemSettings,\n\tvalues: repeaterValues = [],\n\tsetValues: setRepeaterValues,\n}: RepeaterProps< Item< T > > ) => {\n\tconst addRepeaterItem = () => {\n\t\tconst newItem = structuredClone( itemSettings.initialValues );\n\n\t\tsetRepeaterValues( [ ...repeaterValues, newItem ] );\n\t};\n\n\tconst duplicateRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues( [\n\t\t\t...repeaterValues.slice( 0, index ),\n\t\t\tstructuredClone( repeaterValues[ index ] ),\n\t\t\t...repeaterValues.slice( index ),\n\t\t] );\n\t};\n\n\tconst removeRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues( repeaterValues.filter( ( _, i ) => i !== index ) );\n\t};\n\n\tconst toggleDisableRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues(\n\t\t\trepeaterValues.map( ( value, i ) => {\n\t\t\t\tif ( i === index ) {\n\t\t\t\t\tconst { disabled, ...rest } = value;\n\n\t\t\t\t\t// If the items should not be disabled, remove the disabled property.\n\t\t\t\t\treturn { ...rest, ...( disabled ? {} : { disabled: true } ) } as Item< T >;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t} )\n\t\t);\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\" sx={ { pb: 1 } }>\n\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton size={ SIZE } onClick={ addRepeaterItem } aria-label={ __( 'Add item', 'elementor' ) }>\n\t\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Stack>\n\t\t\t<Stack gap={ 1 }>\n\t\t\t\t{ repeaterValues.map( ( value, index ) => (\n\t\t\t\t\t<RepeaterItem\n\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\tdisabled={ value.disabled }\n\t\t\t\t\t\tlabel={ <itemSettings.Label value={ value } /> }\n\t\t\t\t\t\tstartIcon={ <itemSettings.Icon value={ value } /> }\n\t\t\t\t\t\tremoveItem={ () => removeRepeaterItem( index ) }\n\t\t\t\t\t\tduplicateItem={ () => duplicateRepeaterItem( index ) }\n\t\t\t\t\t\ttoggleDisableItem={ () => toggleDisableRepeaterItem( index ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ( props ) => (\n\t\t\t\t\t\t\t<itemSettings.Content\n\t\t\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\tsetValue={ ( newValue ) =>\n\t\t\t\t\t\t\t\t\tsetRepeaterValues(\n\t\t\t\t\t\t\t\t\t\trepeaterValues.map( ( item, i ) => ( i === index ? newValue : item ) )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</RepeaterItem>\n\t\t\t\t) ) }\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n};\n\ntype RepeaterItemProps = {\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n\tstartIcon: UnstableTagProps[ 'startIcon' ];\n\tremoveItem: () => void;\n\tduplicateItem: () => void;\n\ttoggleDisableItem: () => void;\n\tchildren: ( { anchorEl }: { anchorEl: AnchorEl } ) => React.ReactNode;\n};\n\nconst RepeaterItem = ( {\n\tlabel,\n\tdisabled,\n\tstartIcon,\n\tchildren,\n\tremoveItem,\n\tduplicateItem,\n\ttoggleDisableItem,\n}: RepeaterItemProps ) => {\n\tconst popupId = useId();\n\tconst controlRef = useRef< HTMLElement >( null );\n\tconst [ anchorEl, setAnchorEl ] = useState< AnchorEl >( null );\n\n\tconst popoverState = usePopupState( { popupId, variant: 'popover' } );\n\n\tconst popoverProps = bindPopover( popoverState );\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tlabel={ label }\n\t\t\t\tshowActionsOnHover\n\t\t\t\tref={ controlRef }\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\taria-label={ __( 'Open item', 'elementor' ) }\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tstartIcon={ startIcon }\n\t\t\t\tactions={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ duplicateItem }\n\t\t\t\t\t\t\taria-label={ __( 'Duplicate item', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CopyIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ toggleDisableItem }\n\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\tdisabled ? __( 'Enable item', 'elementor' ) : __( 'Disable item', 'elementor' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ disabled ? <EyeOffIcon fontSize={ SIZE } /> : <EyeIcon fontSize={ SIZE } /> }\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ removeItem }\n\t\t\t\t\t\t\taria-label={ __( 'Remove item', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<XIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpaper: {\n\t\t\t\t\t\tref: setAnchorEl,\n\t\t\t\t\t\tsx: { mt: 0.5, p: 1, pt: 1, width: controlRef.current?.getBoundingClientRect().width },\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<Box p={ 0.5 }>{ children( { anchorEl } ) }</Box>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport {\n\tbackgroundImagePropTypeUtil,\n\ttype backgroundImageTypePropValue,\n\ttype ColorGradientPropValue,\n\ttype PropValue,\n} from '@elementor/editor-props';\nimport { Grid, Stack, Typography, UnstableColorIndicator } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { Repeater } from '../components/repeater';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport const BackgroundOverlayRepeaterControl = createControl( () => {\n\tconst { value: colorOverlayValues, setValue } = useBoundProp( backgroundImagePropTypeUtil );\n\n\tconst setColorOverlay = ( newValue: backgroundImageTypePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\tvalues={ colorOverlayValues }\n\t\t\tsetValues={ setColorOverlay }\n\t\t\tlabel={ __( 'Overlay', 'elementor' ) }\n\t\t\titemSettings={ {\n\t\t\t\tIcon: ItemIcon,\n\t\t\t\tLabel: ItemLabel,\n\t\t\t\tContent: ItemContent,\n\t\t\t\tinitialValues: initialGradient,\n\t\t\t} }\n\t\t/>\n\t);\n} );\n\nconst ItemIcon = ( { value }: { value: ColorGradientPropValue } ) => (\n\t<UnstableColorIndicator size=\"inherit\" component=\"span\" value={ value.value.color.value } />\n);\n\nconst ItemContent = ( {\n\tvalue,\n\tsetValue,\n}: {\n\tvalue: ColorGradientPropValue;\n\tsetValue: ( newValue: ColorGradientPropValue ) => void;\n} ) => {\n\tconst setColor = ( newValue: ColorGradientPropValue[ 'value' ] ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'background-overlay',\n\t\t\tvalue: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Control\n\t\t\t\tbind=\"color\"\n\t\t\t\tvalue={ value.value.color }\n\t\t\t\tlabel={ __( 'Color', 'elementor' ) }\n\t\t\t\tsetValue={ ( v: ColorGradientPropValue[ 'value' ][ 'color' ] ) =>\n\t\t\t\t\tsetColor( { ...value.value, color: v } )\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<ColorControl />\n\t\t\t</Control>\n\t\t</Stack>\n\t);\n};\n\nconst Control = < T extends PropValue >( {\n\tvalue,\n\tsetValue,\n\tlabel,\n\tbind,\n\tchildren,\n}: {\n\tvalue: T;\n\tbind: string;\n\tlabel: string;\n\tchildren: React.ReactNode;\n\tsetValue: ( v: T ) => void;\n} ) => (\n\t<BoundPropProvider value={ value } setValue={ setValue as SetContextValue } bind={ bind }>\n\t\t<Grid container spacing={ 1 } alignItems=\"center\">\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t{ children }\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n\nconst ItemLabel = ( { value }: { value: ColorGradientPropValue } ) => {\n\tconst color = value.value.color.value;\n\n\treturn <span>{ color }</span>;\n};\n\nconst initialGradient: ColorGradientPropValue = {\n\t$$type: 'background-overlay',\n\tvalue: {\n\t\tcolor: {\n\t\t\t$$type: 'color',\n\t\t\tvalue: 'rgba(0, 0, 0, 0.2)',\n\t\t},\n\t},\n};\n","import * as React from 'react';\nimport { type PropValue, stringPropTypeUtil, type StringPropValue } from '@elementor/editor-props';\nimport { type ToggleButtonProps } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { ControlToggleButtonGroup, type ToggleButtonGroupItem } from '../components/control-toggle-button-group';\nimport { createControl } from '../create-control';\n\ntype ToggleControlProps< T extends PropValue > = {\n\toptions: ToggleButtonGroupItem< T >[];\n\tfullWidth?: boolean;\n\tsize?: ToggleButtonProps[ 'size' ];\n};\n\nexport const ToggleControl = createControl(\n\t( { options, fullWidth = false, size = 'tiny' }: ToggleControlProps< StringPropValue[ 'value' ] > ) => {\n\t\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\t\tconst handleToggle = ( option: StringPropValue[ 'value' ] | null ) => {\n\t\t\tsetValue( option );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlToggleButtonGroup\n\t\t\t\titems={ options }\n\t\t\t\tvalue={ value ?? null }\n\t\t\t\tonChange={ handleToggle }\n\t\t\t\texclusive={ true }\n\t\t\t\tfullWidth={ fullWidth }\n\t\t\t\tsize={ size }\n\t\t\t/>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport {\n\ttype StackProps,\n\tstyled,\n\tToggleButton,\n\tToggleButtonGroup,\n\ttype ToggleButtonProps,\n\tTooltip,\n\tuseTheme,\n} from '@elementor/ui';\n\ntype RenderContentProps = { size: ToggleButtonProps[ 'size' ] };\n\nexport type ToggleButtonGroupItem< TValue > = {\n\tvalue: TValue;\n\tlabel: string;\n\trenderContent: ( { size }: RenderContentProps ) => React.ReactNode;\n\tshowTooltip?: boolean;\n};\n\nconst StyledToggleButtonGroup = styled( ToggleButtonGroup )`\n\t${ ( { justify } ) => `justify-content: ${ justify };` }\n`;\n\ntype ExclusiveValue< TValue > = TValue;\ntype NonExclusiveValue< TValue > = TValue[];\n\ntype Props< TValue > = {\n\tjustify?: StackProps[ 'justifyContent' ];\n\tsize?: ToggleButtonProps[ 'size' ];\n\titems: ToggleButtonGroupItem< TValue | null >[];\n\tfullWidth?: boolean;\n} & (\n\t| {\n\t\t\texclusive?: false;\n\t\t\tvalue: NonExclusiveValue< TValue >;\n\t\t\tonChange: ( value: NonExclusiveValue< TValue > ) => void;\n\t }\n\t| {\n\t\t\texclusive: true;\n\t\t\tvalue: ExclusiveValue< TValue >;\n\t\t\tonChange: ( value: ExclusiveValue< TValue > ) => void;\n\t }\n);\n\nexport const ControlToggleButtonGroup = < TValue, >( {\n\tjustify = 'end',\n\tsize = 'tiny',\n\tvalue,\n\tonChange,\n\titems,\n\texclusive = false,\n\tfullWidth = false,\n}: Props< TValue > ) => {\n\tconst isRtl = 'rtl' === useTheme().direction;\n\n\tconst handleChange = (\n\t\t_: React.MouseEvent< HTMLElement >,\n\t\tnewValue: typeof exclusive extends true ? ExclusiveValue< TValue > : NonExclusiveValue< TValue >\n\t) => {\n\t\tonChange( newValue as never );\n\t};\n\n\treturn (\n\t\t<StyledToggleButtonGroup\n\t\t\tjustify={ justify }\n\t\t\tvalue={ value }\n\t\t\tonChange={ handleChange }\n\t\t\texclusive={ exclusive }\n\t\t\tsx={ {\n\t\t\t\tdirection: isRtl ? 'rtl /* @noflip */' : 'ltr /* @noflip */',\n\t\t\t} }\n\t\t>\n\t\t\t{ items.map( ( { label, value: buttonValue, renderContent: Content, showTooltip } ) =>\n\t\t\t\tshowTooltip ? (\n\t\t\t\t\t<Tooltip key={ buttonValue } title={ label } disableFocusListener={ true } placement=\"top\">\n\t\t\t\t\t\t<ToggleButton value={ buttonValue } aria-label={ label } size={ size } fullWidth={ fullWidth }>\n\t\t\t\t\t\t\t<Content size={ size } />\n\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) : (\n\t\t\t\t\t<ToggleButton\n\t\t\t\t\t\tkey={ buttonValue }\n\t\t\t\t\t\tvalue={ buttonValue }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\tfullWidth={ fullWidth }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Content size={ size } />\n\t\t\t\t\t</ToggleButton>\n\t\t\t\t)\n\t\t\t) }\n\t\t</StyledToggleButtonGroup>\n\t);\n};\n","import * as React from 'react';\nimport { numberPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nconst isEmptyOrNaN = ( value?: string | number ) =>\n\tvalue === null || value === undefined || value === '' || Number.isNaN( Number( value ) );\n\nexport const NumberControl = createControl(\n\t( {\n\t\tplaceholder,\n\t\tmax = Number.MAX_VALUE,\n\t\tmin = -Number.MAX_VALUE,\n\t\tstep = 1,\n\t\tshouldForceInt = false,\n\t}: {\n\t\tplaceholder?: string;\n\t\tmax?: number;\n\t\tmin?: number;\n\t\tstep?: number;\n\t\tshouldForceInt?: boolean;\n\t} ) => {\n\t\tconst { value, setValue } = useBoundProp( numberPropTypeUtil );\n\n\t\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\t\tconst eventValue: string = event.target.value;\n\n\t\t\tif ( isEmptyOrNaN( eventValue ) ) {\n\t\t\t\tsetValue( null );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst formattedValue = shouldForceInt ? +parseInt( eventValue ) : Number( eventValue );\n\n\t\t\tsetValue( Math.min( Math.max( formattedValue, min ), max ) );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlActions>\n\t\t\t\t<TextField\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tfullWidth\n\t\t\t\t\tvalue={ isEmptyOrNaN( value ) ? '' : value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\tinputProps={ { step } }\n\t\t\t\t/>\n\t\t\t</ControlActions>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport { type ReactNode, useId, useRef } from 'react';\nimport {\n\ttype PropKey,\n\ttype PropTypeUtil,\n\ttype PropValue,\n\tsizePropTypeUtil,\n\ttype SizePropValue,\n} from '@elementor/editor-props';\nimport { bindPopover, bindToggle, Grid, Popover, Stack, ToggleButton, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { SizeControl } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\ntype MultiSizePropValue = Record< PropKey, SizePropValue >;\n\ntype Item = {\n\ticon: ReactNode;\n\tlabel: string;\n\tbind: PropKey;\n};\n\nexport type EqualUnequalItems = [ Item, Item, Item, Item ];\n\ntype Props< TMultiPropType extends string, TPropValue extends MultiSizePropValue > = {\n\tlabel: string;\n\ticon: ReactNode;\n\titems: EqualUnequalItems;\n\tmultiSizePropTypeUtil: PropTypeUtil< TMultiPropType, TPropValue >;\n};\n\nconst isEqualSizes = ( values: SizePropValue[], items: EqualUnequalItems ) => {\n\tif ( values.length !== items.length ) {\n\t\treturn false;\n\t}\n\n\tconst [ firstValue, ...restValues ] = values;\n\n\treturn restValues.every(\n\t\t( value ) => value.value?.size === firstValue.value?.size && value.value?.unit === firstValue.value?.unit\n\t);\n};\n\nexport function EqualUnequalSizesControl< TMultiPropType extends string, TPropValue extends MultiSizePropValue >( {\n\tlabel,\n\ticon,\n\titems,\n\tmultiSizePropTypeUtil,\n}: Props< TMultiPropType, TPropValue > ) {\n\tconst popupId = useId();\n\tconst controlRef = useRef< HTMLElement >( null );\n\tconst popupState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst { value: sizeValue, setValue: setSizeValue } = useBoundProp( sizePropTypeUtil );\n\tconst { value: multiSizeValue, setValue: setMultiSizeValue } = useBoundProp( multiSizePropTypeUtil );\n\n\tconst splitEqualValue = () => {\n\t\treturn items.reduce( ( acc, item ) => ( { ...acc, [ item.bind ]: sizePropTypeUtil.create( sizeValue ) } ), {} );\n\t};\n\n\tconst setNestedProp = ( item: Item, newValue: SizePropValue ) => {\n\t\tconst newMappedValues = {\n\t\t\t...( multiSizeValue ?? splitEqualValue() ),\n\t\t\t[ item.bind ]: newValue,\n\t\t};\n\n\t\tconst isEqual = isEqualSizes( Object.values( newMappedValues ), items );\n\n\t\tif ( isEqual ) {\n\t\t\treturn setSizeValue( newValue?.value );\n\t\t}\n\n\t\tsetMultiSizeValue( newMappedValues );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\" ref={ controlRef }>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<EqualSizeControl\n\t\t\t\t\t\titems={ items }\n\t\t\t\t\t\tvalue={ sizeValue }\n\t\t\t\t\t\tmultiSizeValue={ multiSizeValue }\n\t\t\t\t\t\tsetValue={ setSizeValue }\n\t\t\t\t\t\ticonButton={\n\t\t\t\t\t\t\t<ToggleButton\n\t\t\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\t{ ...bindToggle( popupState ) }\n\t\t\t\t\t\t\t\tselected={ popupState.isOpen }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ icon }\n\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpaper: { sx: { mt: 0.5, p: 2, pt: 1, width: controlRef.current?.getBoundingClientRect().width } },\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 0 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 1 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 3 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 2 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nconst MultiSizeValueControl = < TPropValue extends MultiSizePropValue >( {\n\titem,\n\tvalue,\n\tsetNestedProp,\n\tsplitEqualValue,\n}: {\n\titem: Item;\n\tvalue: TPropValue | undefined;\n\tsetNestedProp: ( item: Item, newValue: SizePropValue ) => void;\n\tsplitEqualValue: () => TPropValue;\n} ) => {\n\tconst handleChange = ( val: SizePropValue ) => setNestedProp( item, val );\n\n\tconst getMultiSizeValues = () => {\n\t\tif ( value ) {\n\t\t\treturn value?.[ item.bind ] ?? null;\n\t\t}\n\n\t\treturn splitEqualValue()?.[ item.bind ] ?? null;\n\t};\n\n\treturn (\n\t\t<BoundPropProvider bind={ '' } setValue={ handleChange as SetContextValue } value={ getMultiSizeValues() }>\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ item.label }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<SizeControl startIcon={ item.icon } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</BoundPropProvider>\n\t);\n};\n\nconst EqualSizeControl = ( {\n\tvalue,\n\titems,\n\tsetValue,\n\ticonButton,\n\tmultiSizeValue,\n}: {\n\tvalue: SizePropValue[ 'value' ] | null;\n\titems: EqualUnequalItems;\n\tsetValue: ( newValue: SizePropValue[ 'value' ] ) => void;\n\ticonButton: ReactNode;\n\tmultiSizeValue: PropValue;\n} ) => {\n\tconst handleChange = ( newValue: SizePropValue ) => {\n\t\tsetValue( newValue.value );\n\t};\n\n\tconst getDisplayValue = () => {\n\t\tif ( value ) {\n\t\t\treturn sizePropTypeUtil.create( value );\n\t\t}\n\n\t\tconst multiValues = Object.values( multiSizeValue ?? {} ) as SizePropValue[];\n\n\t\tif ( isEqualSizes( multiValues, items ) ) {\n\t\t\treturn sizePropTypeUtil.create( multiValues[ 0 ].value );\n\t\t}\n\t};\n\n\treturn (\n\t\t<BoundPropProvider bind={ '' } setValue={ handleChange as SetContextValue } value={ getDisplayValue() ?? null }>\n\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t<SizeControl placeholder={ __( 'MIXED', 'elementor' ) } />\n\t\t\t\t{ iconButton }\n\t\t\t</Stack>\n\t\t</BoundPropProvider>\n\t);\n};\n","import * as React from 'react';\nimport { linkedDimensionsPropTypeUtil, type PropValue } from '@elementor/editor-props';\nimport { DetachIcon, LinkIcon, SideBottomIcon, SideLeftIcon, SideRightIcon, SideTopIcon } from '@elementor/icons';\nimport { Grid, Stack, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { SizeControl } from './size-control';\n\nexport type Position = 'top' | 'right' | 'bottom' | 'left';\n\nexport const LinkedDimensionsControl = createControl( ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useBoundProp( linkedDimensionsPropTypeUtil );\n\tconst { top, right, bottom, left, isLinked = true } = value || {};\n\n\tconst setLinkedValue = ( position: Position, newValue: PropValue ) => {\n\t\tconst updatedValue = {\n\t\t\tisLinked,\n\t\t\ttop: isLinked ? newValue : top,\n\t\t\tright: isLinked ? newValue : right,\n\t\t\tbottom: isLinked ? newValue : bottom,\n\t\t\tleft: isLinked ? newValue : left,\n\t\t\t[ position ]: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst toggleLinked = () => {\n\t\tconst updatedValue = {\n\t\t\tisLinked: ! isLinked,\n\t\t\ttop,\n\t\t\tright: ! isLinked ? top : right,\n\t\t\tbottom: ! isLinked ? top : bottom,\n\t\t\tleft: ! isLinked ? top : left,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t<ToggleButton\n\t\t\t\t\taria-label={ __( 'Link Inputs', 'elementor' ) }\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\tselected={ isLinked }\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\tonChange={ toggleLinked }\n\t\t\t\t>\n\t\t\t\t\t<LinkedIcon fontSize={ 'tiny' } />\n\t\t\t\t</ToggleButton>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Top', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'top' }\n\t\t\t\t\t\t\tvalue={ top }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideTopIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Right', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'right' }\n\t\t\t\t\t\t\tvalue={ right }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideRightIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Bottom', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'bottom' }\n\t\t\t\t\t\t\tvalue={ bottom }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideBottomIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Left', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'left' }\n\t\t\t\t\t\t\tvalue={ left }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideLeftIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t</>\n\t);\n} );\n\nconst Control = ( {\n\tbind,\n\tstartIcon,\n\tvalue,\n\tsetValue,\n}: {\n\tbind: Position;\n\tvalue: PropValue;\n\tstartIcon: React.ReactNode;\n\tsetValue: ( bind: Position, newValue: PropValue ) => void;\n} ) => (\n\t<BoundPropProvider setValue={ ( newValue ) => setValue( bind, newValue ) } value={ value } bind={ bind }>\n\t\t<SizeControl startIcon={ startIcon } />\n\t</BoundPropProvider>\n);\n","import { Fragment, useId, useState } from 'react';\nimport * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { ChevronDownIcon, EditIcon, PhotoIcon, SearchIcon, XIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tDivider,\n\tIconButton,\n\tInputAdornment,\n\tLink,\n\tListSubheader,\n\tMenuItem,\n\tMenuList,\n\tPopover,\n\tStack,\n\tTextField,\n\tTypography,\n\tUnstableTag,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { createControl } from '../create-control';\nimport { useFilteredFontFamilies } from '../hooks/use-filtered-font-families';\n\nconst SIZE = 'tiny';\n\nexport const FontFamilyControl = createControl( ( { fontFamilies } ) => {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\tconst { value: fontFamily, setValue: setFontFamily } = useBoundProp( stringPropTypeUtil );\n\n\tconst popupId = useId();\n\tconst popoverState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst filteredFontFamilies = useFilteredFontFamilies( fontFamilies, searchValue );\n\n\tif ( ! filteredFontFamilies ) {\n\t\treturn null;\n\t}\n\n\tconst handleSearch = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetSearchValue( event.target.value );\n\t};\n\n\tconst handleClose = () => {\n\t\tsetSearchValue( '' );\n\n\t\tpopoverState.close();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\tlabel={ fontFamily }\n\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tfullWidth\n\t\t\t/>\n\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...bindPopover( popoverState ) }\n\t\t\t\tonClose={ handleClose }\n\t\t\t>\n\t\t\t\t<Stack>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" pl={ 1.5 } pr={ 0.5 } py={ 1.5 }>\n\t\t\t\t\t\t<EditIcon fontSize={ SIZE } sx={ { mr: 0.5 } } />\n\t\t\t\t\t\t<Typography variant=\"subtitle2\">{ __( 'Font Family', 'elementor' ) }</Typography>\n\t\t\t\t\t\t<IconButton size={ SIZE } sx={ { ml: 'auto' } } onClick={ handleClose }>\n\t\t\t\t\t\t\t<XIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Stack>\n\n\t\t\t\t\t<Box px={ 1.5 } pb={ 1 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\t\t\tonChange={ handleSearch }\n\t\t\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t\t\t<SearchIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t\t\t</InputAdornment>\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</Box>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Box sx={ { overflowY: 'auto', height: 260, width: 220 } }>\n\t\t\t\t\t\t{ filteredFontFamilies.length > 0 ? (\n\t\t\t\t\t\t\t<MenuList role=\"listbox\" tabIndex={ 0 }>\n\t\t\t\t\t\t\t\t{ filteredFontFamilies.map( ( [ category, items ], index ) => (\n\t\t\t\t\t\t\t\t\t<Fragment key={ index }>\n\t\t\t\t\t\t\t\t\t\t<ListSubheader sx={ { typography: 'caption', color: 'text.tertiary' } }>\n\t\t\t\t\t\t\t\t\t\t\t{ category }\n\t\t\t\t\t\t\t\t\t\t</ListSubheader>\n\t\t\t\t\t\t\t\t\t\t{ items.map( ( item ) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isSelected = item === fontFamily;\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ item }\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\t\t\t\t\t\t\t\t\tautoFocus={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetFontFamily( item );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleClose();\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ { typography: 'caption' } }\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={ { fontFamily: item } }\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ item }\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Stack alignItems=\"center\" p={ 2.5 } gap={ 1.5 }>\n\t\t\t\t\t\t\t\t<PhotoIcon fontSize=\"large\" />\n\t\t\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t&ldquo;{ searchValue }&rdquo;.\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\t\tcomponent=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={ () => setSearchValue( '' ) }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Clear the filters', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t\t\t\t{ __( 'and try again.', 'elementor' ) }\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Box>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</>\n\t);\n} );\n","import { __ } from '@wordpress/i18n';\n\nexport type SupportedFonts = 'system' | 'googlefonts' | 'customfonts';\n\nconst supportedCategories: Record< SupportedFonts, string > = {\n\tsystem: __( 'System', 'elementor' ),\n\tgooglefonts: __( 'Google Fonts', 'elementor' ),\n\tcustomfonts: __( 'Custom Fonts', 'elementor' ),\n};\n\nexport const useFilteredFontFamilies = ( fontFamilies: Record< string, SupportedFonts >, searchValue: string ) => {\n\tconst filteredFontFamilies = Object.entries( fontFamilies ).reduce< Map< string, string[] > >(\n\t\t( acc, [ font, category ] ) => {\n\t\t\tconst isMatch = font.toLowerCase().includes( searchValue.trim().toLowerCase() );\n\n\t\t\tif ( ! isMatch ) {\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tconst categoryLabel = supportedCategories[ category as SupportedFonts ];\n\n\t\t\tif ( categoryLabel ) {\n\t\t\t\tconst existingCategory = acc.get( categoryLabel );\n\n\t\t\t\tif ( existingCategory ) {\n\t\t\t\t\texistingCategory.push( font );\n\t\t\t\t} else {\n\t\t\t\t\tacc.set( categoryLabel, [ font ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t},\n\t\tnew Map()\n\t);\n\n\treturn [ ...filteredFontFamilies ];\n};\n","import * as React from 'react';\nimport { type UrlPropValue } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const UrlControl = createControl( ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useBoundProp< UrlPropValue >();\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) =>\n\t\tsetValue( {\n\t\t\t$$type: 'url',\n\t\t\tvalue: event.target.value,\n\t\t} );\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tfullWidth\n\t\t\t\tvalue={ value?.value }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { type LinkPropValue, type UrlPropValue } from '@elementor/editor-props';\nimport { MinusIcon, PlusIcon } from '@elementor/icons';\nimport { Collapse, Divider, Grid, IconButton, Stack, Switch } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { UrlControl } from './url-control';\n\nconst SIZE = 'tiny';\n\nconst DEFAULT_LINK_CONTROL_VALUE: LinkPropValue = {\n\t$$type: 'link',\n\tvalue: {\n\t\tenabled: false,\n\t\thref: {\n\t\t\t$$type: 'url',\n\t\t\tvalue: '',\n\t\t},\n\t\tisTargetBlank: false,\n\t},\n};\n\nexport const LinkControl = createControl( () => {\n\tconst { value = DEFAULT_LINK_CONTROL_VALUE, setValue } = useBoundProp< LinkPropValue >();\n\tconst { enabled, href, isTargetBlank } = value?.value || {};\n\n\tconst handleOnChange = < T extends keyof LinkPropValue[ 'value' ] >(\n\t\tkey: T,\n\t\tnewValue: LinkPropValue[ 'value' ][ T ]\n\t) => {\n\t\tsetValue( {\n\t\t\t$$type: 'link',\n\t\t\tvalue: {\n\t\t\t\t...( value?.value ?? DEFAULT_LINK_CONTROL_VALUE.value ),\n\t\t\t\t[ key ]: newValue,\n\t\t\t},\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Divider />\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\tsx={ {\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<ControlLabel>{ __( 'Link', 'elementor' ) }</ControlLabel>\n\t\t\t\t<IconButton size={ SIZE } onClick={ () => handleOnChange( 'enabled', ! enabled ) }>\n\t\t\t\t\t{ enabled ? <MinusIcon fontSize={ SIZE } /> : <PlusIcon fontSize={ SIZE } /> }\n\t\t\t\t</IconButton>\n\t\t\t</Stack>\n\t\t\t<Collapse in={ enabled } timeout=\"auto\" unmountOnExit>\n\t\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\tvalue={ href }\n\t\t\t\t\t\tsetValue={ ( newHref ) => handleOnChange( 'href', newHref as UrlPropValue ) }\n\t\t\t\t\t\tbind={ 'href' }\n\t\t\t\t\t>\n\t\t\t\t\t\t<UrlControl placeholder={ __( 'Paste URL or type', 'elementor' ) } />\n\t\t\t\t\t</BoundPropProvider>\n\n\t\t\t\t\t<SwitchControl\n\t\t\t\t\t\tvalue={ isTargetBlank }\n\t\t\t\t\t\tonSwitch={ () => handleOnChange( 'isTargetBlank', ! isTargetBlank ) }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</Stack>\n\t);\n} );\n\n// @TODO Should be refactored in ED-16323\nconst SwitchControl = ( { value, onSwitch }: { value: boolean; onSwitch: () => void } ) => {\n\treturn (\n\t\t<Grid container alignItems=\"center\" flexWrap=\"nowrap\" justifyContent=\"space-between\">\n\t\t\t<Grid item>\n\t\t\t\t<ControlLabel>{ __( 'Open in new tab', 'elementor' ) }</ControlLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item>\n\t\t\t\t<Switch checked={ value } onChange={ onSwitch } />\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import * as React from 'react';\nimport { gapPropTypeUtil, type PropValue } from '@elementor/editor-props';\nimport { DetachIcon, LinkIcon } from '@elementor/icons';\nimport { Grid, Stack, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { SizeControl } from './size-control';\n\nexport type Gap = 'row' | 'column';\n\nexport const GapControl = createControl( ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useBoundProp( gapPropTypeUtil );\n\tconst { column, row, isLinked = true } = value || {};\n\n\tconst setLinkedValue = ( gap: Gap, newValue: PropValue ) => {\n\t\tconst updatedValue = {\n\t\t\tisLinked,\n\t\t\tcolumn: isLinked ? newValue : column,\n\t\t\trow: isLinked ? newValue : row,\n\t\t\t[ gap ]: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst toggleLinked = () => {\n\t\tconst updatedValue = {\n\t\t\tisLinked: ! isLinked,\n\t\t\tcolumn,\n\t\t\trow: ! isLinked ? column : row,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t<ToggleButton\n\t\t\t\t\taria-label={ __( 'Link Inputs', 'elementor' ) }\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\tselected={ isLinked }\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\tonChange={ toggleLinked }\n\t\t\t\t>\n\t\t\t\t\t<LinkedIcon fontSize={ 'tiny' } />\n\t\t\t\t</ToggleButton>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Column', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\t\tsetValue={ ( newValue ) => setLinkedValue( 'column', newValue ) }\n\t\t\t\t\t\t\tvalue={ column }\n\t\t\t\t\t\t\tbind=\"column\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SizeControl />\n\t\t\t\t\t\t</BoundPropProvider>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Row', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\t\tsetValue={ ( newValue ) => setLinkedValue( 'row', newValue ) }\n\t\t\t\t\t\t\tvalue={ row }\n\t\t\t\t\t\t\tbind=\"row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SizeControl />\n\t\t\t\t\t\t</BoundPropProvider>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t</>\n\t);\n} );\n"],"mappings":"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","names":["React","Stack","__","value","React","React","React","createContext","useContext","createContext","useContext","React","React","React","createContext","useContext","MenuItem","React","Stack","__","React","stringPropTypeUtil","stringPropTypeUtil","React","stringPropTypeUtil","TextField","stringPropTypeUtil","TextField","React","InputAdornment","React","Button","MenuItem","TextField","units","InputAdornment","React","Grid","Stack","__","React","Stack","__","Grid","React","Grid","Stack","Typography","__","React","useId","useState","bindTrigger","Stack","Typography","usePopupState","__","__","Stack","Grid","Control","Typography","React","Grid","Stack","Typography","UnstableColorIndicator","__","__","ItemIcon","ItemLabel","ItemContent","UnstableColorIndicator","Stack","Control","Grid","Typography","React","stringPropTypeUtil","React","styled","stringPropTypeUtil","React","TextField","TextField","React","useId","useRef","sizePropTypeUtil","bindPopover","Grid","Popover","Stack","ToggleButton","usePopupState","__","useId","useRef","usePopupState","sizePropTypeUtil","Grid","ToggleButton","Popover","bindPopover","Stack","__","React","Grid","Stack","ToggleButton","__","Stack","ToggleButton","__","Grid","Control","Fragment","useId","useState","React","stringPropTypeUtil","XIcon","bindPopover","bindTrigger","Box","IconButton","InputAdornment","MenuItem","Popover","Stack","TextField","Typography","UnstableTag","usePopupState","__","__","SIZE","useState","stringPropTypeUtil","useId","usePopupState","UnstableTag","bindTrigger","Popover","bindPopover","Stack","Typography","__","IconButton","XIcon","Box","TextField","InputAdornment","Fragment","MenuItem","React","TextField","TextField","React","PlusIcon","Divider","Grid","IconButton","Stack","__","SIZE","Stack","Divider","__","IconButton","PlusIcon","Grid","React","DetachIcon","LinkIcon","Grid","Stack","ToggleButton","__","LinkIcon","DetachIcon","Stack","ToggleButton","__","Grid"]}
1
+ {"version":3,"sources":["../src/controls/image-control.tsx","../src/bound-prop-context.tsx","../src/components/control-label.tsx","../src/create-control.tsx","../src/create-control-replacement.tsx","../src/controls/image-media-control.tsx","../src/control-actions/control-actions.tsx","../src/control-actions/control-actions-context.tsx","../src/controls/select-control.tsx","../src/controls/text-control.tsx","../src/controls/text-area-control.tsx","../src/controls/size-control.tsx","../src/components/text-field-inner-selection.tsx","../src/hooks/use-sync-external-state.tsx","../src/controls/stroke-control.tsx","../src/controls/color-control.tsx","../src/controls/box-shadow-repeater-control.tsx","../src/components/repeater.tsx","../src/controls/background-overlay-repeater-control.tsx","../src/controls/toggle-control.tsx","../src/components/control-toggle-button-group.tsx","../src/controls/number-control.tsx","../src/controls/equal-unequal-sizes-control.tsx","../src/controls/linked-dimensions-control.tsx","../src/controls/font-family-control.tsx","../src/hooks/use-filtered-font-families.ts","../src/controls/url-control.tsx","../src/controls/link-control.tsx","../src/controls/gap-control.tsx"],"sourcesContent":["import * as React from 'react';\nimport { imagePropTypeUtil, type ImageSrcPropValue, type PropValue, type SizePropValue } from '@elementor/editor-props';\nimport { Grid, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { ImageMediaControl } from './image-media-control';\nimport { SelectControl } from './select-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport type ImageControlProps = {\n\tsizes: { label: string; value: string }[];\n};\n\nexport const ImageControl = createControl( ( props: ImageControlProps ) => {\n\tconst { value, setValue } = useBoundProp( imagePropTypeUtil );\n\tconst { src, size } = value || {};\n\n\tconst setImageSrc = ( newValue: ImageSrcPropValue ) => {\n\t\tsetValue( {\n\t\t\tsrc: newValue,\n\t\t\tsize: size as SizePropValue,\n\t\t} );\n\t};\n\n\tconst setImageSize = ( newValue: SizePropValue ) => {\n\t\tsetValue( {\n\t\t\tsrc: src as ImageSrcPropValue,\n\t\t\tsize: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<BoundPropProvider value={ src } setValue={ setImageSrc as SetContextValue } bind={ 'src' }>\n\t\t\t\t<ImageMediaControl />\n\t\t\t</BoundPropProvider>\n\t\t\t<BoundPropProvider value={ size } setValue={ setImageSize as SetContextValue } bind={ 'size' }>\n\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<ControlLabel> { __( 'Image Resolution', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t\t<SelectControl options={ props.sizes } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</BoundPropProvider>\n\t\t</Stack>\n\t);\n} );\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\nimport { type CreateOptions, type PropKey, type PropTypeUtil, type PropValue } from '@elementor/editor-props';\n\n// Context\nexport type BoundPropContext< T extends PropValue > = {\n\tbind: PropKey;\n\tsetValue: ( value: T | null ) => void;\n\tvalue: T;\n};\n\nconst BoundPropContext = createContext< BoundPropContext< PropValue > | null >( null );\n\n// Provider\nexport type BoundPropProviderProps< T extends PropValue > = BoundPropContext< T > & {\n\tchildren: React.ReactNode;\n\tsetValue: ( value: T | null ) => void;\n};\n\nexport const BoundPropProvider = ( { children, value, setValue, bind }: BoundPropProviderProps< PropValue > ) => {\n\treturn <BoundPropContext.Provider value={ { value, setValue, bind } }>{ children }</BoundPropContext.Provider>;\n};\n\n// Hook\ntype SetValue< T > = ( value: T | null, options?: CreateOptions ) => void;\n\ntype UseBoundProp< TValue > = {\n\tbind: PropKey;\n\tsetValue: SetValue< TValue >;\n\tvalue: TValue;\n};\n\nexport function useBoundProp< TValue extends PropValue >(): BoundPropContext< TValue >;\n\nexport function useBoundProp< TKey extends string, TValue extends PropValue >(\n\tpropTypeUtil: PropTypeUtil< TKey, TValue >\n): UseBoundProp< TValue >;\n\nexport function useBoundProp< TKey extends string, TValue extends PropValue >(\n\tpropTypeUtil?: PropTypeUtil< TKey, TValue >\n) {\n\tconst boundPropContext = useContext< BoundPropContext< TValue > >( BoundPropContext as never );\n\n\tif ( ! boundPropContext ) {\n\t\tthrow new Error( 'useBoundProp must be used within a BoundPropProvider' );\n\t}\n\n\tif ( ! propTypeUtil ) {\n\t\treturn boundPropContext;\n\t}\n\n\tfunction setValue( value: TValue | null, options?: CreateOptions ) {\n\t\tif ( value === null ) {\n\t\t\treturn boundPropContext.setValue( null );\n\t\t}\n\n\t\treturn boundPropContext.setValue( propTypeUtil?.create( value, options ) as TValue );\n\t}\n\n\tconst value = propTypeUtil.extract( boundPropContext.value );\n\n\treturn {\n\t\t...boundPropContext,\n\t\tsetValue,\n\t\tvalue,\n\t};\n}\n","import * as React from 'react';\nimport { Typography } from '@elementor/ui';\n\nexport const ControlLabel = ( { children }: { children: React.ReactNode } ) => {\n\treturn (\n\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t{ children }\n\t\t</Typography>\n\t);\n};\n","import * as React from 'react';\nimport { type ComponentProps, type ComponentType } from 'react';\nimport { ErrorBoundary } from '@elementor/ui';\n\nimport { useControlReplacement } from './create-control-replacement';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyComponentType = ComponentType< any >;\n\ntype Options = {\n\tsupportsReplacements?: boolean;\n};\n\nconst brandSymbol = Symbol( 'control' );\n\nexport type ControlComponent< TComponent extends AnyComponentType = AnyComponentType > = TComponent & {\n\t[ brandSymbol ]: true;\n};\n\nexport function createControl< T extends AnyComponentType >(\n\tComponent: T,\n\t{ supportsReplacements = true }: Options = {}\n) {\n\treturn ( ( props: ComponentProps< T > ) => {\n\t\tconst ControlReplacement = useControlReplacement();\n\n\t\tif ( ControlReplacement && supportsReplacements ) {\n\t\t\treturn (\n\t\t\t\t<ErrorBoundary fallback={ null }>\n\t\t\t\t\t<ControlReplacement { ...props } />\n\t\t\t\t</ErrorBoundary>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<ErrorBoundary fallback={ null }>\n\t\t\t\t<Component { ...props } />\n\t\t\t</ErrorBoundary>\n\t\t);\n\t} ) as ControlComponent< T >;\n}\n","import * as React from 'react';\nimport { type ComponentType, createContext, useContext } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\n\nimport { useBoundProp } from './bound-prop-context';\n\nexport type ReplaceWhenParams = {\n\tvalue: PropValue;\n};\n\nexport type CreateControlReplacement = {\n\tcomponent: ComponentType;\n\tcondition: ( { value }: ReplaceWhenParams ) => boolean;\n};\n\nconst ControlReplacementContext = createContext< CreateControlReplacement | undefined >( undefined );\n\nexport const ControlReplacementProvider = ( {\n\tcomponent,\n\tcondition,\n\tchildren,\n}: React.PropsWithChildren< CreateControlReplacement > ) => {\n\treturn (\n\t\t<ControlReplacementContext.Provider value={ { component, condition } }>\n\t\t\t{ children }\n\t\t</ControlReplacementContext.Provider>\n\t);\n};\nexport const useControlReplacement = () => {\n\tconst { value } = useBoundProp();\n\tconst controlReplacement = useContext( ControlReplacementContext );\n\n\tlet shouldReplace = false;\n\n\ttry {\n\t\tshouldReplace = !! controlReplacement?.condition( { value } ) && !! controlReplacement.component;\n\t} catch {}\n\n\treturn shouldReplace ? controlReplacement?.component : undefined;\n};\n\nexport const createControlReplacement = () => {\n\tlet controlReplacement: CreateControlReplacement;\n\n\tfunction replaceControl( { component, condition }: CreateControlReplacement ) {\n\t\tcontrolReplacement = { component, condition };\n\t}\n\n\tfunction getControlReplacement() {\n\t\treturn controlReplacement;\n\t}\n\n\treturn { replaceControl, getControlReplacement };\n};\n","import * as React from 'react';\nimport { imageSrcPropTypeUtil } from '@elementor/editor-props';\nimport { UploadIcon } from '@elementor/icons';\nimport { Button, Card, CardMedia, CardOverlay, CircularProgress, Stack } from '@elementor/ui';\nimport { useWpMediaAttachment, useWpMediaFrame } from '@elementor/wp-media';\nimport { __ } from '@wordpress/i18n';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const ImageMediaControl = createControl( () => {\n\tconst { value, setValue } = useBoundProp( imageSrcPropTypeUtil );\n\tconst { id, url } = value ?? {};\n\n\tconst { data: attachment, isFetching } = useWpMediaAttachment( id?.value || null );\n\tconst src = attachment?.url ?? url;\n\n\tconst { open } = useWpMediaFrame( {\n\t\ttypes: [ 'image' ],\n\t\tmultiple: false,\n\t\tselected: id?.value || null,\n\t\tonSelect: ( selectedAttachment ) => {\n\t\t\tsetValue( {\n\t\t\t\tid: {\n\t\t\t\t\t$$type: 'image-attachment-id',\n\t\t\t\t\tvalue: selectedAttachment.id,\n\t\t\t\t},\n\t\t\t\turl: null,\n\t\t\t} );\n\t\t},\n\t} );\n\n\treturn (\n\t\t<Card variant=\"outlined\">\n\t\t\t<CardMedia image={ src } sx={ { height: 150 } }>\n\t\t\t\t{ isFetching ? (\n\t\t\t\t\t<Stack justifyContent=\"center\" alignItems=\"center\" width=\"100%\" height=\"100%\">\n\t\t\t\t\t\t<CircularProgress />\n\t\t\t\t\t</Stack>\n\t\t\t\t) : null }\n\t\t\t</CardMedia>\n\t\t\t<CardOverlay>\n\t\t\t\t<ControlActions>\n\t\t\t\t\t<Stack gap={ 1 }>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\t\t\tonClick={ () => open( { mode: 'browse' } ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Select Image', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\t\t\tstartIcon={ <UploadIcon /> }\n\t\t\t\t\t\t\tonClick={ () => open( { mode: 'upload' } ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ __( 'Upload Image', 'elementor' ) }\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Stack>\n\t\t\t\t</ControlActions>\n\t\t\t</CardOverlay>\n\t\t</Card>\n\t);\n} );\n","import * as React from 'react';\nimport { type PropsWithChildren, type ReactElement } from 'react';\nimport { styled, UnstableFloatingActionBar } from '@elementor/ui';\n\nimport { useControlActions } from './control-actions-context';\n\n// CSS hack to hide empty floating bars.\nconst FloatingBarContainer = styled( 'span' )`\n\tdisplay: contents;\n\n\t.MuiFloatingActionBar-popper:has( .MuiFloatingActionBar-actions:empty ) {\n\t\tdisplay: none;\n\t}\n`;\n\nexport type ControlActionsProps = PropsWithChildren< object >;\n\nexport default function ControlActions( { children }: ControlActionsProps ) {\n\tconst { items } = useControlActions();\n\n\tif ( items.length === 0 ) {\n\t\treturn children;\n\t}\n\n\tconst menuItems = items.map( ( { MenuItem, id } ) => <MenuItem key={ id } /> );\n\n\treturn (\n\t\t<FloatingBarContainer>\n\t\t\t<UnstableFloatingActionBar actions={ menuItems }>{ children as ReactElement }</UnstableFloatingActionBar>\n\t\t</FloatingBarContainer>\n\t);\n}\n","import * as React from 'react';\nimport { createContext, type PropsWithChildren, useContext } from 'react';\n\ntype ControlActionsContext = {\n\titems: Array< {\n\t\tid: string;\n\t\tMenuItem: React.ComponentType;\n\t} >;\n};\n\nconst Context = createContext< ControlActionsContext | null >( null );\n\nexport type ControlActionsProviderProps = PropsWithChildren< ControlActionsContext >;\n\nexport const ControlActionsProvider = ( { children, items }: ControlActionsProviderProps ) => (\n\t<Context.Provider value={ { items } }>{ children }</Context.Provider>\n);\n\nexport const useControlActions = () => {\n\tconst context = useContext( Context );\n\n\tif ( ! context ) {\n\t\tthrow new Error( 'useControlActions must be used within a ControlActionsProvider' );\n\t}\n\n\treturn context;\n};\n","import * as React from 'react';\nimport { stringPropTypeUtil, type StringPropValue } from '@elementor/editor-props';\nimport { MenuItem, Select, type SelectChangeEvent } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\ntype Props = {\n\toptions: Array< { label: string; value: StringPropValue[ 'value' ]; disabled?: boolean } >;\n\tonChange?: ( newValue: string | null, previousValue: string | null | undefined ) => void;\n};\n\nexport const SelectControl = createControl( ( { options, onChange }: Props ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: SelectChangeEvent< StringPropValue[ 'value' ] > ) => {\n\t\tonChange?.( event.target.value, value );\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<Select displayEmpty size=\"tiny\" value={ value ?? '' } onChange={ handleChange } fullWidth>\n\t\t\t\t{ options.map( ( { label, ...props } ) => (\n\t\t\t\t\t<MenuItem key={ props.value } { ...props }>\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Select>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const TextControl = createControl( ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => setValue( event.target.value );\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField size=\"tiny\" fullWidth value={ value } onChange={ handleChange } placeholder={ placeholder } />\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\ntype Props = {\n\tplaceholder?: string;\n};\n\nexport const TextAreaControl = createControl( ( { placeholder }: Props ) => {\n\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tmultiline\n\t\t\t\tfullWidth\n\t\t\t\trows={ 5 }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { sizePropTypeUtil } from '@elementor/editor-props';\nimport { InputAdornment } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { SelectionEndAdornment, TextFieldInnerSelection } from '../components/text-field-inner-selection';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\nimport { useSyncExternalState } from '../hooks/use-sync-external-state';\n\nexport type Unit = 'px' | '%' | 'em' | 'rem' | 'vw' | 'vh';\n\nconst defaultUnits: Unit[] = [ 'px', '%', 'em', 'rem', 'vw', 'vh' ];\n\nconst defaultUnit = 'px';\nconst defaultSize = NaN;\n\nexport type SizeControlProps = {\n\tplaceholder?: string;\n\tstartIcon?: React.ReactNode;\n\tunits?: Unit[];\n};\n\nexport const SizeControl = createControl( ( { units = defaultUnits, placeholder, startIcon }: SizeControlProps ) => {\n\tconst { value, setValue } = useBoundProp( sizePropTypeUtil );\n\n\tconst [ state, setState ] = useSyncExternalState( {\n\t\texternal: value,\n\t\tsetExternal: setValue,\n\t\tpersistWhen: ( controlValue ) => !! controlValue?.size || controlValue?.size === 0,\n\t\tfallback: ( controlValue ) => ( { unit: controlValue?.unit || defaultUnit, size: defaultSize } ),\n\t} );\n\n\tconst handleUnitChange = ( unit: Unit ) => {\n\t\tsetState( ( prev ) => ( {\n\t\t\tsize: prev?.size ?? defaultSize,\n\t\t\tunit,\n\t\t} ) );\n\t};\n\n\tconst handleSizeChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tconst { value: size } = event.target;\n\n\t\tsetState( ( prev ) => ( {\n\t\t\t...prev,\n\t\t\tsize: size || size === '0' ? parseFloat( size ) : defaultSize,\n\t\t} ) );\n\t};\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextFieldInnerSelection\n\t\t\t\tendAdornment={\n\t\t\t\t\t<SelectionEndAdornment\n\t\t\t\t\t\toptions={ units }\n\t\t\t\t\t\tonClick={ handleUnitChange }\n\t\t\t\t\t\tvalue={ state?.unit ?? defaultUnit }\n\t\t\t\t\t/>\n\t\t\t\t}\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\tstartAdornment={ startIcon ?? <InputAdornment position=\"start\">{ startIcon }</InputAdornment> }\n\t\t\t\ttype=\"number\"\n\t\t\t\tvalue={ Number.isNaN( state?.size ) ? '' : state?.size }\n\t\t\t\tonChange={ handleSizeChange }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { forwardRef, useId } from 'react';\nimport { type PropValue } from '@elementor/editor-props';\nimport { bindMenu, bindTrigger, Button, InputAdornment, Menu, MenuItem, TextField, usePopupState } from '@elementor/ui';\n\nexport type TextFieldInnerSelectionProps = {\n\tplaceholder?: string;\n\ttype: string;\n\tvalue: PropValue;\n\tonChange: ( event: React.ChangeEvent< HTMLInputElement > ) => void;\n\tendAdornment: React.ReactNode;\n\tstartAdornment?: React.ReactNode;\n};\n\nexport const TextFieldInnerSelection = forwardRef(\n\t( { placeholder, type, value, onChange, endAdornment, startAdornment }: TextFieldInnerSelectionProps, ref ) => {\n\t\treturn (\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tfullWidth\n\t\t\t\ttype={ type }\n\t\t\t\tvalue={ value }\n\t\t\t\tonChange={ onChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t\tInputProps={ {\n\t\t\t\t\tendAdornment,\n\t\t\t\t\tstartAdornment,\n\t\t\t\t} }\n\t\t\t\tref={ ref }\n\t\t\t/>\n\t\t);\n\t}\n);\n\nexport type SelectionEndAdornmentProps< T extends string > = {\n\toptions: T[];\n\tonClick: ( value: T ) => void;\n\tvalue: T;\n};\n\nexport const SelectionEndAdornment = < T extends string >( {\n\toptions,\n\tonClick,\n\tvalue,\n}: SelectionEndAdornmentProps< T > ) => {\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: useId(),\n\t} );\n\n\tconst handleMenuItemClick = ( index: number ) => {\n\t\tonClick( options[ index ] );\n\t\tpopupState.close();\n\t};\n\n\treturn (\n\t\t<InputAdornment position=\"end\">\n\t\t\t<Button\n\t\t\t\tsize=\"small\"\n\t\t\t\tcolor=\"inherit\"\n\t\t\t\tsx={ { font: 'inherit', minWidth: 'initial' } }\n\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t>\n\t\t\t\t{ value.toUpperCase() }\n\t\t\t</Button>\n\n\t\t\t<Menu MenuListProps={ { dense: true } } { ...bindMenu( popupState ) }>\n\t\t\t\t{ options.map( ( option, index ) => (\n\t\t\t\t\t<MenuItem key={ option } onClick={ () => handleMenuItemClick( index ) }>\n\t\t\t\t\t\t{ option.toUpperCase() }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Menu>\n\t\t</InputAdornment>\n\t);\n};\n","import { useEffect, useState } from 'react';\n\ntype UseInternalStateOptions< TValue > = {\n\texternal: TValue | null;\n\tsetExternal: ( value: TValue | null ) => void;\n\tpersistWhen: ( value: TValue | null ) => boolean;\n\tfallback: ( value: TValue | null ) => TValue;\n};\n\nexport const useSyncExternalState = < TValue, >( {\n\texternal,\n\tsetExternal,\n\tpersistWhen,\n\tfallback,\n}: UseInternalStateOptions< TValue > ) => {\n\tfunction toExternal( internalValue: TValue | null ) {\n\t\tif ( persistWhen( internalValue ) ) {\n\t\t\treturn internalValue;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction toInternal( externalValue: TValue | null, internalValue: TValue | null ) {\n\t\tif ( ! externalValue ) {\n\t\t\treturn fallback( internalValue );\n\t\t}\n\n\t\treturn externalValue;\n\t}\n\n\tconst [ internal, setInternal ] = useState< TValue >( toInternal( external, null ) );\n\n\tuseEffect( () => {\n\t\tsetInternal( ( prevInternal ) => toInternal( external, prevInternal ) );\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [ external ] );\n\n\ttype SetterFunc = ( value: TValue ) => TValue;\n\n\tconst setInternalValue = ( setter: SetterFunc | TValue ) => {\n\t\tconst setterFn = ( typeof setter === 'function' ? setter : () => setter ) as SetterFunc;\n\t\tconst updated = setterFn( internal );\n\n\t\tsetInternal( updated );\n\t\tsetExternal( toExternal( updated ) );\n\t};\n\n\treturn [ internal, setInternalValue ] as const;\n};\n","import * as React from 'react';\nimport { type ColorPropValue, type PropValue, type SizePropValue, strokePropTypeUtil } from '@elementor/editor-props';\nimport { Grid, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\nimport { SizeControl, type Unit } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport type StrokeProps< T > = {\n\tbind: string;\n\tvalue: T;\n\tsetValue: ( v: T ) => void;\n\tlabel: string;\n\tchildren: React.ReactNode;\n};\nconst units: Unit[] = [ 'px', 'em', 'rem' ];\n\nexport const StrokeControl = createControl( () => {\n\tconst { value, setValue } = useBoundProp( strokePropTypeUtil );\n\n\tconst setStrokeWidth = ( newValue: SizePropValue ) => {\n\t\tconst updatedValue = {\n\t\t\t...value,\n\t\t\twidth: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst setStrokeColor = ( newValue: ColorPropValue ) => {\n\t\tconst updatedValue = {\n\t\t\t...value,\n\t\t\tcolor: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Control\n\t\t\t\tbind=\"width\"\n\t\t\t\tlabel={ __( 'Stroke Width', 'elementor' ) }\n\t\t\t\tvalue={ value?.width }\n\t\t\t\tsetValue={ setStrokeWidth }\n\t\t\t>\n\t\t\t\t<SizeControl units={ units } />\n\t\t\t</Control>\n\n\t\t\t<Control\n\t\t\t\tbind=\"color\"\n\t\t\t\tlabel={ __( 'Stroke Color', 'elementor' ) }\n\t\t\t\tvalue={ value?.color }\n\t\t\t\tsetValue={ setStrokeColor }\n\t\t\t>\n\t\t\t\t<ColorControl />\n\t\t\t</Control>\n\t\t</Stack>\n\t);\n} );\n\nconst Control = < T extends PropValue >( { bind, value, setValue, label, children }: StrokeProps< T > ) => (\n\t<BoundPropProvider bind={ bind } value={ value } setValue={ setValue as SetContextValue }>\n\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t{ children }\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n","import * as React from 'react';\nimport { colorPropTypeUtil } from '@elementor/editor-props';\nimport { UnstableColorField, type UnstableColorFieldProps } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const ColorControl = createControl(\n\t( props: Partial< Omit< UnstableColorFieldProps, 'value' | 'onChange' > > ) => {\n\t\tconst { value, setValue } = useBoundProp( colorPropTypeUtil );\n\n\t\tconst handleChange = ( selectedColor: string ) => {\n\t\t\tsetValue( selectedColor );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlActions>\n\t\t\t\t<UnstableColorField size=\"tiny\" { ...props } value={ value } onChange={ handleChange } fullWidth />\n\t\t\t</ControlActions>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport {\n\tboxShadowPropTypeUtil,\n\ttype BoxShadowPropValue,\n\ttype PropValue,\n\ttype ShadowPropValue,\n} from '@elementor/editor-props';\nimport { Grid, Stack, Typography, UnstableColorIndicator } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { Repeater } from '../components/repeater';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\nimport { SelectControl } from './select-control';\nimport { SizeControl } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport const BoxShadowRepeaterControl = createControl( () => {\n\tconst { value: boxShadowValues, setValue } = useBoundProp( boxShadowPropTypeUtil );\n\n\tconst setBoxShadow = ( newValue: BoxShadowPropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\tvalues={ boxShadowValues ?? [] }\n\t\t\tsetValues={ setBoxShadow }\n\t\t\tlabel={ __( 'Box shadow', 'elementor' ) }\n\t\t\titemSettings={ {\n\t\t\t\tIcon: ItemIcon,\n\t\t\t\tLabel: ItemLabel,\n\t\t\t\tContent: ItemContent,\n\t\t\t\tinitialValues: initialShadow,\n\t\t\t} }\n\t\t/>\n\t);\n} );\n\nconst ItemIcon = ( { value }: { value: ShadowPropValue } ) => (\n\t<UnstableColorIndicator size=\"inherit\" component=\"span\" value={ value.value.color.value } />\n);\n\nconst ItemContent = ( {\n\tvalue,\n\tsetValue,\n\tanchorEl,\n}: {\n\tvalue: ShadowPropValue;\n\tsetValue: ( newValue: ShadowPropValue ) => void;\n\tanchorEl: HTMLElement | null;\n} ) => {\n\tconst setShadow = ( newValue: ShadowPropValue[ 'value' ] ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'shadow',\n\t\t\tvalue: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"color\"\n\t\t\t\t\tvalue={ value.value.color }\n\t\t\t\t\tlabel={ __( 'Color', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'color' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, color: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<ColorControl\n\t\t\t\t\t\tslotProps={ {\n\t\t\t\t\t\t\tcolorPicker: {\n\t\t\t\t\t\t\t\tanchorEl,\n\t\t\t\t\t\t\t\tanchorOrigin: {\n\t\t\t\t\t\t\t\t\tvertical: 'top',\n\t\t\t\t\t\t\t\t\thorizontal: 'right',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\ttransformOrigin: {\n\t\t\t\t\t\t\t\t\tvertical: 'top',\n\t\t\t\t\t\t\t\t\thorizontal: -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/>\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"position\"\n\t\t\t\t\tvalue={ value.value.position }\n\t\t\t\t\tlabel={ __( 'Position', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'position' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, position: v || null } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SelectControl\n\t\t\t\t\t\toptions={ [\n\t\t\t\t\t\t\t{ label: __( 'Inset', 'elementor' ), value: 'inset' },\n\t\t\t\t\t\t\t{ label: __( 'Outset', 'elementor' ), value: '' },\n\t\t\t\t\t\t] }\n\t\t\t\t\t/>\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"hOffset\"\n\t\t\t\t\tlabel={ __( 'Horizontal', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.hOffset }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'hOffset' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, hOffset: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"vOffset\"\n\t\t\t\t\tlabel={ __( 'Vertical', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.vOffset }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'vOffset' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, vOffset: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t\t<Grid container gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"blur\"\n\t\t\t\t\tvalue={ value.value.blur }\n\t\t\t\t\tlabel={ __( 'Blur', 'elementor' ) }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'blur' ] ) => setShadow( { ...value.value, blur: v } ) }\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t\t<Control\n\t\t\t\t\tbind=\"spread\"\n\t\t\t\t\tlabel={ __( 'Spread', 'elementor' ) }\n\t\t\t\t\tvalue={ value.value.spread }\n\t\t\t\t\tsetValue={ ( v: ShadowPropValue[ 'value' ][ 'spread' ] ) =>\n\t\t\t\t\t\tsetShadow( { ...value.value, spread: v } )\n\t\t\t\t\t}\n\t\t\t\t>\n\t\t\t\t\t<SizeControl />\n\t\t\t\t</Control>\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n};\n\nconst Control = < T extends PropValue >( {\n\tvalue,\n\tsetValue,\n\tlabel,\n\tbind,\n\tchildren,\n}: {\n\tvalue: T;\n\tbind: string;\n\tlabel: string;\n\tchildren: React.ReactNode;\n\tsetValue: ( v: T ) => void;\n} ) => (\n\t<BoundPropProvider value={ value } setValue={ setValue as SetContextValue } bind={ bind }>\n\t\t<Grid item xs={ 6 }>\n\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t{ label }\n\t\t\t\t\t</Typography>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t{ children }\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n\nconst ItemLabel = ( { value }: { value: ShadowPropValue } ) => {\n\tconst { position, hOffset, vOffset, blur, spread } = value.value;\n\n\tconst { size: blurSize = '', unit: blurUnit = '' } = blur?.value || {};\n\tconst { size: spreadSize = '', unit: spreadUnit = '' } = spread?.value || {};\n\tconst { size: hOffsetSize = 'unset', unit: hOffsetUnit = '' } = hOffset?.value || {};\n\tconst { size: vOffsetSize = 'unset', unit: vOffsetUnit = '' } = vOffset?.value || {};\n\n\tconst sizes = [\n\t\thOffsetSize + hOffsetUnit,\n\t\tvOffsetSize + vOffsetUnit,\n\t\tblurSize + blurUnit,\n\t\tspreadSize + spreadUnit,\n\t].join( ' ' );\n\n\treturn (\n\t\t<span style={ { textTransform: 'capitalize' } }>\n\t\t\t{ position ?? 'outset' }: { sizes }\n\t\t</span>\n\t);\n};\n\nconst initialShadow: ShadowPropValue = {\n\t$$type: 'shadow',\n\tvalue: {\n\t\thOffset: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tvOffset: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tblur: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 10 },\n\t\t},\n\t\tspread: {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: 'px', size: 0 },\n\t\t},\n\t\tcolor: {\n\t\t\t$$type: 'color',\n\t\t\tvalue: 'rgba(0, 0, 0, 1)',\n\t\t},\n\t\tposition: null,\n\t},\n};\n","import * as React from 'react';\nimport { useId, useRef, useState } from 'react';\nimport { CopyIcon, EyeIcon, EyeOffIcon, PlusIcon, XIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tPopover,\n\tStack,\n\tTypography,\n\tUnstableTag,\n\ttype UnstableTagProps,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\ntype AnchorEl = HTMLElement | null;\n\ntype Item< T > = {\n\tdisabled?: boolean;\n} & T;\n\nexport type RepeaterProps< T > = {\n\tlabel: string;\n\tvalues?: T[];\n\tsetValues: ( newValue: T[] ) => void;\n\titemSettings: {\n\t\tinitialValues: T;\n\t\tLabel: React.ComponentType< { value: T } >;\n\t\tIcon: React.ComponentType< { value: T } >;\n\t\tContent: React.ComponentType< {\n\t\t\tvalue: T;\n\t\t\tsetValue: ( newValue: T ) => void;\n\t\t\tanchorEl: AnchorEl;\n\t\t} >;\n\t};\n};\n\nexport const Repeater = < T, >( {\n\tlabel,\n\titemSettings,\n\tvalues: repeaterValues = [],\n\tsetValues: setRepeaterValues,\n}: RepeaterProps< Item< T > > ) => {\n\tconst addRepeaterItem = () => {\n\t\tconst newItem = structuredClone( itemSettings.initialValues );\n\n\t\tsetRepeaterValues( [ ...repeaterValues, newItem ] );\n\t};\n\n\tconst duplicateRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues( [\n\t\t\t...repeaterValues.slice( 0, index ),\n\t\t\tstructuredClone( repeaterValues[ index ] ),\n\t\t\t...repeaterValues.slice( index ),\n\t\t] );\n\t};\n\n\tconst removeRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues( repeaterValues.filter( ( _, i ) => i !== index ) );\n\t};\n\n\tconst toggleDisableRepeaterItem = ( index: number ) => {\n\t\tsetRepeaterValues(\n\t\t\trepeaterValues.map( ( value, i ) => {\n\t\t\t\tif ( i === index ) {\n\t\t\t\t\tconst { disabled, ...rest } = value;\n\n\t\t\t\t\t// If the items should not be disabled, remove the disabled property.\n\t\t\t\t\treturn { ...rest, ...( disabled ? {} : { disabled: true } ) } as Item< T >;\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t} )\n\t\t);\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\" sx={ { pb: 1 } }>\n\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t\t<IconButton size={ SIZE } onClick={ addRepeaterItem } aria-label={ __( 'Add item', 'elementor' ) }>\n\t\t\t\t\t<PlusIcon fontSize={ SIZE } />\n\t\t\t\t</IconButton>\n\t\t\t</Stack>\n\t\t\t<Stack gap={ 1 }>\n\t\t\t\t{ repeaterValues.map( ( value, index ) => (\n\t\t\t\t\t<RepeaterItem\n\t\t\t\t\t\tkey={ index }\n\t\t\t\t\t\tdisabled={ value.disabled }\n\t\t\t\t\t\tlabel={ <itemSettings.Label value={ value } /> }\n\t\t\t\t\t\tstartIcon={ <itemSettings.Icon value={ value } /> }\n\t\t\t\t\t\tremoveItem={ () => removeRepeaterItem( index ) }\n\t\t\t\t\t\tduplicateItem={ () => duplicateRepeaterItem( index ) }\n\t\t\t\t\t\ttoggleDisableItem={ () => toggleDisableRepeaterItem( index ) }\n\t\t\t\t\t>\n\t\t\t\t\t\t{ ( props ) => (\n\t\t\t\t\t\t\t<itemSettings.Content\n\t\t\t\t\t\t\t\t{ ...props }\n\t\t\t\t\t\t\t\tvalue={ value }\n\t\t\t\t\t\t\t\tsetValue={ ( newValue ) =>\n\t\t\t\t\t\t\t\t\tsetRepeaterValues(\n\t\t\t\t\t\t\t\t\t\trepeaterValues.map( ( item, i ) => ( i === index ? newValue : item ) )\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</RepeaterItem>\n\t\t\t\t) ) }\n\t\t\t</Stack>\n\t\t</Stack>\n\t);\n};\n\ntype RepeaterItemProps = {\n\tlabel: React.ReactNode;\n\tdisabled?: boolean;\n\tstartIcon: UnstableTagProps[ 'startIcon' ];\n\tremoveItem: () => void;\n\tduplicateItem: () => void;\n\ttoggleDisableItem: () => void;\n\tchildren: ( { anchorEl }: { anchorEl: AnchorEl } ) => React.ReactNode;\n};\n\nconst RepeaterItem = ( {\n\tlabel,\n\tdisabled,\n\tstartIcon,\n\tchildren,\n\tremoveItem,\n\tduplicateItem,\n\ttoggleDisableItem,\n}: RepeaterItemProps ) => {\n\tconst popupId = useId();\n\tconst controlRef = useRef< HTMLElement >( null );\n\tconst [ anchorEl, setAnchorEl ] = useState< AnchorEl >( null );\n\n\tconst popoverState = usePopupState( { popupId, variant: 'popover' } );\n\n\tconst popoverProps = bindPopover( popoverState );\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tlabel={ label }\n\t\t\t\tshowActionsOnHover\n\t\t\t\tref={ controlRef }\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\taria-label={ __( 'Open item', 'elementor' ) }\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tstartIcon={ startIcon }\n\t\t\t\tactions={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ duplicateItem }\n\t\t\t\t\t\t\taria-label={ __( 'Duplicate item', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CopyIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ toggleDisableItem }\n\t\t\t\t\t\t\taria-label={\n\t\t\t\t\t\t\t\tdisabled ? __( 'Enable item', 'elementor' ) : __( 'Disable item', 'elementor' )\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{ disabled ? <EyeOffIcon fontSize={ SIZE } /> : <EyeIcon fontSize={ SIZE } /> }\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tonClick={ removeItem }\n\t\t\t\t\t\t\taria-label={ __( 'Remove item', 'elementor' ) }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<XIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</>\n\t\t\t\t}\n\t\t\t/>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpaper: {\n\t\t\t\t\t\tref: setAnchorEl,\n\t\t\t\t\t\tsx: { mt: 0.5, p: 1, pt: 1, width: controlRef.current?.getBoundingClientRect().width },\n\t\t\t\t\t},\n\t\t\t\t} }\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...popoverProps }\n\t\t\t>\n\t\t\t\t<Box p={ 0.5 }>{ children( { anchorEl } ) }</Box>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n","import * as React from 'react';\nimport {\n\tbackgroundImagePropTypeUtil,\n\ttype backgroundImageTypePropValue,\n\ttype ColorGradientPropValue,\n\ttype PropValue,\n} from '@elementor/editor-props';\nimport { Grid, Stack, Typography, UnstableColorIndicator } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { Repeater } from '../components/repeater';\nimport { createControl } from '../create-control';\nimport { ColorControl } from './color-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\nexport const BackgroundOverlayRepeaterControl = createControl( () => {\n\tconst { value: colorOverlayValues, setValue } = useBoundProp( backgroundImagePropTypeUtil );\n\n\tconst setColorOverlay = ( newValue: backgroundImageTypePropValue[ 'value' ] ) => {\n\t\tsetValue( newValue );\n\t};\n\n\treturn (\n\t\t<Repeater\n\t\t\tvalues={ colorOverlayValues }\n\t\t\tsetValues={ setColorOverlay }\n\t\t\tlabel={ __( 'Overlay', 'elementor' ) }\n\t\t\titemSettings={ {\n\t\t\t\tIcon: ItemIcon,\n\t\t\t\tLabel: ItemLabel,\n\t\t\t\tContent: ItemContent,\n\t\t\t\tinitialValues: initialGradient,\n\t\t\t} }\n\t\t/>\n\t);\n} );\n\nconst ItemIcon = ( { value }: { value: ColorGradientPropValue } ) => (\n\t<UnstableColorIndicator size=\"inherit\" component=\"span\" value={ value.value.color.value } />\n);\n\nconst ItemContent = ( {\n\tvalue,\n\tsetValue,\n}: {\n\tvalue: ColorGradientPropValue;\n\tsetValue: ( newValue: ColorGradientPropValue ) => void;\n} ) => {\n\tconst setColor = ( newValue: ColorGradientPropValue[ 'value' ] ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'background-overlay',\n\t\t\tvalue: newValue,\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Control\n\t\t\t\tbind=\"color\"\n\t\t\t\tvalue={ value.value.color }\n\t\t\t\tlabel={ __( 'Color', 'elementor' ) }\n\t\t\t\tsetValue={ ( v: ColorGradientPropValue[ 'value' ][ 'color' ] ) =>\n\t\t\t\t\tsetColor( { ...value.value, color: v } )\n\t\t\t\t}\n\t\t\t>\n\t\t\t\t<ColorControl />\n\t\t\t</Control>\n\t\t</Stack>\n\t);\n};\n\nconst Control = < T extends PropValue >( {\n\tvalue,\n\tsetValue,\n\tlabel,\n\tbind,\n\tchildren,\n}: {\n\tvalue: T;\n\tbind: string;\n\tlabel: string;\n\tchildren: React.ReactNode;\n\tsetValue: ( v: T ) => void;\n} ) => (\n\t<BoundPropProvider value={ value } setValue={ setValue as SetContextValue } bind={ bind }>\n\t\t<Grid container spacing={ 1 } alignItems=\"center\">\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t<Typography component=\"label\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t{ label }\n\t\t\t\t</Typography>\n\t\t\t</Grid>\n\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t{ children }\n\t\t\t</Grid>\n\t\t</Grid>\n\t</BoundPropProvider>\n);\n\nconst ItemLabel = ( { value }: { value: ColorGradientPropValue } ) => {\n\tconst color = value.value.color.value;\n\n\treturn <span>{ color }</span>;\n};\n\nconst initialGradient: ColorGradientPropValue = {\n\t$$type: 'background-overlay',\n\tvalue: {\n\t\tcolor: {\n\t\t\t$$type: 'color',\n\t\t\tvalue: 'rgba(0, 0, 0, 0.2)',\n\t\t},\n\t},\n};\n","import * as React from 'react';\nimport { type PropValue, stringPropTypeUtil, type StringPropValue } from '@elementor/editor-props';\nimport { type ToggleButtonProps } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { ControlToggleButtonGroup, type ToggleButtonGroupItem } from '../components/control-toggle-button-group';\nimport { createControl } from '../create-control';\n\ntype ToggleControlProps< T extends PropValue > = {\n\toptions: ToggleButtonGroupItem< T >[];\n\tfullWidth?: boolean;\n\tsize?: ToggleButtonProps[ 'size' ];\n};\n\nexport const ToggleControl = createControl(\n\t( { options, fullWidth = false, size = 'tiny' }: ToggleControlProps< StringPropValue[ 'value' ] > ) => {\n\t\tconst { value, setValue } = useBoundProp( stringPropTypeUtil );\n\n\t\tconst handleToggle = ( option: StringPropValue[ 'value' ] | null ) => {\n\t\t\tsetValue( option );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlToggleButtonGroup\n\t\t\t\titems={ options }\n\t\t\t\tvalue={ value ?? null }\n\t\t\t\tonChange={ handleToggle }\n\t\t\t\texclusive={ true }\n\t\t\t\tfullWidth={ fullWidth }\n\t\t\t\tsize={ size }\n\t\t\t/>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport {\n\ttype StackProps,\n\tstyled,\n\tToggleButton,\n\tToggleButtonGroup,\n\ttype ToggleButtonProps,\n\tTooltip,\n\tuseTheme,\n} from '@elementor/ui';\n\ntype RenderContentProps = { size: ToggleButtonProps[ 'size' ] };\n\nexport type ToggleButtonGroupItem< TValue > = {\n\tvalue: TValue;\n\tlabel: string;\n\trenderContent: ( { size }: RenderContentProps ) => React.ReactNode;\n\tshowTooltip?: boolean;\n};\n\nconst StyledToggleButtonGroup = styled( ToggleButtonGroup )`\n\t${ ( { justify } ) => `justify-content: ${ justify };` }\n`;\n\ntype ExclusiveValue< TValue > = TValue;\ntype NonExclusiveValue< TValue > = TValue[];\n\ntype Props< TValue > = {\n\tjustify?: StackProps[ 'justifyContent' ];\n\tsize?: ToggleButtonProps[ 'size' ];\n\titems: ToggleButtonGroupItem< TValue | null >[];\n\tfullWidth?: boolean;\n} & (\n\t| {\n\t\t\texclusive?: false;\n\t\t\tvalue: NonExclusiveValue< TValue >;\n\t\t\tonChange: ( value: NonExclusiveValue< TValue > ) => void;\n\t }\n\t| {\n\t\t\texclusive: true;\n\t\t\tvalue: ExclusiveValue< TValue >;\n\t\t\tonChange: ( value: ExclusiveValue< TValue > ) => void;\n\t }\n);\n\nexport const ControlToggleButtonGroup = < TValue, >( {\n\tjustify = 'end',\n\tsize = 'tiny',\n\tvalue,\n\tonChange,\n\titems,\n\texclusive = false,\n\tfullWidth = false,\n}: Props< TValue > ) => {\n\tconst isRtl = 'rtl' === useTheme().direction;\n\n\tconst handleChange = (\n\t\t_: React.MouseEvent< HTMLElement >,\n\t\tnewValue: typeof exclusive extends true ? ExclusiveValue< TValue > : NonExclusiveValue< TValue >\n\t) => {\n\t\tonChange( newValue as never );\n\t};\n\n\treturn (\n\t\t<StyledToggleButtonGroup\n\t\t\tjustify={ justify }\n\t\t\tvalue={ value }\n\t\t\tonChange={ handleChange }\n\t\t\texclusive={ exclusive }\n\t\t\tsx={ {\n\t\t\t\tdirection: isRtl ? 'rtl /* @noflip */' : 'ltr /* @noflip */',\n\t\t\t} }\n\t\t>\n\t\t\t{ items.map( ( { label, value: buttonValue, renderContent: Content, showTooltip } ) =>\n\t\t\t\tshowTooltip ? (\n\t\t\t\t\t<Tooltip key={ buttonValue } title={ label } disableFocusListener={ true } placement=\"top\">\n\t\t\t\t\t\t<ToggleButton value={ buttonValue } aria-label={ label } size={ size } fullWidth={ fullWidth }>\n\t\t\t\t\t\t\t<Content size={ size } />\n\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t</Tooltip>\n\t\t\t\t) : (\n\t\t\t\t\t<ToggleButton\n\t\t\t\t\t\tkey={ buttonValue }\n\t\t\t\t\t\tvalue={ buttonValue }\n\t\t\t\t\t\taria-label={ label }\n\t\t\t\t\t\tsize={ size }\n\t\t\t\t\t\tfullWidth={ fullWidth }\n\t\t\t\t\t>\n\t\t\t\t\t\t<Content size={ size } />\n\t\t\t\t\t</ToggleButton>\n\t\t\t\t)\n\t\t\t) }\n\t\t</StyledToggleButtonGroup>\n\t);\n};\n","import * as React from 'react';\nimport { numberPropTypeUtil } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nconst isEmptyOrNaN = ( value?: string | number ) =>\n\tvalue === null || value === undefined || value === '' || Number.isNaN( Number( value ) );\n\nexport const NumberControl = createControl(\n\t( {\n\t\tplaceholder,\n\t\tmax = Number.MAX_VALUE,\n\t\tmin = -Number.MAX_VALUE,\n\t\tstep = 1,\n\t\tshouldForceInt = false,\n\t}: {\n\t\tplaceholder?: string;\n\t\tmax?: number;\n\t\tmin?: number;\n\t\tstep?: number;\n\t\tshouldForceInt?: boolean;\n\t} ) => {\n\t\tconst { value, setValue } = useBoundProp( numberPropTypeUtil );\n\n\t\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\t\tconst eventValue: string = event.target.value;\n\n\t\t\tif ( isEmptyOrNaN( eventValue ) ) {\n\t\t\t\tsetValue( null );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst formattedValue = shouldForceInt ? +parseInt( eventValue ) : Number( eventValue );\n\n\t\t\tsetValue( Math.min( Math.max( formattedValue, min ), max ) );\n\t\t};\n\n\t\treturn (\n\t\t\t<ControlActions>\n\t\t\t\t<TextField\n\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\ttype=\"number\"\n\t\t\t\t\tfullWidth\n\t\t\t\t\tvalue={ isEmptyOrNaN( value ) ? '' : value }\n\t\t\t\t\tonChange={ handleChange }\n\t\t\t\t\tplaceholder={ placeholder }\n\t\t\t\t\tinputProps={ { step } }\n\t\t\t\t/>\n\t\t\t</ControlActions>\n\t\t);\n\t}\n);\n","import * as React from 'react';\nimport { type ReactNode, useId, useRef } from 'react';\nimport {\n\ttype PropKey,\n\ttype PropTypeUtil,\n\ttype PropValue,\n\tsizePropTypeUtil,\n\ttype SizePropValue,\n} from '@elementor/editor-props';\nimport { bindPopover, bindToggle, Grid, Popover, Stack, ToggleButton, usePopupState } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { SizeControl } from './size-control';\n\ntype SetContextValue = ( v: PropValue ) => void;\n\ntype MultiSizePropValue = Record< PropKey, SizePropValue >;\n\ntype Item = {\n\ticon: ReactNode;\n\tlabel: string;\n\tbind: PropKey;\n};\n\nexport type EqualUnequalItems = [ Item, Item, Item, Item ];\n\ntype Props< TMultiPropType extends string, TPropValue extends MultiSizePropValue > = {\n\tlabel: string;\n\ticon: ReactNode;\n\titems: EqualUnequalItems;\n\tmultiSizePropTypeUtil: PropTypeUtil< TMultiPropType, TPropValue >;\n};\n\nconst isEqualSizes = ( values: SizePropValue[], items: EqualUnequalItems ) => {\n\tif ( values.length !== items.length ) {\n\t\treturn false;\n\t}\n\n\tconst [ firstValue, ...restValues ] = values;\n\n\treturn restValues.every(\n\t\t( value ) => value.value?.size === firstValue.value?.size && value.value?.unit === firstValue.value?.unit\n\t);\n};\n\nexport function EqualUnequalSizesControl< TMultiPropType extends string, TPropValue extends MultiSizePropValue >( {\n\tlabel,\n\ticon,\n\titems,\n\tmultiSizePropTypeUtil,\n}: Props< TMultiPropType, TPropValue > ) {\n\tconst popupId = useId();\n\tconst controlRef = useRef< HTMLElement >( null );\n\tconst popupState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst { value: sizeValue, setValue: setSizeValue } = useBoundProp( sizePropTypeUtil );\n\tconst { value: multiSizeValue, setValue: setMultiSizeValue } = useBoundProp( multiSizePropTypeUtil );\n\n\tconst splitEqualValue = () => {\n\t\treturn items.reduce( ( acc, item ) => ( { ...acc, [ item.bind ]: sizePropTypeUtil.create( sizeValue ) } ), {} );\n\t};\n\n\tconst setNestedProp = ( item: Item, newValue: SizePropValue ) => {\n\t\tconst newMappedValues = {\n\t\t\t...( multiSizeValue ?? splitEqualValue() ),\n\t\t\t[ item.bind ]: newValue,\n\t\t};\n\n\t\tconst isEqual = isEqualSizes( Object.values( newMappedValues ), items );\n\n\t\tif ( isEqual ) {\n\t\t\treturn setSizeValue( newValue?.value );\n\t\t}\n\n\t\tsetMultiSizeValue( newMappedValues );\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\" ref={ controlRef }>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t\t<EqualSizeControl\n\t\t\t\t\t\titems={ items }\n\t\t\t\t\t\tvalue={ sizeValue }\n\t\t\t\t\t\tmultiSizeValue={ multiSizeValue }\n\t\t\t\t\t\tsetValue={ setSizeValue }\n\t\t\t\t\t\ticonButton={\n\t\t\t\t\t\t\t<ToggleButton\n\t\t\t\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\t\t\t\t{ ...bindToggle( popupState ) }\n\t\t\t\t\t\t\t\tselected={ popupState.isOpen }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ icon }\n\t\t\t\t\t\t\t</ToggleButton>\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ {\n\t\t\t\t\tvertical: 'bottom',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\ttransformOrigin={ {\n\t\t\t\t\tvertical: 'top',\n\t\t\t\t\thorizontal: 'right',\n\t\t\t\t} }\n\t\t\t\t{ ...bindPopover( popupState ) }\n\t\t\t\tslotProps={ {\n\t\t\t\t\tpaper: { sx: { mt: 0.5, p: 2, pt: 1, width: controlRef.current?.getBoundingClientRect().width } },\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 0 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 1 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid container gap={ 2 } alignItems=\"center\" flexWrap=\"nowrap\">\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 3 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<MultiSizeValueControl\n\t\t\t\t\t\t\titem={ items[ 2 ] }\n\t\t\t\t\t\t\tvalue={ multiSizeValue }\n\t\t\t\t\t\t\tsetNestedProp={ setNestedProp }\n\t\t\t\t\t\t\tsplitEqualValue={ splitEqualValue }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</>\n\t);\n}\n\nconst MultiSizeValueControl = < TPropValue extends MultiSizePropValue >( {\n\titem,\n\tvalue,\n\tsetNestedProp,\n\tsplitEqualValue,\n}: {\n\titem: Item;\n\tvalue: TPropValue | undefined;\n\tsetNestedProp: ( item: Item, newValue: SizePropValue ) => void;\n\tsplitEqualValue: () => TPropValue;\n} ) => {\n\tconst handleChange = ( val: SizePropValue ) => setNestedProp( item, val );\n\n\tconst getMultiSizeValues = () => {\n\t\tif ( value ) {\n\t\t\treturn value?.[ item.bind ] ?? null;\n\t\t}\n\n\t\treturn splitEqualValue()?.[ item.bind ] ?? null;\n\t};\n\n\treturn (\n\t\t<BoundPropProvider bind={ '' } setValue={ handleChange as SetContextValue } value={ getMultiSizeValues() }>\n\t\t\t<Grid item xs={ 6 }>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ item.label }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<SizeControl startIcon={ item.icon } />\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Grid>\n\t\t</BoundPropProvider>\n\t);\n};\n\nconst EqualSizeControl = ( {\n\tvalue,\n\titems,\n\tsetValue,\n\ticonButton,\n\tmultiSizeValue,\n}: {\n\tvalue: SizePropValue[ 'value' ] | null;\n\titems: EqualUnequalItems;\n\tsetValue: ( newValue: SizePropValue[ 'value' ] ) => void;\n\ticonButton: ReactNode;\n\tmultiSizeValue: PropValue;\n} ) => {\n\tconst handleChange = ( newValue: SizePropValue ) => {\n\t\tsetValue( newValue.value );\n\t};\n\n\tconst getDisplayValue = () => {\n\t\tif ( value ) {\n\t\t\treturn sizePropTypeUtil.create( value );\n\t\t}\n\n\t\tconst multiValues = Object.values( multiSizeValue ?? {} ) as SizePropValue[];\n\n\t\tif ( isEqualSizes( multiValues, items ) ) {\n\t\t\treturn sizePropTypeUtil.create( multiValues[ 0 ].value );\n\t\t}\n\t};\n\n\treturn (\n\t\t<BoundPropProvider bind={ '' } setValue={ handleChange as SetContextValue } value={ getDisplayValue() ?? null }>\n\t\t\t<Stack direction=\"row\" alignItems=\"center\" gap={ 1 }>\n\t\t\t\t<SizeControl placeholder={ __( 'MIXED', 'elementor' ) } />\n\t\t\t\t{ iconButton }\n\t\t\t</Stack>\n\t\t</BoundPropProvider>\n\t);\n};\n","import * as React from 'react';\nimport { linkedDimensionsPropTypeUtil, type PropValue } from '@elementor/editor-props';\nimport { DetachIcon, LinkIcon, SideBottomIcon, SideLeftIcon, SideRightIcon, SideTopIcon } from '@elementor/icons';\nimport { Grid, Stack, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { SizeControl } from './size-control';\n\nexport type Position = 'top' | 'right' | 'bottom' | 'left';\n\nexport const LinkedDimensionsControl = createControl( ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useBoundProp( linkedDimensionsPropTypeUtil );\n\tconst { top, right, bottom, left, isLinked = true } = value || {};\n\n\tconst setLinkedValue = ( position: Position, newValue: PropValue ) => {\n\t\tconst updatedValue = {\n\t\t\tisLinked,\n\t\t\ttop: isLinked ? newValue : top,\n\t\t\tright: isLinked ? newValue : right,\n\t\t\tbottom: isLinked ? newValue : bottom,\n\t\t\tleft: isLinked ? newValue : left,\n\t\t\t[ position ]: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst toggleLinked = () => {\n\t\tconst updatedValue = {\n\t\t\tisLinked: ! isLinked,\n\t\t\ttop,\n\t\t\tright: ! isLinked ? top : right,\n\t\t\tbottom: ! isLinked ? top : bottom,\n\t\t\tleft: ! isLinked ? top : left,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t<ToggleButton\n\t\t\t\t\taria-label={ __( 'Link Inputs', 'elementor' ) }\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\tselected={ isLinked }\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\tonChange={ toggleLinked }\n\t\t\t\t>\n\t\t\t\t\t<LinkedIcon fontSize={ 'tiny' } />\n\t\t\t\t</ToggleButton>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Top', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'top' }\n\t\t\t\t\t\t\tvalue={ top }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideTopIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Right', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'right' }\n\t\t\t\t\t\t\tvalue={ right }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideRightIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Bottom', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'bottom' }\n\t\t\t\t\t\t\tvalue={ bottom }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideBottomIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Left', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<Control\n\t\t\t\t\t\t\tbind={ 'left' }\n\t\t\t\t\t\t\tvalue={ left }\n\t\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\t\tstartIcon={ <SideLeftIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t</>\n\t);\n} );\n\nconst Control = ( {\n\tbind,\n\tstartIcon,\n\tvalue,\n\tsetValue,\n}: {\n\tbind: Position;\n\tvalue: PropValue;\n\tstartIcon: React.ReactNode;\n\tsetValue: ( bind: Position, newValue: PropValue ) => void;\n} ) => (\n\t<BoundPropProvider setValue={ ( newValue ) => setValue( bind, newValue ) } value={ value } bind={ bind }>\n\t\t<SizeControl startIcon={ startIcon } />\n\t</BoundPropProvider>\n);\n","import { Fragment, useId, useState } from 'react';\nimport * as React from 'react';\nimport { stringPropTypeUtil } from '@elementor/editor-props';\nimport { ChevronDownIcon, EditIcon, PhotoIcon, SearchIcon, XIcon } from '@elementor/icons';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tDivider,\n\tIconButton,\n\tInputAdornment,\n\tLink,\n\tListSubheader,\n\tMenuItem,\n\tMenuList,\n\tPopover,\n\tStack,\n\tTextField,\n\tTypography,\n\tUnstableTag,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport { createControl } from '../create-control';\nimport { useFilteredFontFamilies } from '../hooks/use-filtered-font-families';\n\nconst SIZE = 'tiny';\n\nexport const FontFamilyControl = createControl( ( { fontFamilies } ) => {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\tconst { value: fontFamily, setValue: setFontFamily } = useBoundProp( stringPropTypeUtil );\n\n\tconst popupId = useId();\n\tconst popoverState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst filteredFontFamilies = useFilteredFontFamilies( fontFamilies, searchValue );\n\n\tif ( ! filteredFontFamilies ) {\n\t\treturn null;\n\t}\n\n\tconst handleSearch = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetSearchValue( event.target.value );\n\t};\n\n\tconst handleClose = () => {\n\t\tsetSearchValue( '' );\n\n\t\tpopoverState.close();\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableTag\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\tlabel={ fontFamily }\n\t\t\t\tendIcon={ <ChevronDownIcon fontSize=\"tiny\" /> }\n\t\t\t\t{ ...bindTrigger( popoverState ) }\n\t\t\t\tfullWidth\n\t\t\t/>\n\n\t\t\t<Popover\n\t\t\t\tdisablePortal\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...bindPopover( popoverState ) }\n\t\t\t\tonClose={ handleClose }\n\t\t\t>\n\t\t\t\t<Stack>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" pl={ 1.5 } pr={ 0.5 } py={ 1.5 }>\n\t\t\t\t\t\t<EditIcon fontSize={ SIZE } sx={ { mr: 0.5 } } />\n\t\t\t\t\t\t<Typography variant=\"subtitle2\">{ __( 'Font Family', 'elementor' ) }</Typography>\n\t\t\t\t\t\t<IconButton size={ SIZE } sx={ { ml: 'auto' } } onClick={ handleClose }>\n\t\t\t\t\t\t\t<XIcon fontSize={ SIZE } />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</Stack>\n\n\t\t\t\t\t<Box px={ 1.5 } pb={ 1 }>\n\t\t\t\t\t\t<TextField\n\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\t\t\tplaceholder={ __( 'Search', 'elementor' ) }\n\t\t\t\t\t\t\tonChange={ handleSearch }\n\t\t\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t\t\t<SearchIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t\t\t</InputAdornment>\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</Box>\n\t\t\t\t\t<Divider />\n\t\t\t\t\t<Box sx={ { overflowY: 'auto', height: 260, width: 220 } }>\n\t\t\t\t\t\t{ filteredFontFamilies.length > 0 ? (\n\t\t\t\t\t\t\t<MenuList role=\"listbox\" tabIndex={ 0 }>\n\t\t\t\t\t\t\t\t{ filteredFontFamilies.map( ( [ category, items ], index ) => (\n\t\t\t\t\t\t\t\t\t<Fragment key={ index }>\n\t\t\t\t\t\t\t\t\t\t<ListSubheader sx={ { typography: 'caption', color: 'text.tertiary' } }>\n\t\t\t\t\t\t\t\t\t\t\t{ category }\n\t\t\t\t\t\t\t\t\t\t</ListSubheader>\n\t\t\t\t\t\t\t\t\t\t{ items.map( ( item ) => {\n\t\t\t\t\t\t\t\t\t\t\tconst isSelected = item === fontFamily;\n\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ item }\n\t\t\t\t\t\t\t\t\t\t\t\t\tselected={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line jsx-a11y/no-autofocus\n\t\t\t\t\t\t\t\t\t\t\t\t\tautoFocus={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsetFontFamily( item );\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandleClose();\n\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ { typography: 'caption' } }\n\t\t\t\t\t\t\t\t\t\t\t\t\tstyle={ { fontFamily: item } }\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ item }\n\t\t\t\t\t\t\t\t\t\t\t\t</MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t\t\t\t) ) }\n\t\t\t\t\t\t\t</MenuList>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Stack alignItems=\"center\" p={ 2.5 } gap={ 1.5 }>\n\t\t\t\t\t\t\t\t<PhotoIcon fontSize=\"large\" />\n\t\t\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t\t\t&ldquo;{ searchValue }&rdquo;.\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\t\t\tcolor=\"secondary\"\n\t\t\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\t\t\tcomponent=\"button\"\n\t\t\t\t\t\t\t\t\t\tonClick={ () => setSearchValue( '' ) }\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Clear the filters', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t\t\t\t{ __( 'and try again.', 'elementor' ) }\n\t\t\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t) }\n\t\t\t\t\t</Box>\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</>\n\t);\n} );\n","import { __ } from '@wordpress/i18n';\n\nexport type SupportedFonts = 'system' | 'googlefonts' | 'customfonts';\n\nconst supportedCategories: Record< SupportedFonts, string > = {\n\tsystem: __( 'System', 'elementor' ),\n\tgooglefonts: __( 'Google Fonts', 'elementor' ),\n\tcustomfonts: __( 'Custom Fonts', 'elementor' ),\n};\n\nexport const useFilteredFontFamilies = ( fontFamilies: Record< string, SupportedFonts >, searchValue: string ) => {\n\tconst filteredFontFamilies = Object.entries( fontFamilies ).reduce< Map< string, string[] > >(\n\t\t( acc, [ font, category ] ) => {\n\t\t\tconst isMatch = font.toLowerCase().includes( searchValue.trim().toLowerCase() );\n\n\t\t\tif ( ! isMatch ) {\n\t\t\t\treturn acc;\n\t\t\t}\n\n\t\t\tconst categoryLabel = supportedCategories[ category as SupportedFonts ];\n\n\t\t\tif ( categoryLabel ) {\n\t\t\t\tconst existingCategory = acc.get( categoryLabel );\n\n\t\t\t\tif ( existingCategory ) {\n\t\t\t\t\texistingCategory.push( font );\n\t\t\t\t} else {\n\t\t\t\t\tacc.set( categoryLabel, [ font ] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn acc;\n\t\t},\n\t\tnew Map()\n\t);\n\n\treturn [ ...filteredFontFamilies ];\n};\n","import * as React from 'react';\nimport { type UrlPropValue } from '@elementor/editor-props';\nimport { TextField } from '@elementor/ui';\n\nimport { useBoundProp } from '../bound-prop-context';\nimport ControlActions from '../control-actions/control-actions';\nimport { createControl } from '../create-control';\n\nexport const UrlControl = createControl( ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useBoundProp< UrlPropValue >();\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) =>\n\t\tsetValue( {\n\t\t\t$$type: 'url',\n\t\t\tvalue: event.target.value,\n\t\t} );\n\n\treturn (\n\t\t<ControlActions>\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tfullWidth\n\t\t\t\tvalue={ value?.value }\n\t\t\t\tonChange={ handleChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t</ControlActions>\n\t);\n} );\n","import * as React from 'react';\nimport { type LinkPropValue, type UrlPropValue } from '@elementor/editor-props';\nimport { MinusIcon, PlusIcon } from '@elementor/icons';\nimport { Collapse, Divider, Grid, IconButton, Stack, Switch } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { UrlControl } from './url-control';\n\nconst SIZE = 'tiny';\n\nconst DEFAULT_LINK_CONTROL_VALUE: LinkPropValue = {\n\t$$type: 'link',\n\tvalue: {\n\t\tenabled: false,\n\t\thref: {\n\t\t\t$$type: 'url',\n\t\t\tvalue: '',\n\t\t},\n\t\tisTargetBlank: false,\n\t},\n};\n\nexport const LinkControl = createControl( () => {\n\tconst { value = DEFAULT_LINK_CONTROL_VALUE, setValue } = useBoundProp< LinkPropValue >();\n\tconst { enabled, href, isTargetBlank } = value?.value || {};\n\n\tconst handleOnChange = < T extends keyof LinkPropValue[ 'value' ] >(\n\t\tkey: T,\n\t\tnewValue: LinkPropValue[ 'value' ][ T ]\n\t) => {\n\t\tsetValue( {\n\t\t\t$$type: 'link',\n\t\t\tvalue: {\n\t\t\t\t...( value?.value ?? DEFAULT_LINK_CONTROL_VALUE.value ),\n\t\t\t\t[ key ]: newValue,\n\t\t\t},\n\t\t} );\n\t};\n\n\treturn (\n\t\t<Stack gap={ 1.5 }>\n\t\t\t<Divider />\n\t\t\t<Stack\n\t\t\t\tdirection=\"row\"\n\t\t\t\tsx={ {\n\t\t\t\t\tjustifyContent: 'space-between',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t<ControlLabel>{ __( 'Link', 'elementor' ) }</ControlLabel>\n\t\t\t\t<IconButton size={ SIZE } onClick={ () => handleOnChange( 'enabled', ! enabled ) }>\n\t\t\t\t\t{ enabled ? <MinusIcon fontSize={ SIZE } /> : <PlusIcon fontSize={ SIZE } /> }\n\t\t\t\t</IconButton>\n\t\t\t</Stack>\n\t\t\t<Collapse in={ enabled } timeout=\"auto\" unmountOnExit>\n\t\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\tvalue={ href }\n\t\t\t\t\t\tsetValue={ ( newHref ) => handleOnChange( 'href', newHref as UrlPropValue ) }\n\t\t\t\t\t\tbind={ 'href' }\n\t\t\t\t\t>\n\t\t\t\t\t\t<UrlControl placeholder={ __( 'Paste URL or type', 'elementor' ) } />\n\t\t\t\t\t</BoundPropProvider>\n\n\t\t\t\t\t<SwitchControl\n\t\t\t\t\t\tvalue={ isTargetBlank }\n\t\t\t\t\t\tonSwitch={ () => handleOnChange( 'isTargetBlank', ! isTargetBlank ) }\n\t\t\t\t\t/>\n\t\t\t\t</Stack>\n\t\t\t</Collapse>\n\t\t</Stack>\n\t);\n} );\n\n// @TODO Should be refactored in ED-16323\nconst SwitchControl = ( { value, onSwitch }: { value: boolean; onSwitch: () => void } ) => {\n\treturn (\n\t\t<Grid container alignItems=\"center\" flexWrap=\"nowrap\" justifyContent=\"space-between\">\n\t\t\t<Grid item>\n\t\t\t\t<ControlLabel>{ __( 'Open in new tab', 'elementor' ) }</ControlLabel>\n\t\t\t</Grid>\n\t\t\t<Grid item>\n\t\t\t\t<Switch checked={ value } onChange={ onSwitch } />\n\t\t\t</Grid>\n\t\t</Grid>\n\t);\n};\n","import * as React from 'react';\nimport { gapPropTypeUtil, type PropValue } from '@elementor/editor-props';\nimport { DetachIcon, LinkIcon } from '@elementor/icons';\nimport { Grid, Stack, ToggleButton } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { BoundPropProvider, useBoundProp } from '../bound-prop-context';\nimport { ControlLabel } from '../components/control-label';\nimport { createControl } from '../create-control';\nimport { SizeControl } from './size-control';\n\nexport type Gap = 'row' | 'column';\n\nexport const GapControl = createControl( ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useBoundProp( gapPropTypeUtil );\n\tconst { column, row, isLinked = true } = value || {};\n\n\tconst setLinkedValue = ( gap: Gap, newValue: PropValue ) => {\n\t\tconst updatedValue = {\n\t\t\tisLinked,\n\t\t\tcolumn: isLinked ? newValue : column,\n\t\t\trow: isLinked ? newValue : row,\n\t\t\t[ gap ]: newValue,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst toggleLinked = () => {\n\t\tconst updatedValue = {\n\t\t\tisLinked: ! isLinked,\n\t\t\tcolumn,\n\t\t\trow: ! isLinked ? column : row,\n\t\t};\n\n\t\tsetValue( updatedValue );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<ControlLabel>{ label }</ControlLabel>\n\t\t\t\t<ToggleButton\n\t\t\t\t\taria-label={ __( 'Link Inputs', 'elementor' ) }\n\t\t\t\t\tsize={ 'tiny' }\n\t\t\t\t\tvalue={ 'check' }\n\t\t\t\t\tselected={ isLinked }\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t\tonChange={ toggleLinked }\n\t\t\t\t>\n\t\t\t\t\t<LinkedIcon fontSize={ 'tiny' } />\n\t\t\t\t</ToggleButton>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 } flexWrap=\"nowrap\">\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Column', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\t\tsetValue={ ( newValue ) => setLinkedValue( 'column', newValue ) }\n\t\t\t\t\t\t\tvalue={ column }\n\t\t\t\t\t\t\tbind=\"column\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SizeControl />\n\t\t\t\t\t\t</BoundPropProvider>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t\t<Grid container gap={ 1 } alignItems=\"center\">\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<ControlLabel>{ __( 'Row', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t</Grid>\n\t\t\t\t\t<Grid item xs={ 12 }>\n\t\t\t\t\t\t<BoundPropProvider\n\t\t\t\t\t\t\tsetValue={ ( newValue ) => setLinkedValue( 'row', newValue ) }\n\t\t\t\t\t\t\tvalue={ row }\n\t\t\t\t\t\t\tbind=\"row\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<SizeControl />\n\t\t\t\t\t\t</BoundPropProvider>\n\t\t\t\t\t</Grid>\n\t\t\t\t</Grid>\n\t\t\t</Stack>\n\t\t</>\n\t);\n} );\n"],"mappings":"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","names":["React","Stack","__","value","React","React","React","createContext","useContext","createContext","useContext","React","React","React","createContext","useContext","MenuItem","React","Stack","__","React","stringPropTypeUtil","stringPropTypeUtil","React","stringPropTypeUtil","TextField","stringPropTypeUtil","TextField","React","InputAdornment","React","Button","MenuItem","TextField","units","InputAdornment","React","Grid","Stack","__","React","Stack","__","Grid","React","Grid","Stack","Typography","__","React","useId","useState","bindTrigger","Stack","Typography","usePopupState","__","__","Stack","Grid","Control","Typography","React","Grid","Stack","Typography","UnstableColorIndicator","__","__","ItemIcon","ItemLabel","ItemContent","UnstableColorIndicator","Stack","Control","Grid","Typography","React","stringPropTypeUtil","React","styled","stringPropTypeUtil","React","TextField","TextField","React","useId","useRef","sizePropTypeUtil","bindPopover","Grid","Popover","Stack","ToggleButton","usePopupState","__","useId","useRef","usePopupState","sizePropTypeUtil","Grid","ToggleButton","Popover","bindPopover","Stack","__","React","Grid","Stack","ToggleButton","__","Stack","ToggleButton","__","Grid","Control","Fragment","useId","useState","React","stringPropTypeUtil","XIcon","bindPopover","bindTrigger","Box","IconButton","InputAdornment","MenuItem","Popover","Stack","TextField","Typography","UnstableTag","usePopupState","__","__","SIZE","useState","stringPropTypeUtil","useId","usePopupState","UnstableTag","bindTrigger","Popover","bindPopover","Stack","Typography","__","IconButton","XIcon","Box","TextField","InputAdornment","Fragment","MenuItem","React","TextField","TextField","React","PlusIcon","Divider","Grid","IconButton","Stack","__","SIZE","Stack","Divider","__","IconButton","PlusIcon","Grid","React","DetachIcon","LinkIcon","Grid","Stack","ToggleButton","__","LinkIcon","DetachIcon","Stack","ToggleButton","__","Grid"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@elementor/editor-controls",
3
3
  "description": "This package contains the controls model and utils for the Elementor editor",
4
- "version": "0.3.0",
4
+ "version": "0.3.1",
5
5
  "private": false,
6
6
  "author": "Elementor Team",
7
7
  "homepage": "https://elementor.com/",
@@ -8,12 +8,14 @@ import { createControl } from '../create-control';
8
8
 
9
9
  type Props = {
10
10
  options: Array< { label: string; value: StringPropValue[ 'value' ]; disabled?: boolean } >;
11
+ onChange?: ( newValue: string | null, previousValue: string | null | undefined ) => void;
11
12
  };
12
13
 
13
- export const SelectControl = createControl( ( { options }: Props ) => {
14
+ export const SelectControl = createControl( ( { options, onChange }: Props ) => {
14
15
  const { value, setValue } = useBoundProp( stringPropTypeUtil );
15
16
 
16
17
  const handleChange = ( event: SelectChangeEvent< StringPropValue[ 'value' ] > ) => {
18
+ onChange?.( event.target.value, value );
17
19
  setValue( event.target.value );
18
20
  };
19
21