@elementor/editor-editing-panel 0.14.2 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -0
- package/dist/index.d.mts +29 -1
- package/dist/index.d.ts +29 -1
- package/dist/index.js +939 -302
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +944 -294
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -8
- package/src/components/editing-panel.tsx +1 -1
- package/src/components/settings-tab.tsx +6 -17
- package/src/components/style-sections/position-section/position-section.tsx +15 -0
- package/src/components/style-sections/position-section/z-index-control.tsx +16 -0
- package/src/components/style-sections/size-section.tsx +14 -18
- package/src/components/style-sections/spacing-section/linked-dimensions-control.tsx +140 -0
- package/src/components/style-sections/spacing-section/spacing-section.tsx +22 -0
- package/src/components/style-sections/typography-section/font-size-control.tsx +16 -0
- package/src/components/style-sections/typography-section/font-weight-control.tsx +24 -0
- package/src/components/style-sections/typography-section/letter-spacing-control.tsx +16 -0
- package/src/components/style-sections/typography-section/text-color-control.tsx +16 -0
- package/src/{controls/control-types → components/style-sections/typography-section}/text-style-control.tsx +16 -14
- package/src/components/style-sections/typography-section/transform-control.tsx +23 -0
- package/src/components/style-sections/typography-section/typography-section.tsx +34 -0
- package/src/components/style-sections/typography-section/word-spacing-control.tsx +16 -0
- package/src/components/style-tab.tsx +30 -6
- package/src/contexts/element-context.tsx +5 -3
- package/src/contexts/style-context.tsx +8 -2
- package/src/controls/components/control-container.tsx +18 -0
- package/src/controls/components/control-toggle-button-group.tsx +59 -0
- package/src/controls/components/text-field-inner-selection.tsx +79 -0
- package/src/controls/control-replacement.ts +26 -0
- package/src/controls/control-types/color-control.tsx +24 -0
- package/src/controls/control-types/image-control.tsx +3 -18
- package/src/controls/control-types/number-control.tsx +25 -0
- package/src/controls/control-types/size-control.tsx +22 -34
- package/src/controls/control-types/text-area-control.tsx +1 -1
- package/src/controls/control-types/toggle-control.tsx +25 -0
- package/src/controls/control.tsx +50 -0
- package/src/controls/{get-control-by-type.ts → controls-registry.tsx} +13 -9
- package/src/controls/hooks/use-style-control.ts +2 -1
- package/src/controls/settings-control.tsx +8 -21
- package/src/dynamics/components/dynamic-selection-control.tsx +180 -0
- package/src/dynamics/components/dynamic-selection.tsx +144 -0
- package/src/dynamics/dynamic-control.tsx +42 -0
- package/src/dynamics/hooks/use-dynamic-tag.ts +10 -0
- package/src/dynamics/hooks/use-prop-dynamic-tags.ts +36 -0
- package/src/dynamics/init.ts +10 -0
- package/src/dynamics/sync/get-atomic-dynamic-tags.ts +14 -0
- package/src/dynamics/sync/get-elementor-config.ts +7 -0
- package/src/dynamics/types.ts +32 -0
- package/src/dynamics/utils.ts +9 -0
- package/src/hooks/use-element-type.ts +5 -0
- package/src/index.ts +3 -0
- package/src/init.ts +4 -0
- package/src/props/is-transformable.ts +14 -0
- package/src/sync/types.ts +2 -1
- package/src/sync/update-style.ts +2 -2
- package/src/types.ts +17 -0
- package/LICENSE +0 -674
- package/src/components/style-sections/typography-section.tsx +0 -15
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/panel.ts","../src/components/editing-panel.tsx","../src/hooks/use-selected-elements.ts","../src/sync/get-selected-elements.ts","../src/hooks/use-element-type.ts","../src/sync/get-widgets-cache.ts","../src/contexts/element-context.tsx","../src/components/editing-panel-tabs.tsx","../src/components/settings-tab.tsx","../src/controls/settings-control.tsx","../src/controls/control-context.tsx","../src/hooks/use-widget-settings.ts","../src/sync/get-container.ts","../src/sync/update-settings.ts","../src/components/control-label.tsx","../src/components/accordion-section.tsx","../src/controls/control-types/select-control.tsx","../src/controls/control-types/text-area-control.tsx","../src/controls/control-types/text-control.tsx","../src/controls/control-types/image-control.tsx","../src/controls/get-control-by-type.ts","../src/components/style-tab.tsx","../src/contexts/style-context.tsx","../src/hooks/use-element-styles.ts","../src/sync/get-element-styles.ts","../src/components/style-sections/size-section.tsx","../src/controls/style-control.tsx","../src/hooks/use-element-style-prop.ts","../src/sync/update-style.ts","../src/controls/hooks/use-style-control.ts","../src/components/collapsible-content.tsx","../src/controls/control-types/size-control.tsx","../src/controls/hooks/use-sync-external-state.tsx","../src/components/style-sections/typography-section.tsx","../src/controls/control-types/text-style-control.tsx","../src/init.ts","../src/sync/should-use-v2-panel.ts","../src/hooks/use-open-editor-panel.ts","../src/components/editing-panel-hooks.tsx","../src/index.ts"],"sourcesContent":["import { __createPanel as createPanel } from '@elementor/editor-panels';\nimport { EditingPanel } from './components/editing-panel';\n\nexport const { panel, usePanelActions, usePanelStatus } = createPanel( {\n\tid: 'editing-panel',\n\tcomponent: EditingPanel,\n} );\n","import * as React from 'react';\nimport { __ } from '@wordpress/i18n';\nimport useSelectedElements from '../hooks/use-selected-elements';\nimport useElementType from '../hooks/use-element-type';\nimport { Panel, PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { ElementContext } from '../contexts/element-context';\nimport { EditingPanelTabs } from './editing-panel-tabs';\n\nexport const EditingPanel = () => {\n\tconst elements = useSelectedElements();\n\n\tconst [ selectedElement ] = elements;\n\n\tconst elementType = useElementType( selectedElement?.type );\n\n\tif ( elements.length !== 1 || ! elementType ) {\n\t\treturn null;\n\t}\n\n\t/* translators: %s: Element type title. */\n\tconst panelTitle = __( 'Edit %s', 'elementor' ).replace( '%s', elementType.title );\n\n\treturn (\n\t\t<Panel>\n\t\t\t<PanelHeader>\n\t\t\t\t<PanelHeaderTitle>{ panelTitle }</PanelHeaderTitle>\n\t\t\t</PanelHeader>\n\t\t\t<PanelBody>\n\t\t\t\t<ElementContext element={ selectedElement }>\n\t\t\t\t\t<EditingPanelTabs />\n\t\t\t\t</ElementContext>\n\t\t\t</PanelBody>\n\t\t</Panel>\n\t);\n};\n","import { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport getSelectedElements from '../sync/get-selected-elements';\n\nexport default function useSelectedElements() {\n\treturn useListenTo(\n\t\t[ commandEndEvent( 'document/elements/select' ), commandEndEvent( 'document/elements/deselect' ) ],\n\t\t() => getSelectedElements()\n\t);\n}\n","import { ExtendedWindow } from './types';\nimport { Element } from '../types';\n\nexport default function getSelectedElements(): Element[] {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tconst selectedElements = extendedWindow.elementor?.selection?.getElements?.() ?? [];\n\n\treturn selectedElements.reduce< Element[] >( ( acc, el ) => {\n\t\tconst type = el.model.get( 'widgetType' ) || el.model.get( 'elType' );\n\n\t\tif ( type ) {\n\t\t\tacc.push( {\n\t\t\t\tid: el.model.get( 'id' ),\n\t\t\t\ttype,\n\t\t\t} );\n\t\t}\n\n\t\treturn acc;\n\t}, [] );\n}\n","import { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport getWidgetsCache from '../sync/get-widgets-cache';\nimport { ElementType } from '../types';\n\nexport default function useElementType( type?: string ) {\n\treturn useListenTo(\n\t\tcommandEndEvent( 'editor/documents/load' ),\n\t\t(): ElementType | null => {\n\t\t\tif ( ! type ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst widgetsCache = getWidgetsCache();\n\t\t\tconst elementType = widgetsCache?.[ type ];\n\n\t\t\tif ( ! elementType?.atomic_controls ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tkey: type,\n\t\t\t\tcontrols: elementType.atomic_controls,\n\t\t\t\ttitle: elementType.title,\n\t\t\t};\n\t\t},\n\t\t[ type ]\n\t);\n}\n","import { ExtendedWindow } from './types';\n\nexport default function getWidgetsCache() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow?.elementor?.widgetsCache || null;\n}\n","import * as React from 'react';\nimport { createContext, ReactNode, useContext } from 'react';\nimport { Element } from '../types';\n\ntype ContextValue = {\n\telement: Element;\n};\n\nconst Context = createContext< ContextValue | null >( null );\n\ntype Props = {\n\telement: Element;\n\tchildren?: ReactNode;\n};\n\nexport function ElementContext( { children, element }: Props ) {\n\treturn <Context.Provider value={ { element } }>{ children }</Context.Provider>;\n}\n\nexport function useElementContext() {\n\tconst context = useContext( Context );\n\n\tif ( ! context ) {\n\t\tthrow new Error( 'useElementContext must be used within a ElementContextProvider' );\n\t}\n\n\treturn context;\n}\n","import { Stack, Tabs, Tab, TabPanel, useTabs } from '@elementor/ui';\nimport * as React from 'react';\nimport { __ } from '@wordpress/i18n';\nimport { SettingsTab } from './settings-tab';\nimport { StyleTab } from './style-tab';\n\ntype TabValue = 'settings' | 'style';\n\nexport const EditingPanelTabs = () => {\n\tconst { getTabProps, getTabPanelProps, getTabsProps } = useTabs< TabValue >( 'settings' );\n\n\treturn (\n\t\t<Stack direction=\"column\" sx={ { width: '100%' } }>\n\t\t\t<Tabs variant=\"fullWidth\" indicatorColor=\"secondary\" textColor=\"inherit\" { ...getTabsProps() }>\n\t\t\t\t<Tab label={ __( 'General', 'elementor' ) } { ...getTabProps( 'settings' ) } />\n\t\t\t\t<Tab label={ __( 'Style', 'elementor' ) } { ...getTabProps( 'style' ) } />\n\t\t\t</Tabs>\n\t\t\t<TabPanel { ...getTabPanelProps( 'settings' ) } disablePadding>\n\t\t\t\t<SettingsTab />\n\t\t\t</TabPanel>\n\t\t\t<TabPanel { ...getTabPanelProps( 'style' ) } disablePadding>\n\t\t\t\t<StyleTab />\n\t\t\t</TabPanel>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { Stack } from '@elementor/ui';\nimport { SettingsControl } from '../controls/settings-control';\nimport { useElementContext } from '../contexts/element-context';\nimport useElementType from '../hooks/use-element-type';\nimport type { Control } from '../types';\nimport { AccordionSection } from './accordion-section';\nimport { getControlByType } from '../controls/get-control-by-type';\n\nexport const SettingsTab = () => {\n\tconst { element } = useElementContext();\n\n\tconst elementType = useElementType( element?.type );\n\n\tif ( ! elementType ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Stack>\n\t\t\t{ elementType.controls.map( ( { type, value }, index ) => {\n\t\t\t\tif ( type === 'control' ) {\n\t\t\t\t\treturn <Control key={ value.bind } control={ value } />;\n\t\t\t\t}\n\n\t\t\t\tif ( type === 'section' ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<AccordionSection key={ type + '.' + index } title={ value.label }>\n\t\t\t\t\t\t\t{ value.items?.map( ( item ) => {\n\t\t\t\t\t\t\t\tif ( item.type === 'control' ) {\n\t\t\t\t\t\t\t\t\treturn <Control key={ item.value.bind } control={ item.value } />;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// TODO: Handle 2nd level sections\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</AccordionSection>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t} ) }\n\t\t</Stack>\n\t);\n};\n\n// TODO: Create control wrapper by type for different layouts.\nconst Control = ( { control }: { control: Control[ 'value' ] } ) => {\n\tconst ControlComponent = getControlByType( control.type );\n\n\tif ( ! ControlComponent ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<SettingsControl bind={ control.bind }>\n\t\t\t{ control.label ? <SettingsControl.Label>{ control.label }</SettingsControl.Label> : null }\n\t\t\t<ControlComponent\n\t\t\t\t/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\n\t\t\t\t{ ...( control.props as any ) }\n\t\t\t/>\n\t\t</SettingsControl>\n\t);\n};\n","import * as React from 'react';\nimport { ControlContext } from '../controls/control-context';\nimport { Stack, styled } from '@elementor/ui';\nimport { PropKey, PropValue } from '../types';\nimport { useElementContext } from '../contexts/element-context';\nimport { useWidgetSettings } from '../hooks/use-widget-settings';\nimport { updateSettings } from '../sync/update-settings';\nimport { ControlLabel } from '../components/control-label';\n\ntype Props = {\n\tbind: PropKey;\n\tchildren: React.ReactNode;\n};\n\nexport const SettingsControlProvider = ( { bind, children }: Props ) => {\n\tconst { element } = useElementContext();\n\tconst value = useWidgetSettings( { id: element.id, bind } );\n\n\tconst setValue = ( newValue: PropValue ) => {\n\t\tupdateSettings( {\n\t\t\tid: element.id,\n\t\t\tprops: {\n\t\t\t\t[ bind ]: newValue,\n\t\t\t},\n\t\t} );\n\t};\n\n\treturn <ControlContext.Provider value={ { setValue, value, bind } }>{ children }</ControlContext.Provider>;\n};\n\nconst SettingsControl = ( { children, bind }: Props ) => (\n\t<SettingsControlProvider bind={ bind }>\n\t\t<StyledStack direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" flexWrap=\"wrap\">\n\t\t\t{ children }\n\t\t</StyledStack>\n\t</SettingsControlProvider>\n);\n\nconst StyledStack = styled( Stack )( ( { theme } ) => {\n\tconst gap = theme.spacing( 1 );\n\n\treturn {\n\t\tgap,\n\t\t'& > *': {\n\t\t\twidth: `calc(50% - ${ gap } / 2)`,\n\t\t},\n\t\t'& > label': {\n\t\t\tflexShrink: 0,\n\t\t},\n\t};\n} );\n\n// TODO: When we start using useControl inside the label component, we should create a new component for it,\n// and keep ControlLabel as a simple label component without context.\nSettingsControl.Label = ControlLabel;\n\nexport { SettingsControl };\n","import { createContext, useContext } from 'react';\nimport { PropKey, PropValue } from '../types';\n\nexport type ControlContext< T extends PropValue > = {\n\tbind: PropKey;\n\tsetValue: ( value: T | undefined ) => void;\n\tvalue: T | undefined;\n};\n\nexport const ControlContext = createContext< ControlContext< PropValue > | null >( null );\n\nexport function useControl< T extends PropValue >(): ControlContext< T | undefined >;\nexport function useControl< T extends PropValue >( defaultValue: T ): ControlContext< T >;\nexport function useControl< T extends PropValue >( defaultValue?: T ) {\n\tconst controlContext = useContext< ControlContext< T > >( ControlContext as never );\n\n\tif ( ! controlContext ) {\n\t\tthrow new Error( 'useControl must be used within a ControlContext' );\n\t}\n\n\treturn { ...controlContext, value: controlContext.value ?? defaultValue };\n}\n","import { commandEndEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';\nimport { PropValue } from '../types';\nimport getContainer from '../sync/get-container';\n\nexport const useWidgetSettings = ( { id, bind }: { id: string; bind: string } ): PropValue => {\n\treturn useListenTo(\n\t\tcommandEndEvent( 'document/elements/settings' ),\n\t\t() => {\n\t\t\tconst container = getContainer( id );\n\t\t\tconst value = container?.settings?.get( bind ) ?? null;\n\n\t\t\treturn value;\n\t\t},\n\t\t[ id, bind ]\n\t);\n};\n","import { ExtendedWindow } from './types';\n\nexport default function getContainer( id: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\tconst container = extendedWindow.elementor?.getContainer?.( id );\n\n\treturn container ?? null;\n}\n","import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { Props } from '../types';\nimport getContainer from './get-container';\n\nexport const updateSettings = ( { id, props }: { id: string; props: Props } ) => {\n\tconst container = getContainer( id );\n\n\trunCommand( 'document/elements/settings', {\n\t\tcontainer,\n\t\tsettings: {\n\t\t\t...props,\n\t\t},\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 { useId } from 'react';\nimport { Accordion, AccordionSummary, AccordionDetails, AccordionSummaryText, Stack } from '@elementor/ui';\n\nexport type AccordionSectionProps = React.PropsWithChildren< {\n\ttitle: React.ReactNode;\n} >;\n\nexport const AccordionSection = ( { title, children }: AccordionSectionProps ) => {\n\tconst uid = useId();\n\tconst labelId = `label-${ uid }`;\n\tconst contentId = `content-${ uid }`;\n\n\t// TODO: Change to collapsible list item\n\treturn (\n\t\t<Accordion disableGutters defaultExpanded>\n\t\t\t<AccordionSummary aria-controls={ contentId } id={ labelId }>\n\t\t\t\t<AccordionSummaryText primaryTypographyProps={ { variant: 'caption' } }>{ title }</AccordionSummaryText>\n\t\t\t</AccordionSummary>\n\t\t\t<AccordionDetails id={ contentId } aria-labelledby={ labelId }>\n\t\t\t\t<Stack gap={ 2.5 }>{ children }</Stack>\n\t\t\t</AccordionDetails>\n\t\t</Accordion>\n\t);\n};\n","import * as React from 'react';\nimport { MenuItem, Select, SelectChangeEvent } from '@elementor/ui';\nimport { useControl } from '../control-context';\nimport { PropValue } from '../../types';\n\ntype Props< T > = {\n\toptions: Array< { label: string; value: T; disabled?: boolean } >;\n};\n\nexport const SelectControl = < T extends PropValue >( { options }: Props< T > ) => {\n\tconst { value, setValue } = useControl< T >();\n\n\tconst handleChange = ( event: SelectChangeEvent< T > ) => {\n\t\tsetValue( event.target.value as T );\n\t};\n\n\treturn (\n\t\t<Select size=\"tiny\" value={ value ?? '' } onChange={ handleChange }>\n\t\t\t{ options.map( ( { label, ...props } ) => (\n\t\t\t\t<MenuItem key={ props.value } { ...props }>\n\t\t\t\t\t{ label }\n\t\t\t\t</MenuItem>\n\t\t\t) ) }\n\t\t</Select>\n\t);\n};\n","import * as React from 'react';\nimport { TextField } from '@elementor/ui';\nimport { useControl } from '../control-context';\n\ntype Props = {\n\tplaceholder?: string;\n};\n\nexport const TextAreaControl = ( { placeholder }: Props ) => {\n\tconst { value, setValue } = useControl< string >( '' );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<TextField\n\t\t\tsize=\"tiny\"\n\t\t\tmultiline\n\t\t\tfullWidth\n\t\t\trows={ 5 }\n\t\t\tvalue={ value }\n\t\t\tonChange={ handleChange }\n\t\t\tplaceholder={ placeholder }\n\t\t/>\n\t);\n};\n","import * as React from 'react';\nimport { TextField } from '@elementor/ui';\nimport { useControl } from '../control-context';\n\nexport const TextControl = ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useControl< string >( '' );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => setValue( event.target.value );\n\n\treturn <TextField type=\"text\" size=\"tiny\" value={ value } onChange={ handleChange } placeholder={ placeholder } />;\n};\n","import * as React from 'react';\nimport { Button, Card, CardMedia, CardOverlay } from '@elementor/ui';\nimport { useControl } from '../control-context';\nimport { UploadIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\nimport { useWpMediaAttachment, useWpMediaFrame } from '@elementor/wp-media';\n\ntype Image = {\n\t$$type: 'image';\n\tvalue:\n\t\t| {\n\t\t\t\tattachmentId: number;\n\t\t\t\turl?: never;\n\t\t }\n\t\t| {\n\t\t\t\tattachmentId?: never;\n\t\t\t\turl: string;\n\t\t };\n};\n\n// TODO: Use schema to get default image.\nconst defaultState: Image = {\n\t$$type: 'image',\n\tvalue: {\n\t\turl: '/wp-content/plugins/elementor/assets/images/placeholder.png',\n\t},\n};\n\nexport const ImageControl = () => {\n\tconst { value, setValue } = useControl< Image >( defaultState );\n\tconst { data: attachment } = useWpMediaAttachment( value?.value?.attachmentId );\n\n\tconst getImageSrc = () => {\n\t\tif ( attachment?.url ) {\n\t\t\treturn attachment.url;\n\t\t}\n\n\t\treturn value?.value?.url ?? defaultState.value.url;\n\t};\n\n\tconst { open } = useWpMediaFrame( {\n\t\ttypes: [ 'image' ],\n\t\tmultiple: false,\n\t\tselected: value?.value?.attachmentId,\n\t\tonSelect: ( selectedAttachment ) => {\n\t\t\tsetValue( {\n\t\t\t\t$$type: 'image',\n\t\t\t\tvalue: {\n\t\t\t\t\tattachmentId: selectedAttachment.id,\n\t\t\t\t},\n\t\t\t} );\n\t\t},\n\t} );\n\n\treturn (\n\t\t<Card variant=\"outlined\">\n\t\t\t<CardMedia image={ getImageSrc() } sx={ { height: 150 } } />\n\t\t\t<CardOverlay>\n\t\t\t\t<Button\n\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\topen( { mode: 'browse' } );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Select Image', 'elementor' ) }\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\tstartIcon={ <UploadIcon /> }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\topen( { mode: 'upload' } );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Upload Image', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardOverlay>\n\t\t</Card>\n\t);\n};\n","import { SelectControl } from './control-types/select-control';\nimport { TextAreaControl } from './control-types/text-area-control';\nimport { TextControl } from './control-types/text-control';\nimport { ImageControl } from './control-types/image-control';\n\nconst controlTypes = {\n\timage: ImageControl,\n\tselect: SelectControl,\n\ttext: TextControl,\n\ttextarea: TextAreaControl,\n};\n\nexport const getControlByType = ( type: string ) => {\n\treturn controlTypes[ type as keyof typeof controlTypes ] ?? null;\n};\n","import * as React from 'react';\nimport { StyleContext } from '../contexts/style-context';\nimport { useElementContext } from '../contexts/element-context';\nimport { useElementStyles } from '../hooks/use-element-styles';\nimport { Stack } from '@elementor/ui';\nimport { SizeSection } from './style-sections/size-section';\nimport { TypographySection } from './style-sections/typography-section';\n\nexport const StyleTab = () => {\n\tconst { element } = useElementContext();\n\tconst elementStyles = useElementStyles( element.id );\n\t// TODO: Handle selected style state.\n\tconst [ selectedStyleDef = null ] = Object.values( elementStyles || {} );\n\n\treturn (\n\t\t<StyleContext selectedStyleDef={ selectedStyleDef }>\n\t\t\t<Stack>\n\t\t\t\t<SizeSection />\n\t\t\t\t<TypographySection />\n\t\t\t</Stack>\n\t\t</StyleContext>\n\t);\n};\n","import * as React from 'react';\nimport { createContext, ReactNode, useContext } from 'react';\nimport { useActiveBreakpoint } from '@elementor/editor-responsive';\nimport { StyleDefinition, StyleVariant } from '@elementor/editor-style';\n\ntype ContextValue = {\n\tselectedStyleDef: StyleDefinition | null;\n\tselectedMeta: StyleVariant[ 'meta' ];\n};\n\nconst Context = createContext< ContextValue | null >( null );\n\ntype Props = {\n\tchildren: ReactNode;\n\tselectedStyleDef: StyleDefinition | null;\n};\n\nexport function StyleContext( { children, selectedStyleDef }: Props ) {\n\tconst breakpoint = useActiveBreakpoint();\n\t// TODO: Handle state when we support it.\n\tconst selectedMeta = { breakpoint, state: null } as const;\n\n\treturn <Context.Provider value={ { selectedStyleDef, selectedMeta } }>{ children }</Context.Provider>;\n}\n\nexport function useStyleContext() {\n\tconst context = useContext( Context );\n\n\tif ( ! context ) {\n\t\tthrow new Error( 'UseStyleContext must be used within a StyleContextProvider' );\n\t}\n\n\treturn context;\n}\n","import { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { getElementStyles } from '../sync/get-element-styles';\nimport { ElementID } from '../types';\n\nexport const useElementStyles = ( elementID: ElementID ) => {\n\treturn useListenTo(\n\t\tcommandEndEvent( 'document/atomic-widgets/styles' ),\n\t\t() => {\n\t\t\treturn getElementStyles( elementID );\n\t\t},\n\t\t[ elementID ]\n\t);\n};\n","import getContainer from './get-container';\nimport { ElementID } from '../types';\nimport { StyleDefinition } from '@elementor/editor-style';\n\nexport const getElementStyles = ( elementID: ElementID ): Record< string, StyleDefinition > | null => {\n\tconst container = getContainer( elementID );\n\n\treturn container?.model.get( 'styles' ) || null;\n};\n","import * as React from 'react';\nimport { AccordionSection } from '../accordion-section';\nimport { StyleControl, StyleControlProps } from '../../controls/style-control';\nimport { CollapsibleContent } from '../collapsible-content';\nimport { SizeControl, Unit } from '../../controls/control-types/size-control';\nimport { Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nexport const SizeSection = () => {\n\treturn (\n\t\t<AccordionSection title={ __( 'Size', 'elementor' ) }>\n\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t<Stack direction=\"row\" gap={ 2 }>\n\t\t\t\t\t<Control bind=\"width\" label={ __( 'Width', 'elementor' ) } />\n\t\t\t\t\t<Control bind=\"height\" label={ __( 'Height', 'elementor' ) } />\n\t\t\t\t</Stack>\n\t\t\t\t<CollapsibleContent>\n\t\t\t\t\t<Stack gap={ 1.5 } sx={ { pt: 1.5 } }>\n\t\t\t\t\t\t<Stack direction=\"row\" gap={ 2 }>\n\t\t\t\t\t\t\t<Control bind=\"minWidth\" label={ __( 'Min. Width', 'elementor' ) } />\n\t\t\t\t\t\t\t<Control bind=\"minHeight\" label={ __( 'Min. Height', 'elementor' ) } />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t<Stack direction=\"row\" gap={ 2 }>\n\t\t\t\t\t\t\t<Control bind=\"maxWidth\" label={ __( 'Max. Width', 'elementor' ) } />\n\t\t\t\t\t\t\t<Control bind=\"maxHeight\" label={ __( 'Max. Height', 'elementor' ) } />\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</Stack>\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Stack>\n\t\t</AccordionSection>\n\t);\n};\n\nconst units: Unit[] = [ 'px', '%', 'em', 'rem', 'vw' ];\n\ntype ControlProps = {\n\tbind: StyleControlProps[ 'bind' ];\n\tlabel: string;\n};\n\nconst Control = ( { label, bind }: ControlProps ) => {\n\treturn (\n\t\t<StyleControl bind={ bind }>\n\t\t\t<Stack gap={ 1 } sx={ { flex: '0 1 50%' } }>\n\t\t\t\t<StyleControl.Label>{ label }</StyleControl.Label>\n\t\t\t\t<SizeControl units={ units } />\n\t\t\t</Stack>\n\t\t</StyleControl>\n\t);\n};\n","import * as React from 'react';\nimport { PropKey } from '../types';\nimport { ControlContext } from '../controls/control-context';\nimport { ControlLabel } from '../components/control-label';\nimport { useStyleControl } from './hooks/use-style-control';\n\nexport type StyleControlProps = {\n\tbind: PropKey;\n\tchildren: React.ReactNode;\n};\n\nexport const StyleControl = ( { bind, children }: StyleControlProps ) => {\n\tconst [ value, setValue ] = useStyleControl( bind );\n\n\treturn <ControlContext.Provider value={ { bind, value, setValue } }>{ children }</ControlContext.Provider>;\n};\n\n// TODO: When we start using useControl inside the label component, we should create a new component for it,\n// and keep ControlLabel as a simple label component without context.\nStyleControl.Label = ControlLabel;\n","import { commandEndEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';\nimport { ElementID, PropKey, PropValue } from '../types';\nimport { getElementStyles } from '../sync/get-element-styles';\nimport { StyleDefinition, StyleDefinitionID, StyleVariant } from '@elementor/editor-style';\n\nexport type UseElementStylePropArgs = {\n\telementID: ElementID;\n\tstyleDefID?: StyleDefinitionID;\n\tmeta: StyleVariant[ 'meta' ];\n\tpropName: PropKey;\n};\n\nexport const useElementStyleProp = < T extends PropValue >( {\n\telementID,\n\tstyleDefID,\n\tmeta,\n\tpropName,\n}: UseElementStylePropArgs ): T | null => {\n\treturn useListenTo(\n\t\tcommandEndEvent( 'document/atomic-widgets/styles' ),\n\t\t() => {\n\t\t\t// TODO: return default value for style prop\n\t\t\tif ( ! styleDefID ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst styleDef = getElementStyles( elementID )?.[ styleDefID ];\n\n\t\t\tif ( ! styleDef ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst variant = getVariantByMeta( styleDef, meta );\n\n\t\t\treturn variant?.props[ propName ] ?? null;\n\t\t},\n\t\t[ elementID, styleDefID, propName, meta ]\n\t) as T;\n};\n\nfunction getVariantByMeta( styleDef: StyleDefinition, meta: StyleVariant[ 'meta' ] ) {\n\treturn styleDef.variants.find( ( variant ) => {\n\t\treturn variant.meta.breakpoint === meta.breakpoint && variant.meta.state === meta.state;\n\t} );\n}\n","import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { ElementID, PropKey, Props } from '../types';\nimport getContainer from './get-container';\nimport { StyleDefinitionID, StyleVariant } from '@elementor/editor-style';\n\nexport type UpdateStyleProps = {\n\telementID: ElementID;\n\tstyleDefID?: StyleDefinitionID;\n\tmeta: StyleVariant[ 'meta' ];\n\tprops: Props;\n\tbind?: PropKey;\n};\n\nexport const updateStyle = ( { elementID, styleDefID, meta, props, bind = 'classes' }: UpdateStyleProps ) => {\n\tconst container = getContainer( elementID );\n\n\trunCommand( 'document/atomic-widgets/styles', {\n\t\tcontainer,\n\t\tstyleDefID,\n\t\tbind,\n\t\tmeta,\n\t\tprops,\n\t} );\n};\n","import { useElementContext } from '../../contexts/element-context';\nimport { useStyleContext } from '../../contexts/style-context';\nimport { useElementStyleProp } from '../../hooks/use-element-style-prop';\nimport { updateStyle } from '../../sync/update-style';\nimport { PropKey, PropValue } from '../../types';\n\nexport const useStyleControl = < T extends PropValue >( propName: PropKey ) => {\n\tconst { element } = useElementContext();\n\tconst { selectedStyleDef, selectedMeta } = useStyleContext();\n\n\tconst value = useElementStyleProp< T >( {\n\t\telementID: element.id,\n\t\tstyleDefID: selectedStyleDef?.id,\n\t\tmeta: selectedMeta,\n\t\tpropName,\n\t} );\n\n\tconst setValue = ( newValue: T ) => {\n\t\tupdateStyle( {\n\t\t\telementID: element.id,\n\t\t\tstyleDefID: selectedStyleDef?.id,\n\t\t\tprops: { [ propName ]: newValue },\n\t\t\tmeta: selectedMeta,\n\t\t} );\n\t};\n\n\treturn [ value, setValue ] as const;\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { ChevronDownIcon } from '@elementor/icons';\nimport { Button, Collapse, Stack, styled } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype CollapsibleContentProps = React.PropsWithChildren< {\n\tdefaultOpen?: boolean;\n} >;\n\nexport const CollapsibleContent = ( { children, defaultOpen = false }: CollapsibleContentProps ) => {\n\tconst [ open, setOpen ] = useState( defaultOpen );\n\n\tconst handleToggle = () => {\n\t\tsetOpen( ( prevOpen ) => ! prevOpen );\n\t};\n\n\treturn (\n\t\t<Stack sx={ { py: 0.5 } }>\n\t\t\t<Button\n\t\t\t\tfullWidth\n\t\t\t\tsize=\"small\"\n\t\t\t\tcolor=\"secondary\"\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\tonClick={ handleToggle }\n\t\t\t\tendIcon={ <ChevronIcon open={ open } /> }\n\t\t\t>\n\t\t\t\t{ open ? __( 'Show less', 'elementor' ) : __( 'Show more', 'elementor' ) }\n\t\t\t</Button>\n\t\t\t<Collapse in={ open } timeout=\"auto\">\n\t\t\t\t{ children }\n\t\t\t</Collapse>\n\t\t</Stack>\n\t);\n};\n\n// TODO: Replace this with future Rotate component that will be implemented in elementor-ui\nconst ChevronIcon = styled( ChevronDownIcon, {\n\tshouldForwardProp: ( prop ) => prop !== 'open',\n} )< { open: boolean } >( ( { theme, open } ) => ( {\n\ttransform: open ? 'rotate(180deg)' : 'rotate(0)',\n\ttransition: theme.transitions.create( 'transform', {\n\t\tduration: theme.transitions.duration.standard,\n\t} ),\n} ) );\n","import * as React from 'react';\nimport { MenuItem, Select, SelectChangeEvent, Stack, TextField } from '@elementor/ui';\nimport { TransformablePropValue } from '../../types';\nimport { useControl } from '../control-context';\nimport { useSyncExternalState } from '../hooks/use-sync-external-state';\n\nexport type SizeControlProps = {\n\tunits: Unit[];\n\tplaceholder?: string;\n};\n\nexport type Unit = 'px' | '%' | 'em' | 'rem' | 'vw';\n\nexport type SizeControlValue = TransformablePropValue< { unit: Unit; size: number } >;\n\nexport const SizeControl = ( { units, placeholder }: SizeControlProps ) => {\n\tconst { value, setValue } = useControl< SizeControlValue >();\n\n\tconst [ state, setState ] = useSyncExternalState< SizeControlValue >( {\n\t\texternal: value,\n\t\tsetExternal: setValue,\n\t\tpersistWhen: ( controlValue ) => !! controlValue?.value.size || controlValue?.value.size === 0,\n\t\tfallback: ( controlValue ) => ( {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: controlValue?.value.unit || 'px', size: NaN },\n\t\t} ),\n\t} );\n\n\tconst handleUnitChange = ( event: SelectChangeEvent< Unit > ) => {\n\t\tconst unit = event.target.value as Unit;\n\n\t\tsetState( ( prev ) => ( {\n\t\t\t...prev,\n\t\t\tvalue: {\n\t\t\t\t...prev.value,\n\t\t\t\tunit,\n\t\t\t},\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\tvalue: {\n\t\t\t\t...prev.value,\n\t\t\t\tsize: size || size === '0' ? parseFloat( size ) : NaN,\n\t\t\t},\n\t\t} ) );\n\t};\n\n\treturn (\n\t\t<Stack direction=\"row\">\n\t\t\t<TextField\n\t\t\t\tsize=\"tiny\"\n\t\t\t\ttype=\"number\"\n\t\t\t\tvalue={ Number.isNaN( state.value.size ) ? '' : state.value.size }\n\t\t\t\tonChange={ handleSizeChange }\n\t\t\t\tplaceholder={ placeholder }\n\t\t\t/>\n\t\t\t<Select\n\t\t\t\tsize=\"tiny\"\n\t\t\t\tvalue={ state.value.unit }\n\t\t\t\tonChange={ handleUnitChange }\n\t\t\t\tMenuProps={ {\n\t\t\t\t\tanchorOrigin: { vertical: 'bottom', horizontal: 'right' },\n\t\t\t\t\ttransformOrigin: { vertical: 'top', horizontal: 'right' },\n\t\t\t\t} }\n\t\t\t>\n\t\t\t\t{ units.map( ( unit ) => (\n\t\t\t\t\t<MenuItem key={ unit } value={ unit }>\n\t\t\t\t\t\t{ unit.toUpperCase() }\n\t\t\t\t\t</MenuItem>\n\t\t\t\t) ) }\n\t\t\t</Select>\n\t\t</Stack>\n\t);\n};\n","import { useEffect, useState } from 'react';\n\ntype UseInternalStateOptions< TValue > = {\n\texternal: TValue | undefined;\n\tsetExternal: ( value: TValue | undefined ) => void;\n\tpersistWhen: ( value: TValue | undefined ) => boolean;\n\tfallback: ( value: TValue | undefined ) => TValue;\n};\n\nexport const useSyncExternalState = < TValue, >( {\n\texternal,\n\tsetExternal,\n\tpersistWhen,\n\tfallback,\n}: UseInternalStateOptions< TValue > ) => {\n\tfunction toExternal( internalValue: TValue | undefined ) {\n\t\tif ( persistWhen( internalValue ) ) {\n\t\t\treturn internalValue;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tfunction toInternal( externalValue: TValue | undefined, internalValue: TValue | undefined ) {\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, undefined ) );\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 { AccordionSection } from '../accordion-section';\nimport { Stack } from '@elementor/ui';\nimport { TextStyleControl } from '../../controls/control-types/text-style-control';\nimport { __ } from '@wordpress/i18n';\n\nexport const TypographySection = () => {\n\treturn (\n\t\t<AccordionSection title={ __( 'Typography', 'elementor' ) }>\n\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t<TextStyleControl />\n\t\t\t</Stack>\n\t\t</AccordionSection>\n\t);\n};\n","import * as React from 'react';\nimport { Stack, ToggleButton as ToggleButtonBase, ToggleButtonGroup } from '@elementor/ui';\nimport { ControlLabel } from '../../components/control-label';\nimport { useStyleControl } from '../hooks/use-style-control';\nimport { __ } from '@wordpress/i18n';\n\nexport const TextStyleControl = () => {\n\tconst [ fontStyle, setFontStyle ] = useStyleControl< string | null >( 'fontStyle' );\n\tconst [ textDecoration, setTextDecoration ] = useStyleControl< string | null >( 'textDecoration' );\n\n\tconst formats = [ fontStyle, ...( textDecoration || '' ).split( ' ' ) ];\n\n\treturn (\n\t\t<Stack direction=\"row\" justifyContent=\"space-between\" alignItems=\"center\">\n\t\t\t<ControlLabel>{ __( 'Style', 'elementor' ) }</ControlLabel>\n\t\t\t<ToggleButtonGroup value={ formats }>\n\t\t\t\t<ToggleButton\n\t\t\t\t\tvalue=\"italic\"\n\t\t\t\t\tonChange={ ( v ) => setFontStyle( fontStyle === v ? null : v ) }\n\t\t\t\t\taria-label=\"italic\"\n\t\t\t\t>\n\t\t\t\t\t<span style={ { fontStyle: 'italic', fontSize: '12px' } }>I</span>\n\t\t\t\t</ToggleButton>\n\t\t\t\t<ShorthandControl\n\t\t\t\t\tvalue=\"line-through\"\n\t\t\t\t\tcurrentValues={ textDecoration || '' }\n\t\t\t\t\tupdateValues={ setTextDecoration }\n\t\t\t\t\taria-label=\"line-through\"\n\t\t\t\t>\n\t\t\t\t\t<span style={ { textDecoration: 'line-through', fontSize: '12px' } }>S</span>\n\t\t\t\t</ShorthandControl>\n\t\t\t\t<ShorthandControl\n\t\t\t\t\tvalue=\"underline\"\n\t\t\t\t\tcurrentValues={ textDecoration || '' }\n\t\t\t\t\tupdateValues={ setTextDecoration }\n\t\t\t\t\taria-label=\"underline\"\n\t\t\t\t>\n\t\t\t\t\t<span style={ { textDecoration: 'underline', fontSize: '12px' } }>U</span>\n\t\t\t\t</ShorthandControl>\n\t\t\t</ToggleButtonGroup>\n\t\t</Stack>\n\t);\n};\n\ntype ShorthandControlProps = React.PropsWithChildren< {\n\tvalue: string;\n\tcurrentValues: string;\n\tupdateValues: ( newValue: string | null ) => void;\n\t'aria-label': string;\n} >;\n\nexport const ShorthandControl = ( {\n\tchildren,\n\tvalue,\n\tcurrentValues,\n\tupdateValues,\n\t'aria-label': ariaLabel,\n}: ShorthandControlProps ) => {\n\tconst valuesArr = currentValues.split( ' ' ).filter( Boolean );\n\tconst selected = valuesArr.includes( value );\n\n\tconst toggleValue = ( newValue: string ) => {\n\t\tif ( selected ) {\n\t\t\tupdateValues( valuesArr.filter( ( v ) => v !== newValue ).join( ' ' ) || null );\n\t\t} else {\n\t\t\tupdateValues( [ ...valuesArr, newValue ].join( ' ' ) );\n\t\t}\n\t};\n\n\treturn (\n\t\t<ToggleButton value={ value } onChange={ toggleValue } selected={ selected } aria-label={ ariaLabel }>\n\t\t\t{ children }\n\t\t</ToggleButton>\n\t);\n};\n\ntype ControlToggleButtonProps = React.PropsWithChildren< {\n\tvalue: string;\n\tonChange: ( newValue: string ) => void;\n\tselected?: boolean;\n\t'aria-label': string;\n} >;\n\nconst ToggleButton = ( { onChange, ...props }: ControlToggleButtonProps ) => {\n\tconst handleChange = ( _e: React.MouseEvent< HTMLElement >, newValue: string ) => {\n\t\tonChange( newValue );\n\t};\n\n\treturn <ToggleButtonBase { ...props } onChange={ handleChange } size=\"tiny\" sx={ { px: 1.5 } } />;\n};\n","import { panel } from './panel';\nimport { injectIntoLogic } from '@elementor/editor';\nimport { shouldUseV2Panel } from './sync/should-use-v2-panel';\nimport { EditingPanelHooks } from './components/editing-panel-hooks';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { __privateBlockDataCommand as blockDataCommand } from '@elementor/editor-v1-adapters';\n\nexport default function init() {\n\tregisterPanel( panel );\n\tblockV1Panel();\n\n\tinjectIntoLogic( {\n\t\tid: 'editing-panel-hooks',\n\t\tcomponent: EditingPanelHooks,\n\t} );\n}\n\nconst blockV1Panel = () => {\n\tblockDataCommand( {\n\t\tcommand: 'panel/editor/open',\n\t\tcondition: shouldUseV2Panel,\n\t} );\n};\n","import getSelectedElements from './get-selected-elements';\nimport getWidgetsCache from './get-widgets-cache';\n\nexport const shouldUseV2Panel = () => {\n\tconst selectedElements = getSelectedElements();\n\tconst widgetCache = getWidgetsCache();\n\n\tif ( selectedElements.length !== 1 ) {\n\t\treturn false;\n\t}\n\n\t// Check if the selected element has atomic controls, meaning it's a V2 element.\n\treturn !! widgetCache?.[ selectedElements[ 0 ].type ]?.atomic_controls;\n};\n","import { useEffect } from 'react';\nimport { commandStartEvent, __privateListenTo as listenTo } from '@elementor/editor-v1-adapters';\nimport { usePanelActions } from '../panel';\nimport { shouldUseV2Panel } from '../sync/should-use-v2-panel';\n\nexport const useOpenEditorPanel = () => {\n\tconst { open } = usePanelActions();\n\n\tuseEffect( () => {\n\t\treturn listenTo( commandStartEvent( 'panel/editor/open' ), () => {\n\t\t\tif ( shouldUseV2Panel() ) {\n\t\t\t\topen();\n\t\t\t}\n\t\t} );\n\t}, [] ); // eslint-disable-line react-hooks/exhaustive-deps\n};\n","import { useOpenEditorPanel } from '../hooks/use-open-editor-panel';\n\nexport const EditingPanelHooks = () => {\n\tuseOpenEditorPanel();\n\n\treturn null;\n};\n","import init from './init';\n\ninit();\n"],"mappings":"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","names":["React","__","useListenTo","commandEndEvent","useListenTo","commandEndEvent","Stack","React","__","React","Stack","React","createContext","useContext","commandEndEvent","useListenTo","useListenTo","commandEndEvent","React","React","Stack","React","React","React","TextField","TextField","React","Stack","React","React","createContext","useContext","Context","useListenTo","commandEndEvent","useListenTo","commandEndEvent","Stack","React","React","commandEndEvent","useListenTo","useListenTo","commandEndEvent","runCommand","runCommand","React","Button","Stack","styled","__","React","MenuItem","Select","Stack","TextField","useState","units","Stack","TextField","Select","MenuItem","Stack","__","Control","React","Stack","React","Stack","__","Stack","__","Stack","Stack","Stack","__","__","useEffect","useEffect"]}
|
|
1
|
+
{"version":3,"sources":["../src/controls/control-replacement.ts","../src/controls/control-context.tsx","../src/panel.ts","../src/components/editing-panel.tsx","../src/hooks/use-selected-elements.ts","../src/sync/get-selected-elements.ts","../src/hooks/use-element-type.ts","../src/sync/get-widgets-cache.ts","../src/contexts/element-context.tsx","../src/components/editing-panel-tabs.tsx","../src/components/settings-tab.tsx","../src/controls/settings-control.tsx","../src/hooks/use-widget-settings.ts","../src/sync/get-container.ts","../src/sync/update-settings.ts","../src/components/control-label.tsx","../src/controls/components/control-container.tsx","../src/components/accordion-section.tsx","../src/controls/control.tsx","../src/controls/control-types/image-control.tsx","../src/controls/control-types/text-control.tsx","../src/controls/control-types/text-area-control.tsx","../src/controls/control-types/size-control.tsx","../src/controls/hooks/use-sync-external-state.tsx","../src/controls/components/text-field-inner-selection.tsx","../src/controls/control-types/select-control.tsx","../src/controls/controls-registry.tsx","../src/components/style-tab.tsx","../src/contexts/style-context.tsx","../src/hooks/use-element-styles.ts","../src/sync/get-element-styles.ts","../src/components/style-sections/size-section.tsx","../src/controls/style-control.tsx","../src/hooks/use-element-style-prop.ts","../src/sync/update-style.ts","../src/controls/hooks/use-style-control.ts","../src/components/style-sections/typography-section/typography-section.tsx","../src/components/style-sections/typography-section/text-style-control.tsx","../src/components/style-sections/typography-section/font-size-control.tsx","../src/components/style-sections/typography-section/font-weight-control.tsx","../src/components/style-sections/typography-section/text-color-control.tsx","../src/controls/control-types/color-control.tsx","../src/components/style-sections/typography-section/letter-spacing-control.tsx","../src/components/style-sections/typography-section/word-spacing-control.tsx","../src/components/collapsible-content.tsx","../src/components/style-sections/typography-section/transform-control.tsx","../src/controls/control-types/toggle-control.tsx","../src/controls/components/control-toggle-button-group.tsx","../src/components/style-sections/position-section/position-section.tsx","../src/components/style-sections/position-section/z-index-control.tsx","../src/controls/control-types/number-control.tsx","../src/components/style-sections/spacing-section/spacing-section.tsx","../src/components/style-sections/spacing-section/linked-dimensions-control.tsx","../src/init.ts","../src/sync/should-use-v2-panel.ts","../src/hooks/use-open-editor-panel.ts","../src/components/editing-panel-hooks.tsx","../src/dynamics/components/dynamic-selection-control.tsx","../src/dynamics/dynamic-control.tsx","../src/dynamics/hooks/use-prop-dynamic-tags.ts","../src/dynamics/sync/get-elementor-config.ts","../src/dynamics/sync/get-atomic-dynamic-tags.ts","../src/props/is-transformable.ts","../src/dynamics/utils.ts","../src/dynamics/hooks/use-dynamic-tag.ts","../src/dynamics/components/dynamic-selection.tsx","../src/dynamics/init.ts","../src/index.ts"],"sourcesContent":["import { PropValue } from '../types';\n\ntype ReplaceWhenParams = {\n\tvalue: PropValue;\n};\n\ntype ControlReplacement = {\n\tcomponent: React.ComponentType;\n\tcondition: ( { value }: ReplaceWhenParams ) => boolean;\n};\n\nlet controlReplacement: ControlReplacement | undefined;\n\nexport const replaceControl = ( { component, condition }: ControlReplacement ) => {\n\tcontrolReplacement = { component, condition };\n};\n\nexport const getControlReplacement = ( { value }: ReplaceWhenParams ) => {\n\tlet shouldReplace = false;\n\n\ttry {\n\t\tshouldReplace = !! controlReplacement?.condition( { value } );\n\t} catch {}\n\n\treturn shouldReplace ? controlReplacement?.component : undefined;\n};\n","import { createContext, useContext } from 'react';\nimport { PropKey, PropValue } from '../types';\n\nexport type ControlContext< T extends PropValue > = {\n\tbind: PropKey;\n\tsetValue: ( value: T | undefined ) => void;\n\tvalue: T | undefined;\n};\n\nexport const ControlContext = createContext< ControlContext< PropValue > | null >( null );\n\nexport function useControl< T extends PropValue >(): ControlContext< T | undefined >;\nexport function useControl< T extends PropValue >( defaultValue: T ): ControlContext< T >;\nexport function useControl< T extends PropValue >( defaultValue?: T ) {\n\tconst controlContext = useContext< ControlContext< T > >( ControlContext as never );\n\n\tif ( ! controlContext ) {\n\t\tthrow new Error( 'useControl must be used within a ControlContext' );\n\t}\n\n\treturn { ...controlContext, value: controlContext.value ?? defaultValue };\n}\n","import { __createPanel as createPanel } from '@elementor/editor-panels';\nimport { EditingPanel } from './components/editing-panel';\n\nexport const { panel, usePanelActions, usePanelStatus } = createPanel( {\n\tid: 'editing-panel',\n\tcomponent: EditingPanel,\n} );\n","import * as React from 'react';\nimport { __ } from '@wordpress/i18n';\nimport useSelectedElements from '../hooks/use-selected-elements';\nimport useElementType from '../hooks/use-element-type';\nimport { Panel, PanelBody, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { ElementContext } from '../contexts/element-context';\nimport { EditingPanelTabs } from './editing-panel-tabs';\n\nexport const EditingPanel = () => {\n\tconst elements = useSelectedElements();\n\n\tconst [ selectedElement ] = elements;\n\n\tconst elementType = useElementType( selectedElement?.type );\n\n\tif ( elements.length !== 1 || ! elementType ) {\n\t\treturn null;\n\t}\n\n\t/* translators: %s: Element type title. */\n\tconst panelTitle = __( 'Edit %s', 'elementor' ).replace( '%s', elementType.title );\n\n\treturn (\n\t\t<Panel>\n\t\t\t<PanelHeader>\n\t\t\t\t<PanelHeaderTitle>{ panelTitle }</PanelHeaderTitle>\n\t\t\t</PanelHeader>\n\t\t\t<PanelBody>\n\t\t\t\t<ElementContext element={ selectedElement } elementType={ elementType }>\n\t\t\t\t\t<EditingPanelTabs />\n\t\t\t\t</ElementContext>\n\t\t\t</PanelBody>\n\t\t</Panel>\n\t);\n};\n","import { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport getSelectedElements from '../sync/get-selected-elements';\n\nexport default function useSelectedElements() {\n\treturn useListenTo(\n\t\t[ commandEndEvent( 'document/elements/select' ), commandEndEvent( 'document/elements/deselect' ) ],\n\t\t() => getSelectedElements()\n\t);\n}\n","import { ExtendedWindow } from './types';\nimport { Element } from '../types';\n\nexport default function getSelectedElements(): Element[] {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\tconst selectedElements = extendedWindow.elementor?.selection?.getElements?.() ?? [];\n\n\treturn selectedElements.reduce< Element[] >( ( acc, el ) => {\n\t\tconst type = el.model.get( 'widgetType' ) || el.model.get( 'elType' );\n\n\t\tif ( type ) {\n\t\t\tacc.push( {\n\t\t\t\tid: el.model.get( 'id' ),\n\t\t\t\ttype,\n\t\t\t} );\n\t\t}\n\n\t\treturn acc;\n\t}, [] );\n}\n","import { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport getWidgetsCache from '../sync/get-widgets-cache';\nimport { ElementType } from '../types';\n\nexport default function useElementType( type?: string ) {\n\treturn useListenTo(\n\t\tcommandEndEvent( 'editor/documents/load' ),\n\t\t(): ElementType | null => {\n\t\t\tif ( ! type ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst widgetsCache = getWidgetsCache();\n\t\t\tconst elementType = widgetsCache?.[ type ];\n\n\t\t\tif ( ! elementType?.atomic_controls ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( ! elementType?.atomic_props_schema ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tkey: type,\n\t\t\t\tcontrols: elementType.atomic_controls,\n\t\t\t\tpropsSchema: elementType.atomic_props_schema,\n\t\t\t\ttitle: elementType.title,\n\t\t\t};\n\t\t},\n\t\t[ type ]\n\t);\n}\n","import { ExtendedWindow } from './types';\n\nexport default function getWidgetsCache() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow?.elementor?.widgetsCache || null;\n}\n","import * as React from 'react';\nimport { createContext, ReactNode, useContext } from 'react';\nimport { Element, ElementType } from '../types';\n\ntype ContextValue = {\n\telement: Element;\n\telementType: ElementType;\n};\n\nconst Context = createContext< ContextValue | null >( null );\n\ntype Props = {\n\telement: Element;\n\telementType: ElementType;\n\tchildren?: ReactNode;\n};\n\nexport function ElementContext( { children, element, elementType }: Props ) {\n\treturn <Context.Provider value={ { element, elementType } }>{ children }</Context.Provider>;\n}\n\nexport function useElementContext() {\n\tconst context = useContext( Context );\n\n\tif ( ! context ) {\n\t\tthrow new Error( 'useElementContext must be used within a ElementContextProvider' );\n\t}\n\n\treturn context;\n}\n","import { Stack, Tabs, Tab, TabPanel, useTabs } from '@elementor/ui';\nimport * as React from 'react';\nimport { __ } from '@wordpress/i18n';\nimport { SettingsTab } from './settings-tab';\nimport { StyleTab } from './style-tab';\n\ntype TabValue = 'settings' | 'style';\n\nexport const EditingPanelTabs = () => {\n\tconst { getTabProps, getTabPanelProps, getTabsProps } = useTabs< TabValue >( 'settings' );\n\n\treturn (\n\t\t<Stack direction=\"column\" sx={ { width: '100%' } }>\n\t\t\t<Tabs variant=\"fullWidth\" indicatorColor=\"secondary\" textColor=\"inherit\" { ...getTabsProps() }>\n\t\t\t\t<Tab label={ __( 'General', 'elementor' ) } { ...getTabProps( 'settings' ) } />\n\t\t\t\t<Tab label={ __( 'Style', 'elementor' ) } { ...getTabProps( 'style' ) } />\n\t\t\t</Tabs>\n\t\t\t<TabPanel { ...getTabPanelProps( 'settings' ) } disablePadding>\n\t\t\t\t<SettingsTab />\n\t\t\t</TabPanel>\n\t\t\t<TabPanel { ...getTabPanelProps( 'style' ) } disablePadding>\n\t\t\t\t<StyleTab />\n\t\t\t</TabPanel>\n\t\t</Stack>\n\t);\n};\n","import * as React from 'react';\nimport { Stack } from '@elementor/ui';\nimport { SettingsControl } from '../controls/settings-control';\nimport { useElementContext } from '../contexts/element-context';\nimport { AccordionSection } from './accordion-section';\nimport type { Control } from '../types';\nimport { Control as BaseControl } from '../controls/control';\nimport { ControlType, getControlByType } from '../controls/controls-registry';\n\nexport const SettingsTab = () => {\n\tconst { elementType } = useElementContext();\n\n\treturn (\n\t\t<Stack>\n\t\t\t{ elementType.controls.map( ( { type, value }, index ) => {\n\t\t\t\tif ( type === 'control' ) {\n\t\t\t\t\treturn <Control key={ value.bind } control={ value } />;\n\t\t\t\t}\n\n\t\t\t\tif ( type === 'section' ) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<AccordionSection key={ type + '.' + index } title={ value.label }>\n\t\t\t\t\t\t\t{ value.items?.map( ( item ) => {\n\t\t\t\t\t\t\t\tif ( item.type === 'control' ) {\n\t\t\t\t\t\t\t\t\treturn <Control key={ item.value.bind } control={ item.value } />;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// TODO: Handle 2nd level sections\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</AccordionSection>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t} ) }\n\t\t</Stack>\n\t);\n};\n\n// TODO: Create control wrapper by type for different layouts.\nconst Control = ( { control }: { control: Control[ 'value' ] } ) => {\n\tif ( ! getControlByType( control.type as ControlType ) ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<SettingsControl bind={ control.bind }>\n\t\t\t{ control.label ? <SettingsControl.Label>{ control.label }</SettingsControl.Label> : null }\n\t\t\t<BaseControl type={ control.type as ControlType } props={ control.props } />\n\t\t</SettingsControl>\n\t);\n};\n","import * as React from 'react';\nimport { ControlContext } from './control-context';\nimport { PropKey, PropValue } from '../types';\nimport { useElementContext } from '../contexts/element-context';\nimport { useWidgetSettings } from '../hooks/use-widget-settings';\nimport { updateSettings } from '../sync/update-settings';\nimport { ControlLabel } from '../components/control-label';\nimport { ControlContainer } from './components/control-container';\n\ntype Props = {\n\tbind: PropKey;\n\tchildren: React.ReactNode;\n};\n\nexport const SettingsControlProvider = ( { bind, children }: Props ) => {\n\tconst { element, elementType } = useElementContext();\n\n\tconst defaultValue = elementType.propsSchema[ bind ]?.type.default;\n\tconst settingsValue = useWidgetSettings( { id: element.id, bind } );\n\tconst value = settingsValue ?? defaultValue ?? null;\n\n\tconst setValue = ( newValue: PropValue ) => {\n\t\tupdateSettings( {\n\t\t\tid: element.id,\n\t\t\tprops: {\n\t\t\t\t[ bind ]: newValue,\n\t\t\t},\n\t\t} );\n\t};\n\n\treturn <ControlContext.Provider value={ { setValue, value, bind } }>{ children }</ControlContext.Provider>;\n};\n\nconst SettingsControl = ( { children, bind }: Props ) => (\n\t<SettingsControlProvider bind={ bind }>\n\t\t<ControlContainer flexWrap=\"wrap\">{ children }</ControlContainer>\n\t</SettingsControlProvider>\n);\n\n// TODO: When we start using useControl inside the label component, we should create a new component for it,\n// and keep ControlLabel as a simple label component without context.\nSettingsControl.Label = ControlLabel;\n\nexport { SettingsControl };\n","import { commandEndEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';\nimport { PropValue } from '../types';\nimport getContainer from '../sync/get-container';\n\nexport const useWidgetSettings = ( { id, bind }: { id: string; bind: string } ): PropValue => {\n\treturn useListenTo(\n\t\tcommandEndEvent( 'document/elements/settings' ),\n\t\t() => {\n\t\t\tconst container = getContainer( id );\n\t\t\tconst value = container?.settings?.get( bind ) ?? null;\n\n\t\t\treturn value;\n\t\t},\n\t\t[ id, bind ]\n\t);\n};\n","import { ExtendedWindow } from './types';\n\nexport default function getContainer( id: string ) {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\tconst container = extendedWindow.elementor?.getContainer?.( id );\n\n\treturn container ?? null;\n}\n","import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { Props } from '../types';\nimport getContainer from './get-container';\n\nexport const updateSettings = ( { id, props }: { id: string; props: Props } ) => {\n\tconst container = getContainer( id );\n\n\trunCommand( 'document/elements/settings', {\n\t\tcontainer,\n\t\tsettings: {\n\t\t\t...props,\n\t\t},\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 { Stack, StackProps, styled } from '@elementor/ui';\n\nconst StyledStack = styled( Stack )( ( { theme, gap, direction } ) => ( {\n\t'> :only-child': {\n\t\twidth: '100%',\n\t},\n\t'&:where( :has( > :nth-child( 2 ):last-child ) ) > :where( * )': {\n\t\twidth: direction === 'column' ? '100%' : `calc( 50% - ${ theme.spacing( gap / 2 ) })`,\n\t},\n\t'&:where( :has( > :nth-child( 3 ):last-child ) ) > :where( * )': {\n\t\twidth: direction === 'column' ? '100%' : `calc( 33.3333% - ${ theme.spacing( gap * 2 ) } / 3)`,\n\t},\n} ) );\n\nexport const ControlContainer = ( props: StackProps ) => (\n\t<StyledStack gap={ 1 } direction=\"row\" alignItems=\"center\" justifyContent=\"space-between\" { ...props } />\n);\n","import * as React from 'react';\nimport { useId } from 'react';\nimport { Accordion, AccordionSummary, AccordionDetails, AccordionSummaryText, Stack } from '@elementor/ui';\n\nexport type AccordionSectionProps = React.PropsWithChildren< {\n\ttitle: React.ReactNode;\n} >;\n\nexport const AccordionSection = ( { title, children }: AccordionSectionProps ) => {\n\tconst uid = useId();\n\tconst labelId = `label-${ uid }`;\n\tconst contentId = `content-${ uid }`;\n\n\t// TODO: Change to collapsible list item\n\treturn (\n\t\t<Accordion disableGutters defaultExpanded>\n\t\t\t<AccordionSummary aria-controls={ contentId } id={ labelId }>\n\t\t\t\t<AccordionSummaryText primaryTypographyProps={ { variant: 'caption' } }>{ title }</AccordionSummaryText>\n\t\t\t</AccordionSummary>\n\t\t\t<AccordionDetails id={ contentId } aria-labelledby={ labelId }>\n\t\t\t\t<Stack gap={ 2.5 }>{ children }</Stack>\n\t\t\t</AccordionDetails>\n\t\t</Accordion>\n\t);\n};\n","import * as React from 'react';\nimport type { ComponentProps } from 'react';\nimport { getControlReplacement } from './control-replacement';\nimport { useControl } from './control-context';\nimport { createError } from '@elementor/utils';\nimport { ControlType, ControlTypes, getControlByType } from './controls-registry';\n\nexport type ControlTypeErrorContext = {\n\ttype: string;\n};\n\nconst ControlTypeError = createError< ControlTypeErrorContext >( {\n\tcode: 'CONTROL_TYPE_NOT_FOUND',\n\tmessage: `Control type not found.`,\n} );\n\ntype IsRequired< T, K extends keyof T > = object extends Pick< T, K > ? false : true;\n\ntype AnyPropertyRequired< T > = {\n\t[ K in keyof T ]: IsRequired< T, K >;\n}[ keyof T ] extends true\n\t? true\n\t: false;\n\ntype ControlProps< T extends ControlType > = AnyPropertyRequired< ComponentProps< ControlTypes[ T ] > > extends true\n\t? {\n\t\t\tprops: ComponentProps< ControlTypes[ T ] >;\n\t\t\ttype: T;\n\t }\n\t: {\n\t\t\tprops?: ComponentProps< ControlTypes[ T ] >;\n\t\t\ttype: T;\n\t };\n\nexport const Control = < T extends ControlType >( { props, type }: ControlProps< T > ) => {\n\tconst { value } = useControl();\n\n\tconst ControlByType = getControlByType( type );\n\n\tif ( ! ControlByType ) {\n\t\tthrow new ControlTypeError( {\n\t\t\tcontext: { type },\n\t\t} );\n\t}\n\n\tconst ControlComponent = getControlReplacement( { value } ) || ControlByType;\n\n\t// @ts-expect-error ControlComponent props are inferred from the type (T).\n\treturn <ControlComponent { ...props } />;\n};\n","import * as React from 'react';\nimport { Button, Card, CardMedia, CardOverlay } from '@elementor/ui';\nimport { useControl } from '../control-context';\nimport { UploadIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\nimport { useWpMediaAttachment, useWpMediaFrame } from '@elementor/wp-media';\n\ntype Image = {\n\t$$type: 'image';\n\tvalue:\n\t\t| {\n\t\t\t\tattachmentId: number;\n\t\t\t\turl?: never;\n\t\t }\n\t\t| {\n\t\t\t\tattachmentId?: never;\n\t\t\t\turl: string;\n\t\t };\n};\n\nexport const ImageControl = () => {\n\tconst { value, setValue } = useControl< Image >();\n\tconst { data: attachment } = useWpMediaAttachment( value?.value?.attachmentId );\n\tconst src = attachment?.url ?? value?.value?.url;\n\n\tconst { open } = useWpMediaFrame( {\n\t\ttypes: [ 'image' ],\n\t\tmultiple: false,\n\t\tselected: value?.value?.attachmentId,\n\t\tonSelect: ( selectedAttachment ) => {\n\t\t\tsetValue( {\n\t\t\t\t$$type: 'image',\n\t\t\t\tvalue: {\n\t\t\t\t\tattachmentId: selectedAttachment.id,\n\t\t\t\t},\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<CardOverlay>\n\t\t\t\t<Button\n\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tvariant=\"outlined\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\topen( { mode: 'browse' } );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Select Image', 'elementor' ) }\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tcolor=\"inherit\"\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\tstartIcon={ <UploadIcon /> }\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\topen( { mode: 'upload' } );\n\t\t\t\t\t} }\n\t\t\t\t>\n\t\t\t\t\t{ __( 'Upload Image', 'elementor' ) }\n\t\t\t\t</Button>\n\t\t\t</CardOverlay>\n\t\t</Card>\n\t);\n};\n","import * as React from 'react';\nimport { TextField } from '@elementor/ui';\nimport { useControl } from '../control-context';\n\nexport const TextControl = ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useControl< string >( '' );\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => setValue( event.target.value );\n\n\treturn <TextField type=\"text\" size=\"tiny\" value={ value } onChange={ handleChange } placeholder={ placeholder } />;\n};\n","import * as React from 'react';\nimport { TextField } from '@elementor/ui';\nimport { useControl } from '../control-context';\n\ntype Props = {\n\tplaceholder?: string;\n};\n\nexport const TextAreaControl = ( { placeholder }: Props ) => {\n\tconst { value, setValue } = useControl< string >();\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<TextField\n\t\t\tsize=\"tiny\"\n\t\t\tmultiline\n\t\t\tfullWidth\n\t\t\trows={ 5 }\n\t\t\tvalue={ value }\n\t\t\tonChange={ handleChange }\n\t\t\tplaceholder={ placeholder }\n\t\t/>\n\t);\n};\n","import * as React from 'react';\nimport { InputAdornment } from '@elementor/ui';\nimport { TransformablePropValue } from '../../types';\nimport { useControl } from '../control-context';\nimport { useSyncExternalState } from '../hooks/use-sync-external-state';\nimport { SelectionEndAdornment, TextFieldInnerSelection } from '../components/text-field-inner-selection';\n\nexport type Unit = 'px' | '%' | 'em' | 'rem' | 'vw';\n\nconst defaultUnits: Unit[] = [ 'px', '%', 'em', 'rem', 'vw' ];\n\nexport type SizeControlValue = TransformablePropValue< { unit: Unit; size: number } >;\n\nexport type SizeControlProps = {\n\tplaceholder?: string;\n\tstartIcon?: React.ReactNode;\n\tunits?: Unit[];\n};\n\nexport const SizeControl = ( { units = defaultUnits, placeholder, startIcon }: SizeControlProps ) => {\n\tconst { value, setValue } = useControl< SizeControlValue >();\n\n\tconst [ state, setState ] = useSyncExternalState< SizeControlValue >( {\n\t\texternal: value,\n\t\tsetExternal: setValue,\n\t\tpersistWhen: ( controlValue ) => !! controlValue?.value.size || controlValue?.value.size === 0,\n\t\tfallback: ( controlValue ) => ( {\n\t\t\t$$type: 'size',\n\t\t\tvalue: { unit: controlValue?.value.unit || 'px', size: NaN },\n\t\t} ),\n\t} );\n\n\tconst handleUnitChange = ( unit: Unit ) => {\n\t\tsetState( ( prev ) => ( {\n\t\t\t...prev,\n\t\t\tvalue: {\n\t\t\t\t...prev.value,\n\t\t\t\tunit,\n\t\t\t},\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\tvalue: {\n\t\t\t\t...prev.value,\n\t\t\t\tsize: size || size === '0' ? parseFloat( size ) : NaN,\n\t\t\t},\n\t\t} ) );\n\t};\n\n\treturn (\n\t\t<TextFieldInnerSelection\n\t\t\tendAdornment={\n\t\t\t\t<SelectionEndAdornment options={ units } onClick={ handleUnitChange } value={ state.value.unit } />\n\t\t\t}\n\t\t\tplaceholder={ placeholder }\n\t\t\tstartAdornment={ startIcon ?? <InputAdornment position=\"start\">{ startIcon }</InputAdornment> }\n\t\t\ttype=\"number\"\n\t\t\tvalue={ Number.isNaN( state.value.size ) ? '' : state.value.size }\n\t\t\tonChange={ handleSizeChange }\n\t\t/>\n\t);\n};\n","import { useEffect, useState } from 'react';\n\ntype UseInternalStateOptions< TValue > = {\n\texternal: TValue | undefined;\n\tsetExternal: ( value: TValue | undefined ) => void;\n\tpersistWhen: ( value: TValue | undefined ) => boolean;\n\tfallback: ( value: TValue | undefined ) => TValue;\n};\n\nexport const useSyncExternalState = < TValue, >( {\n\texternal,\n\tsetExternal,\n\tpersistWhen,\n\tfallback,\n}: UseInternalStateOptions< TValue > ) => {\n\tfunction toExternal( internalValue: TValue | undefined ) {\n\t\tif ( persistWhen( internalValue ) ) {\n\t\t\treturn internalValue;\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tfunction toInternal( externalValue: TValue | undefined, internalValue: TValue | undefined ) {\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, undefined ) );\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 { PropValue } from '../../types';\nimport * as React from 'react';\nimport { bindMenu, bindTrigger, Button, InputAdornment, Menu, MenuItem, TextField, usePopupState } from '@elementor/ui';\nimport { useId } from 'react';\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 = ( {\n\tplaceholder,\n\ttype,\n\tvalue,\n\tonChange,\n\tendAdornment,\n\tstartAdornment,\n}: TextFieldInnerSelectionProps ) => {\n\treturn (\n\t\t<TextField\n\t\t\tsize=\"tiny\"\n\t\t\ttype={ type }\n\t\t\tvalue={ value }\n\t\t\tonChange={ onChange }\n\t\t\tplaceholder={ placeholder }\n\t\t\tInputProps={ {\n\t\t\t\tendAdornment,\n\t\t\t\tstartAdornment,\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 * as React from 'react';\nimport { MenuItem, Select, SelectChangeEvent } from '@elementor/ui';\nimport { useControl } from '../control-context';\nimport { PropValue } from '../../types';\n\ntype Props< T > = {\n\toptions: Array< { label: string; value: T; disabled?: boolean } >;\n};\n\nexport const SelectControl = < T extends PropValue >( { options }: Props< T > ) => {\n\tconst { value, setValue } = useControl< T >();\n\n\tconst handleChange = ( event: SelectChangeEvent< T > ) => {\n\t\tsetValue( event.target.value as T );\n\t};\n\n\treturn (\n\t\t<Select size=\"tiny\" value={ value ?? '' } onChange={ handleChange }>\n\t\t\t{ options.map( ( { label, ...props } ) => (\n\t\t\t\t<MenuItem key={ props.value } { ...props }>\n\t\t\t\t\t{ label }\n\t\t\t\t</MenuItem>\n\t\t\t) ) }\n\t\t</Select>\n\t);\n};\n","import { ImageControl } from './control-types/image-control';\nimport { TextControl } from './control-types/text-control';\nimport { TextAreaControl } from './control-types/text-area-control';\nimport { SizeControl } from './control-types/size-control';\nimport { SelectControl } from './control-types/select-control';\n\nexport const controlTypes = {\n\timage: ImageControl,\n\ttext: TextControl,\n\ttextarea: TextAreaControl,\n\tsize: SizeControl,\n\tselect: SelectControl,\n} as const;\n\nexport type ControlTypes = typeof controlTypes;\n\nexport type ControlType = keyof ControlTypes;\n\nexport const getControlByType = ( type: ControlType ) => controlTypes[ type ];\n","import * as React from 'react';\nimport { StyleContext } from '../contexts/style-context';\nimport { useElementContext } from '../contexts/element-context';\nimport { useElementStyles } from '../hooks/use-element-styles';\nimport { Stack } from '@elementor/ui';\nimport { SizeSection } from './style-sections/size-section';\nimport { TypographySection } from './style-sections/typography-section/typography-section';\nimport { PositionSection } from './style-sections/position-section/position-section';\nimport { StyleDefinition } from '@elementor/editor-style';\nimport { SpacingSection } from './style-sections/spacing-section/spacing-section';\n\nconst CLASSES_PROP_KEY = 'classes';\n\nexport const StyleTab = () => {\n\tconst styleDefinition = useStyleDefinition();\n\tconst classesProp = useClassesProp();\n\n\treturn (\n\t\t<StyleContext selectedStyleDef={ styleDefinition } selectedClassesProp={ classesProp }>\n\t\t\t<Stack>\n\t\t\t\t<SizeSection />\n\t\t\t\t<PositionSection />\n\t\t\t\t<TypographySection />\n\t\t\t\t<SpacingSection />\n\t\t\t</Stack>\n\t\t</StyleContext>\n\t);\n};\n\nfunction useClassesProp(): string {\n\tconst { elementType } = useElementContext();\n\n\tconst prop = Object.entries( elementType.propsSchema ).find( ( [ , { type } ] ) => type.key === CLASSES_PROP_KEY );\n\n\tif ( ! prop ) {\n\t\tthrow new Error( 'Element does not have a classes prop' );\n\t}\n\n\treturn prop[ 0 ];\n}\n\nfunction useStyleDefinition(): StyleDefinition | null {\n\tconst { element } = useElementContext();\n\tconst elementStyles = useElementStyles( element.id );\n\n\treturn Object.values( elementStyles || {} )[ 0 ] ?? null;\n}\n","import * as React from 'react';\nimport { createContext, ReactNode, useContext } from 'react';\nimport { useActiveBreakpoint } from '@elementor/editor-responsive';\nimport { StyleDefinition, StyleVariant } from '@elementor/editor-style';\n\ntype ContextValue = {\n\tselectedStyleDef: StyleDefinition | null;\n\tselectedMeta: StyleVariant[ 'meta' ];\n\tselectedClassesProp: string;\n};\n\nconst Context = createContext< ContextValue | null >( null );\n\ntype Props = {\n\tchildren: ReactNode;\n\tselectedStyleDef: StyleDefinition | null;\n\tselectedClassesProp: string;\n};\n\nexport function StyleContext( { children, selectedStyleDef, selectedClassesProp }: Props ) {\n\tconst breakpoint = useActiveBreakpoint();\n\t// TODO: Handle state when we support it.\n\tconst selectedMeta = { breakpoint, state: null } as const;\n\n\treturn (\n\t\t<Context.Provider value={ { selectedStyleDef, selectedMeta, selectedClassesProp } }>\n\t\t\t{ children }\n\t\t</Context.Provider>\n\t);\n}\n\nexport function useStyleContext() {\n\tconst context = useContext( Context );\n\n\tif ( ! context ) {\n\t\tthrow new Error( 'UseStyleContext must be used within a StyleContextProvider' );\n\t}\n\n\treturn context;\n}\n","import { __privateUseListenTo as useListenTo, commandEndEvent } from '@elementor/editor-v1-adapters';\nimport { getElementStyles } from '../sync/get-element-styles';\nimport { ElementID } from '../types';\n\nexport const useElementStyles = ( elementID: ElementID ) => {\n\treturn useListenTo(\n\t\tcommandEndEvent( 'document/atomic-widgets/styles' ),\n\t\t() => {\n\t\t\treturn getElementStyles( elementID );\n\t\t},\n\t\t[ elementID ]\n\t);\n};\n","import getContainer from './get-container';\nimport { ElementID } from '../types';\nimport { StyleDefinition } from '@elementor/editor-style';\n\nexport const getElementStyles = ( elementID: ElementID ): Record< string, StyleDefinition > | null => {\n\tconst container = getContainer( elementID );\n\n\treturn container?.model.get( 'styles' ) || null;\n};\n","import * as React from 'react';\nimport { AccordionSection } from '../accordion-section';\nimport { StyleControl, StyleControlProps } from '../../controls/style-control';\nimport { Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\nimport { Control as BaseControl } from '../../controls/control';\nimport { ControlContainer } from '../../controls/components/control-container';\n\nexport const SizeSection = () => {\n\treturn (\n\t\t<AccordionSection title={ __( 'Size', 'elementor' ) }>\n\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t<Stack direction=\"row\" gap={ 2 }>\n\t\t\t\t\t<Control bind=\"width\" label={ __( 'Width', 'elementor' ) } />\n\t\t\t\t\t<Control bind=\"height\" label={ __( 'Height', 'elementor' ) } />\n\t\t\t\t</Stack>\n\t\t\t\t<Stack gap={ 1.5 } sx={ { pt: 1.5 } }>\n\t\t\t\t\t<Stack direction=\"row\" gap={ 2 }>\n\t\t\t\t\t\t<Control bind=\"minWidth\" label={ __( 'Min. Width', 'elementor' ) } />\n\t\t\t\t\t\t<Control bind=\"minHeight\" label={ __( 'Min. Height', 'elementor' ) } />\n\t\t\t\t\t</Stack>\n\t\t\t\t\t<Stack direction=\"row\" gap={ 2 }>\n\t\t\t\t\t\t<Control bind=\"maxWidth\" label={ __( 'Max. Width', 'elementor' ) } />\n\t\t\t\t\t\t<Control bind=\"maxHeight\" label={ __( 'Max. Height', 'elementor' ) } />\n\t\t\t\t\t</Stack>\n\t\t\t\t</Stack>\n\t\t\t</Stack>\n\t\t</AccordionSection>\n\t);\n};\n\ntype ControlProps = {\n\tbind: StyleControlProps[ 'bind' ];\n\tlabel: string;\n};\n\nconst Control = ( { label, bind }: ControlProps ) => {\n\treturn (\n\t\t<StyleControl bind={ bind }>\n\t\t\t<ControlContainer direction=\"column\">\n\t\t\t\t<StyleControl.Label>{ label }</StyleControl.Label>\n\t\t\t\t<BaseControl type={ 'size' } />\n\t\t\t</ControlContainer>\n\t\t</StyleControl>\n\t);\n};\n","import * as React from 'react';\nimport { PropKey } from '../types';\nimport { ControlContext } from '../controls/control-context';\nimport { ControlLabel } from '../components/control-label';\nimport { useStyleControl } from './hooks/use-style-control';\n\nexport type StyleControlProps = {\n\tbind: PropKey;\n\tchildren: React.ReactNode;\n};\n\nexport const StyleControl = ( { bind, children }: StyleControlProps ) => {\n\tconst [ value, setValue ] = useStyleControl( bind );\n\n\treturn <ControlContext.Provider value={ { bind, value, setValue } }>{ children }</ControlContext.Provider>;\n};\n\n// TODO: When we start using useControl inside the label component, we should create a new component for it,\n// and keep ControlLabel as a simple label component without context.\nStyleControl.Label = ControlLabel;\n","import { commandEndEvent, __privateUseListenTo as useListenTo } from '@elementor/editor-v1-adapters';\nimport { ElementID, PropKey, PropValue } from '../types';\nimport { getElementStyles } from '../sync/get-element-styles';\nimport { StyleDefinition, StyleDefinitionID, StyleVariant } from '@elementor/editor-style';\n\nexport type UseElementStylePropArgs = {\n\telementID: ElementID;\n\tstyleDefID?: StyleDefinitionID;\n\tmeta: StyleVariant[ 'meta' ];\n\tpropName: PropKey;\n};\n\nexport const useElementStyleProp = < T extends PropValue >( {\n\telementID,\n\tstyleDefID,\n\tmeta,\n\tpropName,\n}: UseElementStylePropArgs ): T | null => {\n\treturn useListenTo(\n\t\tcommandEndEvent( 'document/atomic-widgets/styles' ),\n\t\t() => {\n\t\t\t// TODO: return default value for style prop\n\t\t\tif ( ! styleDefID ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst styleDef = getElementStyles( elementID )?.[ styleDefID ];\n\n\t\t\tif ( ! styleDef ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tconst variant = getVariantByMeta( styleDef, meta );\n\n\t\t\treturn variant?.props[ propName ] ?? null;\n\t\t},\n\t\t[ elementID, styleDefID, propName, meta ]\n\t) as T;\n};\n\nfunction getVariantByMeta( styleDef: StyleDefinition, meta: StyleVariant[ 'meta' ] ) {\n\treturn styleDef.variants.find( ( variant ) => {\n\t\treturn variant.meta.breakpoint === meta.breakpoint && variant.meta.state === meta.state;\n\t} );\n}\n","import { __privateRunCommand as runCommand } from '@elementor/editor-v1-adapters';\nimport { ElementID, PropKey, Props } from '../types';\nimport getContainer from './get-container';\nimport { StyleDefinitionID, StyleVariant } from '@elementor/editor-style';\n\nexport type UpdateStyleProps = {\n\telementID: ElementID;\n\tstyleDefID?: StyleDefinitionID;\n\tmeta: StyleVariant[ 'meta' ];\n\tprops: Props;\n\tbind: PropKey;\n};\n\nexport const updateStyle = ( { elementID, styleDefID, meta, props, bind }: UpdateStyleProps ) => {\n\tconst container = getContainer( elementID );\n\n\trunCommand( 'document/atomic-widgets/styles', {\n\t\tcontainer,\n\t\tstyleDefID,\n\t\tbind,\n\t\tmeta,\n\t\tprops,\n\t} );\n};\n","import { useElementContext } from '../../contexts/element-context';\nimport { useStyleContext } from '../../contexts/style-context';\nimport { useElementStyleProp } from '../../hooks/use-element-style-prop';\nimport { updateStyle } from '../../sync/update-style';\nimport { PropKey, PropValue } from '../../types';\n\nexport const useStyleControl = < T extends PropValue >( propName: PropKey ) => {\n\tconst { element } = useElementContext();\n\tconst { selectedStyleDef, selectedMeta, selectedClassesProp } = useStyleContext();\n\n\tconst value = useElementStyleProp< T >( {\n\t\telementID: element.id,\n\t\tstyleDefID: selectedStyleDef?.id,\n\t\tmeta: selectedMeta,\n\t\tpropName,\n\t} );\n\n\tconst setValue = ( newValue: T ) => {\n\t\tupdateStyle( {\n\t\t\telementID: element.id,\n\t\t\tstyleDefID: selectedStyleDef?.id,\n\t\t\tprops: { [ propName ]: newValue },\n\t\t\tmeta: selectedMeta,\n\t\t\tbind: selectedClassesProp,\n\t\t} );\n\t};\n\n\treturn [ value, setValue ] as const;\n};\n","import * as React from 'react';\nimport { AccordionSection } from '../../accordion-section';\nimport { Divider, Stack } from '@elementor/ui';\nimport { TextStyleControl } from './text-style-control';\nimport { __ } from '@wordpress/i18n';\nimport { FontSizeControl } from './font-size-control';\nimport { FontWeightControl } from './font-weight-control';\nimport { TextColorControl } from './text-color-control';\nimport { LetterSpacingControl } from './letter-spacing-control';\nimport { WordSpacingControl } from './word-spacing-control';\nimport { CollapsibleContent } from '../../collapsible-content';\nimport { TransformControl } from './transform-control';\n\nexport const TypographySection = () => {\n\treturn (\n\t\t<AccordionSection title={ __( 'Typography', 'elementor' ) }>\n\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t<FontWeightControl />\n\t\t\t\t<FontSizeControl />\n\t\t\t\t<Divider />\n\t\t\t\t<TextColorControl />\n\t\t\t\t<CollapsibleContent>\n\t\t\t\t\t<Stack gap={ 1.5 } sx={ { pt: 1.5 } }>\n\t\t\t\t\t\t<LetterSpacingControl />\n\t\t\t\t\t\t<WordSpacingControl />\n\t\t\t\t\t\t<Divider />\n\t\t\t\t\t\t<TextStyleControl />\n\t\t\t\t\t\t<TransformControl />\n\t\t\t\t\t</Stack>\n\t\t\t\t</CollapsibleContent>\n\t\t\t</Stack>\n\t\t</AccordionSection>\n\t);\n};\n","import * as React from 'react';\nimport { ToggleButton as ToggleButtonBase, ToggleButtonGroup, ToggleButtonProps } from '@elementor/ui';\nimport { ItalicIcon, StrikethroughIcon, UnderlineIcon } from '@elementor/icons';\nimport { ControlLabel } from '../../control-label';\nimport { useStyleControl } from '../../../controls/hooks/use-style-control';\nimport { __ } from '@wordpress/i18n';\nimport { ControlContainer } from '../../../controls/components/control-container';\n\nconst buttonSize = 'tiny';\n\nexport const TextStyleControl = () => {\n\tconst [ fontStyle, setFontStyle ] = useStyleControl< string | null >( 'fontStyle' );\n\tconst [ textDecoration, setTextDecoration ] = useStyleControl< string | null >( 'textDecoration' );\n\n\tconst formats = [ fontStyle, ...( textDecoration || '' ).split( ' ' ) ];\n\n\treturn (\n\t\t<ControlContainer>\n\t\t\t<ControlLabel>{ __( 'Style', 'elementor' ) }</ControlLabel>\n\t\t\t<ToggleButtonGroup value={ formats }>\n\t\t\t\t<ToggleButton\n\t\t\t\t\tvalue=\"italic\"\n\t\t\t\t\tonChange={ ( v ) => setFontStyle( fontStyle === v ? null : v ) }\n\t\t\t\t\taria-label=\"italic\"\n\t\t\t\t\tsx={ { marginLeft: 'auto' } }\n\t\t\t\t>\n\t\t\t\t\t<ItalicIcon fontSize={ buttonSize } />\n\t\t\t\t</ToggleButton>\n\t\t\t\t<ShorthandControl\n\t\t\t\t\tvalue=\"line-through\"\n\t\t\t\t\tcurrentValues={ textDecoration || '' }\n\t\t\t\t\tupdateValues={ setTextDecoration }\n\t\t\t\t\taria-label=\"line-through\"\n\t\t\t\t>\n\t\t\t\t\t<StrikethroughIcon fontSize={ buttonSize } />\n\t\t\t\t</ShorthandControl>\n\t\t\t\t<ShorthandControl\n\t\t\t\t\tvalue=\"underline\"\n\t\t\t\t\tcurrentValues={ textDecoration || '' }\n\t\t\t\t\tupdateValues={ setTextDecoration }\n\t\t\t\t\taria-label=\"underline\"\n\t\t\t\t>\n\t\t\t\t\t<UnderlineIcon fontSize={ buttonSize } />\n\t\t\t\t</ShorthandControl>\n\t\t\t</ToggleButtonGroup>\n\t\t</ControlContainer>\n\t);\n};\n\ntype ShorthandControlProps = React.PropsWithChildren< {\n\tvalue: string;\n\tcurrentValues: string;\n\tupdateValues: ( newValue: string | null ) => void;\n\t'aria-label': string;\n} >;\n\nexport const ShorthandControl = ( {\n\tchildren,\n\tvalue,\n\tcurrentValues,\n\tupdateValues,\n\t'aria-label': ariaLabel,\n}: ShorthandControlProps ) => {\n\tconst valuesArr = currentValues.split( ' ' ).filter( Boolean );\n\tconst selected = valuesArr.includes( value );\n\n\tconst toggleValue = ( newValue: string ) => {\n\t\tif ( selected ) {\n\t\t\tupdateValues( valuesArr.filter( ( v ) => v !== newValue ).join( ' ' ) || null );\n\t\t} else {\n\t\t\tupdateValues( [ ...valuesArr, newValue ].join( ' ' ) );\n\t\t}\n\t};\n\n\treturn (\n\t\t<ToggleButton value={ value } onChange={ toggleValue } selected={ selected } aria-label={ ariaLabel }>\n\t\t\t{ children }\n\t\t</ToggleButton>\n\t);\n};\n\ntype ControlToggleButtonProps = Omit< ToggleButtonProps, 'onChange' > & {\n\tonChange: ( newValue: string ) => void;\n};\n\nconst ToggleButton = ( { onChange, ...props }: ControlToggleButtonProps ) => {\n\tconst handleChange = ( _e: React.MouseEvent< HTMLElement >, newValue: string ) => {\n\t\tonChange( newValue );\n\t};\n\n\treturn <ToggleButtonBase { ...props } onChange={ handleChange } size={ buttonSize } />;\n};\n","import * as React from 'react';\nimport { StyleControl } from '../../../controls/style-control';\nimport { SizeControl } from '../../../controls/control-types/size-control';\nimport { ControlContainer } from '../../../controls/components/control-container';\nimport { __ } from '@wordpress/i18n';\n\nexport const FontSizeControl = () => {\n\treturn (\n\t\t<StyleControl bind=\"font-size\">\n\t\t\t<ControlContainer>\n\t\t\t\t<StyleControl.Label>{ __( 'Font Size', 'elementor' ) }</StyleControl.Label>\n\t\t\t\t<SizeControl />\n\t\t\t</ControlContainer>\n\t\t</StyleControl>\n\t);\n};\n","import * as React from 'react';\nimport { StyleControl } from '../../../controls/style-control';\nimport { SelectControl } from '../../../controls/control-types/select-control';\nimport { ControlContainer } from '../../../controls/components/control-container';\nimport { __ } from '@wordpress/i18n';\n\nconst fontWeightOptions = [\n\t{ label: __( 'Light - 400', 'elementor' ), value: 400 },\n\t{ label: __( 'Regular - 500', 'elementor' ), value: 500 },\n\t{ label: __( 'Semi Bold - 600', 'elementor' ), value: 600 },\n\t{ label: __( 'Bold - 700', 'elementor' ), value: 700 },\n\t{ label: __( 'Black - 900', 'elementor' ), value: 900 },\n];\n\nexport const FontWeightControl = () => {\n\treturn (\n\t\t<StyleControl bind=\"fontWeight\">\n\t\t\t<ControlContainer>\n\t\t\t\t<StyleControl.Label>{ __( 'Font Weight', 'elementor' ) }</StyleControl.Label>\n\t\t\t\t<SelectControl options={ fontWeightOptions } />\n\t\t\t</ControlContainer>\n\t\t</StyleControl>\n\t);\n};\n","import * as React from 'react';\nimport { StyleControl } from '../../../controls/style-control';\nimport { ControlContainer } from '../../../controls/components/control-container';\nimport { __ } from '@wordpress/i18n';\nimport { ColorControl } from '../../../controls/control-types/color-control';\n\nexport const TextColorControl = () => {\n\treturn (\n\t\t<StyleControl bind=\"color\">\n\t\t\t<ControlContainer>\n\t\t\t\t<StyleControl.Label>{ __( 'Text Color', 'elementor' ) }</StyleControl.Label>\n\t\t\t\t<ColorControl />\n\t\t\t</ControlContainer>\n\t\t</StyleControl>\n\t);\n};\n","import * as React from 'react';\nimport { UnstableColorPicker } from '@elementor/ui';\nimport { useControl } from '../control-context';\n\nexport const ColorControl = () => {\n\tconst { value, setValue } = useControl< string >();\n\n\tconst handleChange = debounce( ( selectedColor: string ) => {\n\t\tsetValue( selectedColor );\n\t} );\n\n\treturn <UnstableColorPicker value={ value } onChange={ handleChange }></UnstableColorPicker>;\n};\n\n// TODO: Remove this when the color picker component sends one event per color change [DES-422].\nconst debounce = < TArgs extends unknown[], TReturn >( func: ( ...args: TArgs ) => TReturn, wait = 300 ) => {\n\tlet timer: ReturnType< typeof setTimeout >;\n\n\treturn ( ...args: TArgs ) => {\n\t\tclearTimeout( timer );\n\n\t\ttimer = setTimeout( () => func( ...args ), wait );\n\t};\n};\n","import * as React from 'react';\nimport { StyleControl } from '../../../controls/style-control';\nimport { SizeControl } from '../../../controls/control-types/size-control';\nimport { ControlContainer } from '../../../controls/components/control-container';\nimport { __ } from '@wordpress/i18n';\n\nexport const LetterSpacingControl = () => {\n\treturn (\n\t\t<StyleControl bind=\"letter-spacing\">\n\t\t\t<ControlContainer>\n\t\t\t\t<StyleControl.Label>{ __( 'Letter Spacing', 'elementor' ) }</StyleControl.Label>\n\t\t\t\t<SizeControl />\n\t\t\t</ControlContainer>\n\t\t</StyleControl>\n\t);\n};\n","import * as React from 'react';\nimport { StyleControl } from '../../../controls/style-control';\nimport { SizeControl } from '../../../controls/control-types/size-control';\nimport { ControlContainer } from '../../../controls/components/control-container';\nimport { __ } from '@wordpress/i18n';\n\nexport const WordSpacingControl = () => {\n\treturn (\n\t\t<StyleControl bind=\"word-spacing\">\n\t\t\t<ControlContainer>\n\t\t\t\t<StyleControl.Label>{ __( 'Word Spacing', 'elementor' ) }</StyleControl.Label>\n\t\t\t\t<SizeControl />\n\t\t\t</ControlContainer>\n\t\t</StyleControl>\n\t);\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { ChevronDownIcon } from '@elementor/icons';\nimport { Button, Collapse, Stack, styled } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\ntype CollapsibleContentProps = React.PropsWithChildren< {\n\tdefaultOpen?: boolean;\n} >;\n\nexport const CollapsibleContent = ( { children, defaultOpen = false }: CollapsibleContentProps ) => {\n\tconst [ open, setOpen ] = useState( defaultOpen );\n\n\tconst handleToggle = () => {\n\t\tsetOpen( ( prevOpen ) => ! prevOpen );\n\t};\n\n\treturn (\n\t\t<Stack sx={ { py: 0.5 } }>\n\t\t\t<Button\n\t\t\t\tfullWidth\n\t\t\t\tsize=\"small\"\n\t\t\t\tcolor=\"secondary\"\n\t\t\t\tvariant=\"outlined\"\n\t\t\t\tonClick={ handleToggle }\n\t\t\t\tendIcon={ <ChevronIcon open={ open } /> }\n\t\t\t>\n\t\t\t\t{ open ? __( 'Show less', 'elementor' ) : __( 'Show more', 'elementor' ) }\n\t\t\t</Button>\n\t\t\t<Collapse in={ open } timeout=\"auto\">\n\t\t\t\t{ children }\n\t\t\t</Collapse>\n\t\t</Stack>\n\t);\n};\n\n// TODO: Replace this with future Rotate component that will be implemented in elementor-ui\nconst ChevronIcon = styled( ChevronDownIcon, {\n\tshouldForwardProp: ( prop ) => prop !== 'open',\n} )< { open: boolean } >( ( { theme, open } ) => ( {\n\ttransform: open ? 'rotate(180deg)' : 'rotate(0)',\n\ttransition: theme.transitions.create( 'transform', {\n\t\tduration: theme.transitions.duration.standard,\n\t} ),\n} ) );\n","import * as React from 'react';\nimport { ControlContainer } from '../../../controls/components/control-container';\nimport { StyleControl } from '../../../controls/style-control';\nimport { __ } from '@wordpress/i18n';\nimport { ToggleControl } from '../../../controls/control-types/toggle-control';\nimport { LetterCaseIcon, LetterCaseLowerIcon, LetterCaseUpperIcon } from '@elementor/icons';\n\nconst options = [\n\t{ value: 'capitalize', label: __( 'Capitalize', 'elementor' ), icon: LetterCaseIcon },\n\t{ value: 'uppercase', label: __( 'Uppercase', 'elementor' ), icon: LetterCaseUpperIcon },\n\t{ value: 'lowercase', label: __( 'Lowercase', 'elementor' ), icon: LetterCaseLowerIcon },\n];\n\nexport const TransformControl = () => {\n\treturn (\n\t\t<ControlContainer>\n\t\t\t<StyleControl.Label>{ __( 'Transform', 'elementor' ) }</StyleControl.Label>\n\t\t\t<StyleControl bind={ 'text-transform' }>\n\t\t\t\t<ToggleControl options={ options } />\n\t\t\t</StyleControl>\n\t\t</ControlContainer>\n\t);\n};\n","import * as React from 'react';\nimport { useControl } from '../control-context';\nimport { ControlToggleButtonGroup, ToggleButtonGroupItem } from '../components/control-toggle-button-group';\nimport { PropValue } from '../../types';\n\ntype ToggleControlProps< T extends PropValue > = {\n\toptions: ToggleButtonGroupItem< T >[];\n};\n\nexport const ToggleControl = < T extends PropValue >( { options }: ToggleControlProps< T > ) => {\n\tconst { value, setValue } = useControl< T >();\n\n\tconst handleToggle = ( option: T | null ) => {\n\t\tsetValue( option || undefined );\n\t};\n\n\treturn (\n\t\t<ControlToggleButtonGroup\n\t\t\titems={ options }\n\t\t\tvalue={ value || null }\n\t\t\tonChange={ handleToggle }\n\t\t\texclusive={ true }\n\t\t/>\n\t);\n};\n","import * as React from 'react';\nimport { JSX } from 'react';\nimport { StackProps, styled, ToggleButton, ToggleButtonGroup } from '@elementor/ui';\n\nexport type ToggleButtonGroupItem< TValue > = {\n\tvalue: TValue;\n\tlabel: string;\n\ticon: JSX.ElementType;\n};\n\nconst StyledToggleButtonGroup = styled( ToggleButtonGroup )`\n\t${ ( { justify } ) => `justify-content: ${ justify };` }\n`;\n\ntype ExclusiveValue< TValue > = TValue | null;\ntype NonExclusiveValue< TValue > = TValue[];\n\ntype Props< TValue > = {\n\tjustify?: StackProps[ 'justifyContent' ];\n\tsize?: 'tiny' | 'small' | 'medium' | 'large';\n\titems: ToggleButtonGroupItem< TValue >[];\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}: Props< TValue > ) => {\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 justify={ justify } value={ value } onChange={ handleChange } exclusive={ exclusive }>\n\t\t\t{ items.map( ( { label, value: buttonValue, icon: Icon } ) => (\n\t\t\t\t<ToggleButton key={ buttonValue } value={ buttonValue } aria-label={ label } size={ size }>\n\t\t\t\t\t<Icon fontSize={ size } />\n\t\t\t\t</ToggleButton>\n\t\t\t) ) }\n\t\t</StyledToggleButtonGroup>\n\t);\n};\n","import * as React from 'react';\nimport { AccordionSection } from '../../accordion-section';\nimport { Stack } from '@elementor/ui';\nimport { ZIndexControl } from './z-index-control';\nimport { __ } from '@wordpress/i18n';\n\nexport const PositionSection = () => {\n\treturn (\n\t\t<AccordionSection title={ __( 'Position', 'elementor' ) }>\n\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t<ZIndexControl />\n\t\t\t</Stack>\n\t\t</AccordionSection>\n\t);\n};\n","import * as React from 'react';\nimport { StyleControl } from '../../../controls/style-control';\nimport { ControlContainer } from '../../../controls/components/control-container';\nimport { __ } from '@wordpress/i18n';\nimport { NumberControl } from '../../../controls/control-types/number-control';\n\nexport const ZIndexControl = () => {\n\treturn (\n\t\t<StyleControl bind=\"zIndex\">\n\t\t\t<ControlContainer>\n\t\t\t\t<StyleControl.Label>{ __( 'Z-Index', 'elementor' ) }</StyleControl.Label>\n\t\t\t\t<NumberControl />\n\t\t\t</ControlContainer>\n\t\t</StyleControl>\n\t);\n};\n","import * as React from 'react';\nimport { TextField } from '@elementor/ui';\nimport { useControl } from '../control-context';\n\nconst isEmptyOrNaN = ( value?: string | number ) =>\n\tvalue === undefined || value === '' || Number.isNaN( Number( value ) );\n\nexport const NumberControl = ( { placeholder }: { placeholder?: string } ) => {\n\tconst { value, setValue } = useControl< number | undefined >();\n\n\tconst handleChange = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tconst eventValue: string = event.target.value;\n\t\tsetValue( isEmptyOrNaN( eventValue ) ? undefined : Number( eventValue ) );\n\t};\n\n\treturn (\n\t\t<TextField\n\t\t\tsize=\"tiny\"\n\t\t\ttype=\"number\"\n\t\t\tvalue={ isEmptyOrNaN( value ) ? '' : value }\n\t\t\tonChange={ handleChange }\n\t\t\tplaceholder={ placeholder }\n\t\t/>\n\t);\n};\n","import * as React from 'react';\nimport { AccordionSection } from '../../accordion-section';\nimport { Divider, Stack } from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\nimport { LinkedDimensionsControl } from './linked-dimensions-control';\nimport { StyleControl } from '../../../controls/style-control';\n\nexport const SpacingSection = () => {\n\treturn (\n\t\t<AccordionSection title={ __( 'Spacing', 'elementor' ) }>\n\t\t\t<Stack gap={ 1.5 }>\n\t\t\t\t<StyleControl bind={ 'padding' }>\n\t\t\t\t\t<LinkedDimensionsControl label={ __( 'Padding', 'elementor' ) } />\n\t\t\t\t</StyleControl>\n\t\t\t\t<Divider />\n\t\t\t\t<StyleControl bind={ 'margin' }>\n\t\t\t\t\t<LinkedDimensionsControl label={ __( 'Margin', 'elementor' ) } />\n\t\t\t\t</StyleControl>\n\t\t\t</Stack>\n\t\t</AccordionSection>\n\t);\n};\n","import { PropValue } from '../../../types';\nimport { SizeControl } from '../../../controls/control-types/size-control';\nimport * as React from 'react';\nimport { ControlContainer } from '../../../controls/components/control-container';\nimport { Stack, ToggleButton } from '@elementor/ui';\nimport { DetachIcon, LinkIcon, SideBottomIcon, SideLeftIcon, SideRightIcon, SideTopIcon } from '@elementor/icons';\nimport { ControlLabel } from '../../control-label';\nimport { ControlContext, useControl } from '../../../controls/control-context';\nimport { __ } from '@wordpress/i18n';\n\nexport type Position = 'top' | 'right' | 'bottom' | 'left';\n\nexport type LinkedDimensionsValue = {\n\t$$type: 'linked-dimensions';\n\tvalue: {\n\t\tisLinked: boolean;\n\t\ttop: PropValue;\n\t\tright: PropValue;\n\t\tbottom: PropValue;\n\t\tleft: PropValue;\n\t};\n};\n\nexport const LinkedDimensionsControl = ( { label }: { label: string } ) => {\n\tconst { value, setValue } = useControl< LinkedDimensionsValue >();\n\tconst { top, right, bottom, left, isLinked = false } = value?.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( {\n\t\t\t$$type: 'linked-dimensions',\n\t\t\tvalue: updatedValue,\n\t\t} );\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( {\n\t\t\t$$type: 'linked-dimensions',\n\t\t\tvalue: updatedValue,\n\t\t} );\n\t};\n\n\tconst LinkedIcon = isLinked ? LinkIcon : DetachIcon;\n\n\treturn (\n\t\t<>\n\t\t\t<Stack direction=\"row\" gap={ 2 }>\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 }>\n\t\t\t\t<ControlContainer direction={ 'column' }>\n\t\t\t\t\t<ControlLabel>{ __( 'Top', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t<Control\n\t\t\t\t\t\tbind={ 'top' }\n\t\t\t\t\t\tvalue={ top }\n\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\tstartIcon={ <SideTopIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t/>\n\t\t\t\t</ControlContainer>\n\t\t\t\t<ControlContainer direction={ 'column' }>\n\t\t\t\t\t<ControlLabel>{ __( 'Right', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t<Control\n\t\t\t\t\t\tbind={ 'right' }\n\t\t\t\t\t\tvalue={ right }\n\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\tstartIcon={ <SideRightIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t/>\n\t\t\t\t</ControlContainer>\n\t\t\t</Stack>\n\t\t\t<Stack direction=\"row\" gap={ 2 }>\n\t\t\t\t<ControlContainer direction={ 'column' }>\n\t\t\t\t\t<ControlLabel>{ __( 'Bottom', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t<Control\n\t\t\t\t\t\tbind={ 'bottom' }\n\t\t\t\t\t\tvalue={ bottom }\n\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\tstartIcon={ <SideBottomIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t/>\n\t\t\t\t</ControlContainer>\n\t\t\t\t<ControlContainer direction={ 'column' }>\n\t\t\t\t\t<ControlLabel>{ __( 'Left', 'elementor' ) }</ControlLabel>\n\t\t\t\t\t<Control\n\t\t\t\t\t\tbind={ 'left' }\n\t\t\t\t\t\tvalue={ left }\n\t\t\t\t\t\tsetValue={ setLinkedValue }\n\t\t\t\t\t\tstartIcon={ <SideLeftIcon fontSize={ 'tiny' } /> }\n\t\t\t\t\t/>\n\t\t\t\t</ControlContainer>\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<ControlContext.Provider\n\t\tvalue={ {\n\t\t\tbind,\n\t\t\tsetValue: ( newValue ) => setValue( bind, newValue ),\n\t\t\tvalue,\n\t\t} }\n\t>\n\t\t<SizeControl startIcon={ startIcon } />\n\t</ControlContext.Provider>\n);\n","import { panel } from './panel';\nimport { injectIntoLogic } from '@elementor/editor';\nimport { shouldUseV2Panel } from './sync/should-use-v2-panel';\nimport { EditingPanelHooks } from './components/editing-panel-hooks';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { __privateBlockDataCommand as blockDataCommand } from '@elementor/editor-v1-adapters';\nimport { init as initDynamics } from './dynamics/init';\n\nexport default function init() {\n\tregisterPanel( panel );\n\tblockV1Panel();\n\n\tinjectIntoLogic( {\n\t\tid: 'editing-panel-hooks',\n\t\tcomponent: EditingPanelHooks,\n\t} );\n\n\t// TODO: Move it from here once we have dynamic package.\n\tinitDynamics();\n}\n\nconst blockV1Panel = () => {\n\tblockDataCommand( {\n\t\tcommand: 'panel/editor/open',\n\t\tcondition: shouldUseV2Panel,\n\t} );\n};\n","import getSelectedElements from './get-selected-elements';\nimport getWidgetsCache from './get-widgets-cache';\n\nexport const shouldUseV2Panel = () => {\n\tconst selectedElements = getSelectedElements();\n\tconst widgetCache = getWidgetsCache();\n\n\tif ( selectedElements.length !== 1 ) {\n\t\treturn false;\n\t}\n\n\t// Check if the selected element has atomic controls, meaning it's a V2 element.\n\treturn !! widgetCache?.[ selectedElements[ 0 ].type ]?.atomic_controls;\n};\n","import { useEffect } from 'react';\nimport { commandStartEvent, __privateListenTo as listenTo } from '@elementor/editor-v1-adapters';\nimport { usePanelActions } from '../panel';\nimport { shouldUseV2Panel } from '../sync/should-use-v2-panel';\n\nexport const useOpenEditorPanel = () => {\n\tconst { open } = usePanelActions();\n\n\tuseEffect( () => {\n\t\treturn listenTo( commandStartEvent( 'panel/editor/open' ), () => {\n\t\t\tif ( shouldUseV2Panel() ) {\n\t\t\t\topen();\n\t\t\t}\n\t\t} );\n\t}, [] ); // eslint-disable-line react-hooks/exhaustive-deps\n};\n","import { useOpenEditorPanel } from '../hooks/use-open-editor-panel';\n\nexport const EditingPanelHooks = () => {\n\tuseOpenEditorPanel();\n\n\treturn null;\n};\n","import * as React from 'react';\nimport { useId } from 'react';\nimport { useControl } from '../../controls/control-context';\nimport { DynamicPropValue, DynamicTag } from '../types';\nimport { DynamicControl } from '../dynamic-control';\nimport { DatabaseIcon, SettingsIcon, XIcon } from '@elementor/icons';\nimport type { Control, ControlsSection } from '../../types';\nimport { DynamicSelection } from './dynamic-selection';\nimport { ControlType, getControlByType } from '../../controls/controls-registry';\nimport { ControlLabel } from '../../components/control-label';\nimport { Control as BaseControl } from '../../controls/control';\nimport { useDynamicTag } from '../hooks/use-dynamic-tag';\nimport {\n\tbindPopover,\n\tbindTrigger,\n\tBox,\n\tIconButton,\n\tPaper,\n\tPopover,\n\tStack,\n\tTypography,\n\tUnstableTag as Tag,\n\tusePopupState,\n\tTabs,\n\tDivider,\n\tuseTabs,\n\tTab,\n\tTabPanel,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nconst SIZE = 'tiny';\n\nexport const DynamicSelectionControl = () => {\n\tconst { bind, value, setValue } = useControl< DynamicPropValue | null >();\n\tconst { name: tagName = '' } = value?.value || {};\n\n\tconst selectionPopoverId = useId();\n\tconst selectionPopoverState = usePopupState( { variant: 'popover', popupId: selectionPopoverId } );\n\n\tconst dynamicTag = useDynamicTag( bind, tagName );\n\n\tconst removeDynamicTag = () => {\n\t\t// TODO: Implement static value restoration.\n\t\tsetValue( null );\n\t};\n\n\tif ( ! dynamicTag ) {\n\t\tthrow new Error( `Dynamic tag ${ tagName } not found` );\n\t}\n\n\treturn (\n\t\t<Box sx={ { width: '100%' } }>\n\t\t\t<Tag\n\t\t\t\tfullWidth\n\t\t\t\tshowActionsOnHover\n\t\t\t\tlabel={ dynamicTag.label }\n\t\t\t\tstartIcon={ <DatabaseIcon fontSize={ SIZE } /> }\n\t\t\t\t{ ...bindTrigger( selectionPopoverState ) }\n\t\t\t\tactions={\n\t\t\t\t\t<>\n\t\t\t\t\t\t<DynamicSettingsPopover dynamicTag={ dynamicTag } />\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={ removeDynamicTag }\n\t\t\t\t\t\t\taria-label={ __( 'Remove dynamic value', '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\tdisableScrollLock\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\t\t{ ...bindPopover( selectionPopoverState ) }\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<DatabaseIcon fontSize={ SIZE } sx={ { mr: 0.5 } } />\n\t\t\t\t\t\t<Typography variant=\"subtitle2\">{ __( 'Dynamic Tags', 'elementor' ) }</Typography>\n\t\t\t\t\t\t<IconButton size={ SIZE } sx={ { ml: 'auto' } } onClick={ selectionPopoverState.close }>\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\t\t\t\t\t<DynamicSelection onSelect={ selectionPopoverState.close } />\n\t\t\t\t</Stack>\n\t\t\t</Popover>\n\t\t</Box>\n\t);\n};\n\nexport const DynamicSettingsPopover = ( { dynamicTag }: { dynamicTag: DynamicTag } ) => {\n\tconst popupId = useId();\n\tconst settingsPopupState = usePopupState( { variant: 'popover', popupId } );\n\n\tconst hasDynamicSettings = !! dynamicTag.atomic_controls.length;\n\n\tif ( ! hasDynamicSettings ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<IconButton\n\t\t\t\tsize={ SIZE }\n\t\t\t\t{ ...bindTrigger( settingsPopupState ) }\n\t\t\t\taria-label={ __( 'Settings', 'elementor' ) }\n\t\t\t>\n\t\t\t\t<SettingsIcon fontSize={ SIZE } />\n\t\t\t</IconButton>\n\t\t\t<Popover\n\t\t\t\tdisableScrollLock\n\t\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'center' } }\n\t\t\t\t{ ...bindPopover( settingsPopupState ) }\n\t\t\t>\n\t\t\t\t<Paper component={ Stack } sx={ { minHeight: '300px', width: '220px' } }>\n\t\t\t\t\t<Stack direction=\"row\" alignItems=\"center\" px={ 1.5 } pt={ 2 } pb={ 1 }>\n\t\t\t\t\t\t<DatabaseIcon fontSize={ SIZE } sx={ { mr: 0.5 } } />\n\t\t\t\t\t\t<Typography variant=\"subtitle2\">{ dynamicTag.label }</Typography>\n\t\t\t\t\t\t<IconButton sx={ { ml: 'auto' } } size={ SIZE } onClick={ settingsPopupState.close }>\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\t\t\t\t\t<DynamicSettings controls={ dynamicTag.atomic_controls } />\n\t\t\t\t</Paper>\n\t\t\t</Popover>\n\t\t</>\n\t);\n};\n\nconst DynamicSettings = ( { controls }: { controls: DynamicTag[ 'atomic_controls' ] } ) => {\n\tconst tabs = controls.filter( ( { type } ) => type === 'section' ) as ControlsSection[];\n\tconst { getTabsProps, getTabProps, getTabPanelProps } = useTabs< number >( 0 );\n\n\tif ( ! tabs.length ) {\n\t\t// Dynamic must have hierarchical controls.\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<Tabs indicatorColor=\"secondary\" textColor=\"secondary\" { ...getTabsProps() }>\n\t\t\t\t{ tabs.map( ( { value }, index ) => (\n\t\t\t\t\t<Tab key={ index } label={ value.label } sx={ { px: 1, py: 0.5 } } { ...getTabProps( index ) } />\n\t\t\t\t) ) }\n\t\t\t</Tabs>\n\t\t\t<Divider />\n\n\t\t\t{ tabs.map( ( { value }, index ) => {\n\t\t\t\treturn (\n\t\t\t\t\t<TabPanel key={ index } sx={ { flexGrow: 1 } } { ...getTabPanelProps( index ) }>\n\t\t\t\t\t\t<Stack gap={ 1 } px={ 2 }>\n\t\t\t\t\t\t\t{ value.items.map( ( item ) => {\n\t\t\t\t\t\t\t\tif ( item.type === 'control' ) {\n\t\t\t\t\t\t\t\t\treturn <Control key={ item.value.bind } control={ item.value } />;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t\t} ) }\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</TabPanel>\n\t\t\t\t);\n\t\t\t} ) }\n\t\t</>\n\t);\n};\n\nconst Control = ( { control }: { control: Control[ 'value' ] } ) => {\n\tif ( ! getControlByType( control.type as ControlType ) ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<DynamicControl bind={ control.bind }>\n\t\t\t{ control.label ? <ControlLabel>{ control.label }</ControlLabel> : null }\n\t\t\t<BaseControl type={ control.type as ControlType } props={ control.props } />\n\t\t</DynamicControl>\n\t);\n};\n","import * as React from 'react';\nimport { ControlContext, useControl } from '../controls/control-context';\nimport { PropKey, PropValue } from '../types';\nimport { useDynamicTag } from './hooks/use-dynamic-tag';\nimport { DynamicPropValue } from './types';\n\nexport type DynamicControlProps = React.PropsWithChildren< {\n\tbind: PropKey;\n} >;\n\nexport const DynamicControl = ( { bind, children }: DynamicControlProps ) => {\n\tconst { value, setValue, bind: propName } = useControl< DynamicPropValue >();\n\tconst { name = '', settings } = value?.value ?? {};\n\n\tconst dynamicTag = useDynamicTag( propName, name );\n\n\tif ( ! dynamicTag ) {\n\t\tthrow new Error( `Dynamic tag ${ name } not found` );\n\t}\n\n\tconst defaultValue = dynamicTag.props_schema[ bind ]?.type.default;\n\tconst dynamicValue = settings?.[ bind ] ?? defaultValue;\n\n\tconst setDynamicValue = ( newValue: PropValue ) => {\n\t\tsetValue( {\n\t\t\t$$type: 'dynamic',\n\t\t\tvalue: {\n\t\t\t\tname,\n\t\t\t\tsettings: {\n\t\t\t\t\t...settings,\n\t\t\t\t\t[ bind ]: newValue,\n\t\t\t\t},\n\t\t\t},\n\t\t} );\n\t};\n\n\treturn (\n\t\t<ControlContext.Provider value={ { setValue: setDynamicValue, value: dynamicValue, bind } }>\n\t\t\t{ children }\n\t\t</ControlContext.Provider>\n\t);\n};\n","import { useMemo } from 'react';\nimport { useElementContext } from '../../contexts/element-context';\nimport { getAtomicDynamicTags } from '../sync/get-atomic-dynamic-tags';\nimport { PropKey } from '../../types';\nimport { isDynamicType } from '../utils';\n\nexport const usePropDynamicTags = ( propName: PropKey ) => {\n\tlet categories: string[] = [];\n\n\tconst { elementType } = useElementContext();\n\n\tconst propSchema = elementType.propsSchema?.[ propName ];\n\n\tif ( propSchema ) {\n\t\tconst propDynamicType = propSchema.additional_types.find( isDynamicType );\n\n\t\tcategories = propDynamicType?.settings.categories || [];\n\t}\n\n\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\treturn useMemo( () => getDynamicTagsByCategories( categories ), [ categories.join() ] );\n};\n\nconst getDynamicTagsByCategories = ( categories: string[] ) => {\n\tconst dynamicTags = getAtomicDynamicTags();\n\n\tif ( ! categories.length || ! dynamicTags?.tags ) {\n\t\treturn [];\n\t}\n\n\tconst _categories = new Set( categories );\n\n\treturn Object.values( dynamicTags.tags ).filter( ( dynamicTag ) =>\n\t\tdynamicTag.categories.some( ( category ) => _categories.has( category ) )\n\t);\n};\n","import { ExtendedWindow } from '../types';\n\nexport const getElementorConfig = () => {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\treturn extendedWindow.elementor?.config ?? {};\n};\n","import { getElementorConfig } from './get-elementor-config';\n\nexport const getAtomicDynamicTags = () => {\n\tconst { atomicDynamicTags } = getElementorConfig();\n\n\tif ( ! atomicDynamicTags ) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\ttags: atomicDynamicTags.tags,\n\t\tgroups: atomicDynamicTags.groups,\n\t};\n};\n","import { z } from '@elementor/schema';\n\n// TODO: Move this file content a shared package.\n\nexport const transformableSchema = z.object( {\n\t$$type: z.string(),\n\tvalue: z.any(),\n} );\n\nexport type TransformablePropValue = z.infer< typeof transformableSchema >;\n\nexport const isTransformable = ( value: unknown ): value is TransformablePropValue => {\n\treturn transformableSchema.safeParse( value ).success;\n};\n","import { AdditionalPropType, PropValue } from '../types';\nimport { DynamicPropType } from './types';\nimport { isTransformable } from '../props/is-transformable';\n\nexport const isDynamicType = ( prop: AdditionalPropType ): prop is DynamicPropType => prop.key === 'dynamic';\n\nexport const isDynamicPropValue = ( prop: PropValue ) => {\n\treturn isTransformable( prop ) && prop.$$type === 'dynamic';\n};\n","import { usePropDynamicTags } from './use-prop-dynamic-tags';\nimport { DynamicTag } from '../types';\nimport { PropKey } from '../../types';\nimport { useMemo } from 'react';\n\nexport const useDynamicTag = ( propName: PropKey, tagName: string ): DynamicTag | null => {\n\tconst dynamicTags = usePropDynamicTags( propName );\n\n\treturn useMemo( () => dynamicTags.find( ( tag ) => tag.name === tagName ) ?? null, [ dynamicTags, tagName ] );\n};\n","import * as React from 'react';\nimport { useState, Fragment } from 'react';\nimport { useControl } from '../../controls/control-context';\nimport { DynamicPropValue } from '../types';\nimport { usePropDynamicTags } from '../hooks/use-prop-dynamic-tags';\nimport { getAtomicDynamicTags } from '../sync/get-atomic-dynamic-tags';\nimport { SearchIcon, PhotoIcon } from '@elementor/icons';\nimport {\n\tBox,\n\tDivider,\n\tInputAdornment,\n\tLink,\n\tListSubheader,\n\tMenuItem,\n\tMenuList,\n\tStack,\n\tTextField,\n\tTypography,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\nimport { PropKey } from '../../types';\n\ntype Option = {\n\tlabel: string;\n\tvalue: string;\n};\n\ntype OptionEntry = [ string, Option[] ];\n\nconst SIZE = 'tiny';\n\nexport type DynamicSelectionProps = {\n\tonSelect?: () => void;\n};\n\nexport const DynamicSelection = ( { onSelect }: DynamicSelectionProps ) => {\n\tconst [ searchValue, setSearchValue ] = useState( '' );\n\n\tconst { groups: dynamicGroups } = getAtomicDynamicTags() || {};\n\tconst { bind, value: dynamicValue, setValue } = useControl< DynamicPropValue >();\n\n\tconst options = useFilteredOptions( bind, searchValue );\n\n\tconst handleSearch = ( event: React.ChangeEvent< HTMLInputElement > ) => {\n\t\tsetSearchValue( event.target.value );\n\t};\n\n\treturn (\n\t\t<Stack>\n\t\t\t<Box px={ 1.5 } pb={ 1 }>\n\t\t\t\t<TextField\n\t\t\t\t\tfullWidth\n\t\t\t\t\tsize={ SIZE }\n\t\t\t\t\tvalue={ searchValue }\n\t\t\t\t\tonChange={ handleSearch }\n\t\t\t\t\tplaceholder={ __( 'Search dynamic tag', 'elementor' ) }\n\t\t\t\t\tInputProps={ {\n\t\t\t\t\t\tstartAdornment: (\n\t\t\t\t\t\t\t<InputAdornment position=\"start\">\n\t\t\t\t\t\t\t\t<SearchIcon fontSize={ SIZE } />\n\t\t\t\t\t\t\t</InputAdornment>\n\t\t\t\t\t\t),\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t\t<Divider />\n\t\t\t<Box sx={ { overflowY: 'auto', height: 260, width: 220 } }>\n\t\t\t\t{ options.length > 0 ? (\n\t\t\t\t\t<MenuList role=\"listbox\" tabIndex={ 0 }>\n\t\t\t\t\t\t{ options.map( ( [ category, items ], index ) => (\n\t\t\t\t\t\t\t<Fragment key={ index }>\n\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{ dynamicGroups?.[ category ]?.title || category }\n\t\t\t\t\t\t\t\t</ListSubheader>\n\t\t\t\t\t\t\t\t{ items.map( ( { value, label: tagLabel } ) => {\n\t\t\t\t\t\t\t\t\tconst isSelected = value === dynamicValue?.value?.name;\n\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t<MenuItem\n\t\t\t\t\t\t\t\t\t\t\tkey={ value }\n\t\t\t\t\t\t\t\t\t\t\tselected={ isSelected }\n\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\tautoFocus={ isSelected }\n\t\t\t\t\t\t\t\t\t\t\tsx={ { typography: 'caption' } }\n\t\t\t\t\t\t\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\t\t\t\t\t\t\tsetValue( { $$type: 'dynamic', value: { name: value } } );\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect?.();\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\t\t{ tagLabel }\n\t\t\t\t\t\t\t\t\t\t</MenuItem>\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</Fragment>\n\t\t\t\t\t\t) ) }\n\t\t\t\t\t</MenuList>\n\t\t\t\t) : (\n\t\t\t\t\t<Stack alignItems=\"center\" p={ 2.5 } gap={ 1.5 }>\n\t\t\t\t\t\t<PhotoIcon fontSize=\"large\" />\n\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t{ __( 'Sorry, nothing matched', 'elementor' ) }\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t“{ searchValue }”.\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t\t<Typography align=\"center\" variant=\"caption\" color=\"text.secondary\">\n\t\t\t\t\t\t\t<Link\n\t\t\t\t\t\t\t\tcolor=\"secondary\"\n\t\t\t\t\t\t\t\tvariant=\"caption\"\n\t\t\t\t\t\t\t\tcomponent=\"button\"\n\t\t\t\t\t\t\t\tonClick={ () => setSearchValue( '' ) }\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{ __( 'Clear the filters', 'elementor' ) }\n\t\t\t\t\t\t\t</Link>\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t{ __( 'and try again.', 'elementor' ) }\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Stack>\n\t\t\t\t) }\n\t\t\t</Box>\n\t\t</Stack>\n\t);\n};\n\nconst useFilteredOptions = ( bind: PropKey, searchValue: string ): OptionEntry[] => {\n\tconst dynamicTags = usePropDynamicTags( bind );\n\n\tconst options = dynamicTags.reduce< Map< string, Option[] > >( ( categories, { name, label, group } ) => {\n\t\tconst isVisible = label.toLowerCase().includes( searchValue.trim().toLowerCase() );\n\n\t\tif ( ! isVisible ) {\n\t\t\treturn categories;\n\t\t}\n\n\t\tif ( ! categories.has( group ) ) {\n\t\t\tcategories.set( group, [] );\n\t\t}\n\n\t\tcategories.get( group )?.push( { label, value: name } );\n\n\t\treturn categories;\n\t}, new Map() );\n\n\treturn [ ...options ];\n};\n","import { DynamicSelectionControl } from './components/dynamic-selection-control';\nimport { replaceControl } from '../controls/control-replacement';\nimport { isDynamicPropValue } from './utils';\n\nexport const init = () => {\n\treplaceControl( {\n\t\tcomponent: DynamicSelectionControl,\n\t\tcondition: ( { value } ) => isDynamicPropValue( value ),\n\t} );\n};\n","export { replaceControl } from './controls/control-replacement';\nexport { useControl } from './controls/control-context';\n\nimport init from './init';\n\ninit();\n"],"mappings":"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","names":["React","__","useListenTo","commandEndEvent","useListenTo","commandEndEvent","createContext","useContext","Stack","React","__","React","Stack","React","commandEndEvent","useListenTo","useListenTo","commandEndEvent","React","React","React","Stack","React","React","React","React","TextField","TextField","React","InputAdornment","React","Button","TextField","useId","options","InputAdornment","React","MenuItem","options","MenuItem","Stack","Control","React","React","createContext","useContext","Context","useListenTo","commandEndEvent","useListenTo","commandEndEvent","Stack","React","React","commandEndEvent","useListenTo","useListenTo","commandEndEvent","runCommand","runCommand","Stack","__","__","Stack","Control","React","Stack","React","__","__","__","React","__","React","__","React","__","React","__","React","__","React","__","React","useState","Button","Stack","styled","__","React","__","React","React","styled","ToggleButton","ToggleButtonGroup","options","__","__","Stack","React","Stack","React","__","React","TextField","TextField","__","__","Stack","React","Divider","Stack","__","React","Stack","ToggleButton","__","Stack","ToggleButton","Control","__","Stack","Divider","Stack","Stack","__","__","useEffect","useEffect","React","useId","React","useMemo","React","useState","Fragment","Divider","InputAdornment","MenuItem","Stack","TextField","Typography","__","useState","options","Fragment","bindTrigger","Box","Stack","Typography","usePopupState","Tabs","Divider","useTabs","Tab","TabPanel","__","SIZE","useId","Control","init","init"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-editing-panel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -39,18 +39,19 @@
|
|
|
39
39
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@elementor/editor": "^0.
|
|
43
|
-
"@elementor/editor-panels": "^0.
|
|
42
|
+
"@elementor/editor": "^0.14.0",
|
|
43
|
+
"@elementor/editor-panels": "^0.7.0",
|
|
44
44
|
"@elementor/editor-responsive": "^0.12.1",
|
|
45
|
-
"@elementor/editor-style": "^0.
|
|
45
|
+
"@elementor/editor-style": "^0.3.0",
|
|
46
46
|
"@elementor/editor-v1-adapters": "^0.8.2",
|
|
47
|
-
"@elementor/icons": "^1.1
|
|
48
|
-
"@elementor/
|
|
47
|
+
"@elementor/icons": "^1.13.1",
|
|
48
|
+
"@elementor/schema": "^0.1.0",
|
|
49
|
+
"@elementor/ui": "^1.20.2",
|
|
50
|
+
"@elementor/utils": "^0.2.1",
|
|
49
51
|
"@elementor/wp-media": "^0.1.2",
|
|
50
52
|
"@wordpress/i18n": "^4.45.0"
|
|
51
53
|
},
|
|
52
54
|
"peerDependencies": {
|
|
53
55
|
"react": "^18.3.1"
|
|
54
|
-
}
|
|
55
|
-
"gitHead": "8148c6592dd5cc480b488f91f3b8ecef1d9f94cc"
|
|
56
|
+
}
|
|
56
57
|
}
|
|
@@ -26,7 +26,7 @@ export const EditingPanel = () => {
|
|
|
26
26
|
<PanelHeaderTitle>{ panelTitle }</PanelHeaderTitle>
|
|
27
27
|
</PanelHeader>
|
|
28
28
|
<PanelBody>
|
|
29
|
-
<ElementContext element={ selectedElement }>
|
|
29
|
+
<ElementContext element={ selectedElement } elementType={ elementType }>
|
|
30
30
|
<EditingPanelTabs />
|
|
31
31
|
</ElementContext>
|
|
32
32
|
</PanelBody>
|
|
@@ -2,19 +2,13 @@ import * as React from 'react';
|
|
|
2
2
|
import { Stack } from '@elementor/ui';
|
|
3
3
|
import { SettingsControl } from '../controls/settings-control';
|
|
4
4
|
import { useElementContext } from '../contexts/element-context';
|
|
5
|
-
import useElementType from '../hooks/use-element-type';
|
|
6
|
-
import type { Control } from '../types';
|
|
7
5
|
import { AccordionSection } from './accordion-section';
|
|
8
|
-
import {
|
|
6
|
+
import type { Control } from '../types';
|
|
7
|
+
import { Control as BaseControl } from '../controls/control';
|
|
8
|
+
import { ControlType, getControlByType } from '../controls/controls-registry';
|
|
9
9
|
|
|
10
10
|
export const SettingsTab = () => {
|
|
11
|
-
const {
|
|
12
|
-
|
|
13
|
-
const elementType = useElementType( element?.type );
|
|
14
|
-
|
|
15
|
-
if ( ! elementType ) {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
11
|
+
const { elementType } = useElementContext();
|
|
18
12
|
|
|
19
13
|
return (
|
|
20
14
|
<Stack>
|
|
@@ -46,19 +40,14 @@ export const SettingsTab = () => {
|
|
|
46
40
|
|
|
47
41
|
// TODO: Create control wrapper by type for different layouts.
|
|
48
42
|
const Control = ( { control }: { control: Control[ 'value' ] } ) => {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
if ( ! ControlComponent ) {
|
|
43
|
+
if ( ! getControlByType( control.type as ControlType ) ) {
|
|
52
44
|
return null;
|
|
53
45
|
}
|
|
54
46
|
|
|
55
47
|
return (
|
|
56
48
|
<SettingsControl bind={ control.bind }>
|
|
57
49
|
{ control.label ? <SettingsControl.Label>{ control.label }</SettingsControl.Label> : null }
|
|
58
|
-
<
|
|
59
|
-
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
|
|
60
|
-
{ ...( control.props as any ) }
|
|
61
|
-
/>
|
|
50
|
+
<BaseControl type={ control.type as ControlType } props={ control.props } />
|
|
62
51
|
</SettingsControl>
|
|
63
52
|
);
|
|
64
53
|
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { AccordionSection } from '../../accordion-section';
|
|
3
|
+
import { Stack } from '@elementor/ui';
|
|
4
|
+
import { ZIndexControl } from './z-index-control';
|
|
5
|
+
import { __ } from '@wordpress/i18n';
|
|
6
|
+
|
|
7
|
+
export const PositionSection = () => {
|
|
8
|
+
return (
|
|
9
|
+
<AccordionSection title={ __( 'Position', 'elementor' ) }>
|
|
10
|
+
<Stack gap={ 1.5 }>
|
|
11
|
+
<ZIndexControl />
|
|
12
|
+
</Stack>
|
|
13
|
+
</AccordionSection>
|
|
14
|
+
);
|
|
15
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { StyleControl } from '../../../controls/style-control';
|
|
3
|
+
import { ControlContainer } from '../../../controls/components/control-container';
|
|
4
|
+
import { __ } from '@wordpress/i18n';
|
|
5
|
+
import { NumberControl } from '../../../controls/control-types/number-control';
|
|
6
|
+
|
|
7
|
+
export const ZIndexControl = () => {
|
|
8
|
+
return (
|
|
9
|
+
<StyleControl bind="zIndex">
|
|
10
|
+
<ControlContainer>
|
|
11
|
+
<StyleControl.Label>{ __( 'Z-Index', 'elementor' ) }</StyleControl.Label>
|
|
12
|
+
<NumberControl />
|
|
13
|
+
</ControlContainer>
|
|
14
|
+
</StyleControl>
|
|
15
|
+
);
|
|
16
|
+
};
|