@elementor/editor-default-styles 4.3.0-1050 → 4.3.0-1052
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +9 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +166 -307
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +177 -323
- package/dist/index.mjs.map +1 -1
- package/package.json +20 -20
- package/src/components/{default-styles-panel-content.tsx → default-styles-tab-embedded.tsx} +28 -40
- package/src/index.ts +1 -0
- package/src/init.ts +7 -18
- package/src/default-styles-open-gate.tsx +0 -99
- package/src/default-styles-panel.tsx +0 -32
- package/src/hooks/use-default-styles-action-props.ts +0 -15
- package/src/panel-interactions.ts +0 -24
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/init.ts","../src/components/populate-store.tsx","../src/load-default-styles.ts","../src/api.ts","../src/store.ts","../src/default-styles-open-gate.tsx","../src/default-styles-panel.tsx","../src/components/default-styles-panel-content.tsx","../src/allowed-tags.ts","../src/panel-interactions.ts","../src/save-default-styles.ts","../src/components/tag-chip.tsx","../src/components/tag-state-menu.tsx","../src/default-styles-provider.ts","../src/hooks/use-default-styles-action-props.ts"],"sourcesContent":["import { injectIntoLogic } from '@elementor/editor';\nimport { toolsMenu } from '@elementor/editor-app-bar';\nimport { registerElementPanelDefaults, STYLE_SECTION_NAMES } from '@elementor/editor-editing-panel';\nimport { __registerPanel as registerPanel } from '@elementor/editor-panels';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { __registerSlice as registerSlice } from '@elementor/store';\n\nimport { PopulateStore } from './components/populate-store';\nimport { DefaultStylesOpenGate } from './default-styles-open-gate';\nimport { panel } from './default-styles-panel';\nimport { defaultStylesStylesProvider } from './default-styles-provider';\nimport { useDefaultStylesActionProps } from './hooks/use-default-styles-action-props';\nimport { slice } from './store';\n\nexport function init() {\n\tregisterSlice( slice );\n\n\tregisterElementPanelDefaults( 'default-style', {\n\t\tdefaultTab: 'style',\n\t\tdefaultSectionsExpanded: {\n\t\t\tstyle: [ ...STYLE_SECTION_NAMES ],\n\t\t},\n\t} );\n\n\tregisterPanel( panel );\n\n\tstylesRepository.register( defaultStylesStylesProvider );\n\n\ttoolsMenu.registerAction( {\n\t\tid: 'default-styles-button',\n\t\tpriority: 4,\n\t\tuseProps: useDefaultStylesActionProps,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'default-styles-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n\n\tinjectIntoLogic( {\n\t\tid: 'default-styles-open-gate',\n\t\tcomponent: DefaultStylesOpenGate,\n\t} );\n}\n","import { useEffect } from 'react';\nimport { __privateListenTo as listenTo, registerDataHook, routeCloseEvent } from '@elementor/editor-v1-adapters';\nimport { __getState as getState } from '@elementor/store';\n\nimport { loadDefaultStyles } from '../load-default-styles';\nimport { selectIsDirty } from '../store';\n\nconst V2_PANEL_ROUTE = 'panel/v2';\n\nexport function PopulateStore() {\n\tuseEffect( () => {\n\t\tvoid loadDefaultStyles();\n\n\t\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\t\tif ( selectIsDirty( getState() ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait loadDefaultStyles();\n\t\t} );\n\n\t\tconst unsubscribe = listenTo( routeCloseEvent( V2_PANEL_ROUTE ), () => {\n\t\t\tif ( selectIsDirty( getState() ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid loadDefaultStyles();\n\t\t} );\n\n\t\treturn unsubscribe;\n\t}, [] );\n\n\treturn null;\n}\n","import { __dispatch as dispatch } from '@elementor/store';\n\nimport { apiClient } from './api';\nimport { slice } from './store';\n\nexport async function loadDefaultStyles() {\n\tconst response = await apiClient.all();\n\n\tconst items = response.data.data;\n\n\tdispatch(\n\t\tslice.actions.load( {\n\t\t\tdata: items,\n\t\t} )\n\t);\n}\n","import { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type AllowedHtmlTag } from './allowed-tags';\n\nconst RESOURCE_URL = '/default-styles';\nconst BASE_URL = 'elementor/v1';\n\nexport type DefaultStylesMap = Record< StyleDefinitionID, StyleDefinition >;\n\ntype DefaultStylesHttpResponse = HttpResponse< DefaultStylesMap >;\n\nexport const apiClient = {\n\tall: () => httpService().get< DefaultStylesHttpResponse >( `${ BASE_URL }${ RESOURCE_URL }` ),\n\n\tput: ( tag: AllowedHtmlTag, variants: StyleDefinition[ 'variants' ] ) =>\n\t\thttpService().put( `${ BASE_URL }${ RESOURCE_URL }/${ tag }`, {\n\t\t\ttype: 'class',\n\t\t\tvariants,\n\t\t} ),\n\n\tdelete: ( tag: AllowedHtmlTag ) => httpService().delete( `${ BASE_URL }${ RESOURCE_URL }/${ tag }` ),\n};\n","import { type Props } from '@elementor/editor-props';\nimport {\n\ttype CustomCss,\n\tgetVariantByMeta,\n\ttype StyleDefinition,\n\ttype StyleDefinitionID,\n\ttype StyleDefinitionVariant,\n} from '@elementor/editor-styles';\nimport { type UpdateActionPayload } from '@elementor/editor-styles-repository';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\ntype DefaultStylesState = {\n\tdata: Record< StyleDefinitionID, StyleDefinition >;\n\tinitialData: Record< StyleDefinitionID, StyleDefinition >;\n\tisDirty: boolean;\n};\n\nconst initialState: DefaultStylesState = {\n\tdata: {},\n\tinitialData: {},\n\tisDirty: false,\n};\n\nexport type StateWithDefaultStyles = SliceState< typeof slice >;\n\nconst SLICE_NAME = 'defaultStyles';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tload(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload: { data },\n\t\t\t}: PayloadAction< {\n\t\t\t\tdata: Record< StyleDefinitionID, StyleDefinition >;\n\t\t\t} >\n\t\t) {\n\t\t\tconst normalizedData = Array.isArray( data ) ? {} : data;\n\n\t\t\tstate.initialData = structuredClone( normalizedData );\n\t\t\tstate.data = structuredClone( normalizedData );\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tupdate( state, { payload }: PayloadAction< { style: UpdateActionPayload } > ) {\n\t\t\tstate.data[ payload.style.id ] = {\n\t\t\t\t...state.data[ payload.style.id ],\n\t\t\t\t...payload.style,\n\t\t\t} as StyleDefinition;\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tupdateProps(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload,\n\t\t\t}: PayloadAction< {\n\t\t\t\tid: StyleDefinitionID;\n\t\t\t\tmeta: StyleDefinitionVariant[ 'meta' ];\n\t\t\t\tprops: Props;\n\t\t\t\tcustom_css?: CustomCss | null;\n\t\t\t\tmode?: 'merge' | 'replace';\n\t\t\t} >\n\t\t) {\n\t\t\tconst style = state.data[ payload.id ] ?? {\n\t\t\t\tid: payload.id,\n\t\t\t\tlabel: payload.id,\n\t\t\t\ttype: 'class' as const,\n\t\t\t\tvariants: [],\n\t\t\t};\n\n\t\t\tconst variant = getVariantByMeta( style, payload.meta );\n\t\t\tlet customCss = ( 'custom_css' in payload ? payload.custom_css : variant?.custom_css ) ?? null;\n\t\t\tcustomCss = customCss?.raw ? customCss : null;\n\n\t\t\tif ( variant ) {\n\t\t\t\tconst payloadProps = JSON.parse( JSON.stringify( payload.props ) ) as Props;\n\t\t\t\tconst mode = payload.mode ?? 'merge';\n\n\t\t\t\tif ( mode === 'replace' ) {\n\t\t\t\t\tvariant.props = payloadProps;\n\t\t\t\t} else {\n\t\t\t\t\tvariant.props = { ...variant.props, ...payloadProps };\n\t\t\t\t}\n\n\t\t\t\tvariant.custom_css = customCss;\n\t\t\t} else {\n\t\t\t\tstyle.variants.push( {\n\t\t\t\t\tmeta: payload.meta,\n\t\t\t\t\tprops: payload.props,\n\t\t\t\t\tcustom_css: customCss,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tstate.data[ payload.id ] = style;\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\treset( state ) {\n\t\t\tstate.data = state.initialData;\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tcommit( state ) {\n\t\t\tstate.initialData = state.data;\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tdeleteTag( state, { payload }: PayloadAction< StyleDefinitionID > ) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\tdelete state.data[ payload ];\n\t\t\tstate.isDirty = true;\n\t\t},\n\t},\n} );\n\nexport const selectData = createSelector(\n\t( state: StateWithDefaultStyles ) => state.defaultStyles.data,\n\t( data ) => data\n);\n\nexport const selectIsDirty = createSelector(\n\t( state: StateWithDefaultStyles ) => state.defaultStyles.isDirty,\n\t( isDirty ) => isDirty\n);\n\nexport const selectInitialData = createSelector(\n\t( state: StateWithDefaultStyles ) => state.defaultStyles.initialData,\n\t( initialData ) => initialData\n);\n\nexport const selectTagStyle = createSelector(\n\t[ selectData, ( _state: StateWithDefaultStyles, id: StyleDefinitionID ) => id ],\n\t( data, id ) => data[ id ]\n);\n","import * as React from 'react';\nimport { useCallback, useEffect, useRef } from 'react';\nimport {\n\t__useActiveDocument as useActiveDocument,\n\t__useActiveDocumentActions as useActiveDocumentActions,\n} from '@elementor/editor-documents';\nimport { SaveChangesDialog, ThemeProvider, useDialog } from '@elementor/editor-ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { usePanelActions } from './default-styles-panel';\n\nexport const EVENT_REQUEST_OPEN_DEFAULT_STYLES = 'elementor/default-styles/request-open';\n\nexport function DefaultStylesOpenGate() {\n\tconst { open } = usePanelActions();\n\tconst document = useActiveDocument();\n\tconst { save: saveDocument } = useActiveDocumentActions();\n\tconst { open: openSaveDialog, close: closeSaveDialog, isOpen: isSaveDialogOpen } = useDialog();\n\n\tconst documentRef = useRef( document );\n\tdocumentRef.current = document;\n\n\tconst pendingOpenRef = useRef< ( () => void ) | null >( null );\n\n\tconst gatedOpen = useCallback(\n\t\t( onClean: () => void ) => {\n\t\t\tif ( documentRef.current?.isDirty ) {\n\t\t\t\tpendingOpenRef.current = onClean;\n\t\t\t\topenSaveDialog();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tonClean();\n\t\t},\n\t\t[ openSaveDialog ]\n\t);\n\n\tconst handleSaveAndContinue = useCallback( async () => {\n\t\ttry {\n\t\t\tawait saveDocument();\n\t\t\tcloseSaveDialog();\n\t\t\tpendingOpenRef.current?.();\n\t\t\tpendingOpenRef.current = null;\n\t\t} catch {\n\t\t\t// Keep dialog open.\n\t\t}\n\t}, [ saveDocument, closeSaveDialog ] );\n\n\tconst handleStayHere = useCallback( () => {\n\t\tcloseSaveDialog();\n\t\tpendingOpenRef.current = null;\n\t}, [ closeSaveDialog ] );\n\n\tuseEffect( () => {\n\t\tconst handler = () => {\n\t\t\tgatedOpen( () => {\n\t\t\t\tvoid open();\n\t\t\t} );\n\t\t};\n\n\t\twindow.addEventListener( EVENT_REQUEST_OPEN_DEFAULT_STYLES, handler );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( EVENT_REQUEST_OPEN_DEFAULT_STYLES, handler );\n\t\t};\n\t}, [ gatedOpen, open ] );\n\n\tif ( ! isSaveDialogOpen ) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ThemeProvider>\n\t\t\t<SaveChangesDialog>\n\t\t\t\t<SaveChangesDialog.Title>{ __( 'You have unsaved changes', 'elementor' ) }</SaveChangesDialog.Title>\n\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t<SaveChangesDialog.ContentText sx={ { mb: 2 } }>\n\t\t\t\t\t\t{ __(\n\t\t\t\t\t\t\t\"To open Default Styles, save your page first. You can't continue without saving.\",\n\t\t\t\t\t\t\t'elementor'\n\t\t\t\t\t\t) }\n\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\tactions={ {\n\t\t\t\t\t\tcancel: {\n\t\t\t\t\t\t\tlabel: __( 'Stay here', 'elementor' ),\n\t\t\t\t\t\t\taction: handleStayHere,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\taction: handleSaveAndContinue,\n\t\t\t\t\t\t},\n\t\t\t\t\t} }\n\t\t\t\t/>\n\t\t\t</SaveChangesDialog>\n\t\t</ThemeProvider>\n\t);\n}\n","import * as React from 'react';\nimport { __createPanel as createPanel } from '@elementor/editor-panels';\nimport { changeEditMode } from '@elementor/editor-v1-adapters';\n\nimport { DefaultStylesPanelContent } from './components/default-styles-panel-content';\n\nexport const DEFAULT_STYLES_PANEL_ID = 'default-styles';\n\nexport const { panel, usePanelStatus, usePanelActions } = createPanel( {\n\tid: DEFAULT_STYLES_PANEL_ID,\n\tcomponent: DefaultStylesPanelRoot,\n\tallowedEditModes: [ 'edit', DEFAULT_STYLES_PANEL_ID ],\n\tonOpen: () => {\n\t\tchangeEditMode( DEFAULT_STYLES_PANEL_ID );\n\t},\n\tonClose: async () => {\n\t\tchangeEditMode( 'edit' );\n\t},\n\tisOpenPreviousElement: true,\n} );\n\nfunction DefaultStylesPanelRoot() {\n\tconst { close } = usePanelActions();\n\n\treturn (\n\t\t<DefaultStylesPanelContent\n\t\t\tonRequestClose={ () => {\n\t\t\t\tvoid close();\n\t\t\t} }\n\t\t/>\n\t);\n}\n","import * as React from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n\tControlActionsProvider,\n\tControlReplacementsProvider,\n\tgetControlReplacements,\n} from '@elementor/editor-controls';\nimport {\n\tClassesPropProvider,\n\tCreatableAutocomplete,\n\tElementProvider,\n\ttype Option,\n\tSectionsList,\n\tStyleInheritanceProvider,\n\tStyleProvider,\n\tStyleSections,\n} from '@elementor/editor-editing-panel';\nimport { type Element, type ElementType } from '@elementor/editor-elements';\nimport { Panel, PanelBody, PanelFooter, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';\nimport { useActiveBreakpoint } from '@elementor/editor-responsive';\nimport { type StyleDefinitionID, type StyleDefinitionState } from '@elementor/editor-styles';\nimport { SaveChangesDialog, ThemeProvider, useDialog } from '@elementor/editor-ui';\nimport { controlActionsMenu } from '@elementor/menus';\nimport { useMutation } from '@elementor/query';\nimport { getSessionStorageItem, SessionStorageProvider, setSessionStorageItem } from '@elementor/session';\nimport { __dispatch as dispatch, __useSelector as useSelector } from '@elementor/store';\nimport {\n\ttype AutocompleteChangeReason,\n\tBox,\n\tButton,\n\tCloseButton,\n\tErrorBoundary,\n\tFormControl,\n\tFormLabel,\n\tStack,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport {\n\ttype AllowedHtmlTag,\n\tgetAllowedDefaultStyleTags,\n\tgetDefaultActiveTag,\n\tisAllowedDefaultStyleTag,\n} from '../allowed-tags';\nimport { blockPanelInteractions, unblockPanelInteractions } from '../panel-interactions';\nimport { saveDefaultStyles } from '../save-default-styles';\nimport { selectIsDirty, slice } from '../store';\nimport { TagChip } from './tag-chip';\n\nconst { useMenuItems } = controlActionsMenu;\n\nconst SHIM_ELEMENT_ID = 'default-styles-editor-shim';\nconst SHIM_CLASSES_PROP = '__default_styles_classes__';\nconst TAG_SELECTOR_ID = 'default-styles-tag-selector';\nconst LAST_ACTIVE_TAG_SESSION_PREFIX = 'default-styles';\nconst LAST_ACTIVE_TAG_SESSION_KEY = 'last-active-tag';\nconst LAST_ACTIVE_TAG_STORAGE_KEY = `${ LAST_ACTIVE_TAG_SESSION_PREFIX }/${ LAST_ACTIVE_TAG_SESSION_KEY }`;\n\nfunction readStoredActiveTag( allowedTags: AllowedHtmlTag[] ): AllowedHtmlTag {\n\tconst storedTag = getSessionStorageItem< AllowedHtmlTag >( LAST_ACTIVE_TAG_STORAGE_KEY );\n\n\tif ( storedTag && isAllowedDefaultStyleTag( storedTag, allowedTags ) ) {\n\t\treturn storedTag;\n\t}\n\n\treturn getDefaultActiveTag( allowedTags );\n}\n\nfunction toTagChip( tag: AllowedHtmlTag ): Option {\n\treturn { label: tag, value: tag, fixed: true };\n}\n\nconst shimElement: Element = {\n\tid: SHIM_ELEMENT_ID,\n\ttype: 'default-style',\n};\n\nconst shimElementType: ElementType = {\n\tkey: 'default-style',\n\tcontrols: [],\n\tpropsSchema: {},\n\ttitle: __( 'Default Style', 'elementor' ),\n};\n\ntype DefaultStylesPanelContentProps = {\n\tonRequestClose: () => void;\n};\n\nexport function DefaultStylesPanelContent( { onRequestClose }: DefaultStylesPanelContentProps ) {\n\tconst allowedTags = useMemo( () => getAllowedDefaultStyleTags(), [] );\n\tconst tagOptions = useMemo< Option[] >(\n\t\t() => allowedTags.map( ( tag ) => ( { label: tag, value: tag } ) ),\n\t\t[ allowedTags ]\n\t);\n\tconst [ selectedTag, setSelectedTagState ] = useState< AllowedHtmlTag >( () => readStoredActiveTag( allowedTags ) );\n\tconst [ activeStyleState, setActiveStyleState ] = useState< StyleDefinitionState | null >( null );\n\tconst breakpoint = useActiveBreakpoint();\n\tconst menuItems = useMenuItems().default;\n\tconst controlReplacements = getControlReplacements();\n\tconst isDirty = useSelector( selectIsDirty );\n\tconst { mutateAsync: save, isPending: isSaving } = useSave();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst setSelectedTag = ( tag: AllowedHtmlTag ) => {\n\t\tsetSelectedTagState( tag );\n\t\tsetSessionStorageItem( LAST_ACTIVE_TAG_STORAGE_KEY, tag );\n\t};\n\n\tconst handleClosePanel = useCallback( () => {\n\t\tif ( isDirty ) {\n\t\t\topenSaveChangesDialog();\n\t\t\treturn;\n\t\t}\n\n\t\tonRequestClose();\n\t}, [ isDirty, onRequestClose, openSaveChangesDialog ] );\n\n\tuseEffect( () => {\n\t\tblockPanelInteractions();\n\n\t\treturn () => {\n\t\t\tunblockPanelInteractions();\n\t\t};\n\t}, [] );\n\n\tusePreventUnload( isDirty );\n\n\tconst handleTagSelect = ( _selected: Option[], reason: AutocompleteChangeReason, option: Option ) => {\n\t\tif ( reason !== 'selectOption' || ! option.value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetSelectedTag( option.value as AllowedHtmlTag );\n\t\tsetActiveStyleState( null );\n\t};\n\n\tconst resetAndClosePanel = () => {\n\t\tdispatch( slice.actions.reset() );\n\t\tcloseSaveChangesDialog();\n\t\tonRequestClose();\n\t};\n\n\tconst handleSaveAndContinue = async () => {\n\t\ttry {\n\t\t\tawait save();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tcloseSaveChangesDialog();\n\t\tonRequestClose();\n\t};\n\n\treturn (\n\t\t<ErrorBoundary fallback={ null }>\n\t\t\t<ThemeProvider>\n\t\t\t\t<ControlActionsProvider items={ menuItems }>\n\t\t\t\t\t<ControlReplacementsProvider replacements={ controlReplacements }>\n\t\t\t\t\t\t<Panel>\n\t\t\t\t\t\t\t<PanelHeader>\n\t\t\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\t\t\tp={ 1 }\n\t\t\t\t\t\t\t\t\tpl={ 2 }\n\t\t\t\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\t\t\t\tdirection=\"row\"\n\t\t\t\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\t\t\t\tjustifyContent=\"space-between\"\n\t\t\t\t\t\t\t\t\tspacing={ 0.5 }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<PanelHeaderTitle sx={ { flex: 1, minWidth: 0 } }>\n\t\t\t\t\t\t\t\t\t\t{ __( 'Default Styles', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t</PanelHeaderTitle>\n\t\t\t\t\t\t\t\t\t<CloseButton\n\t\t\t\t\t\t\t\t\t\taria-label={ __( 'Close', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t\tsx={ { flexShrink: 0 } }\n\t\t\t\t\t\t\t\t\t\tonClick={ handleClosePanel }\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t</PanelHeader>\n\t\t\t\t\t\t\t<PanelBody>\n\t\t\t\t\t\t\t\t<Stack sx={ { px: 2, pt: 1, gap: 1 } }>\n\t\t\t\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t\t\t\t\t\t<FormLabel htmlFor={ TAG_SELECTOR_ID } size=\"small\" sx={ { mb: 1 } }>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Tag', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t\t\t\t\t\t<CreatableAutocomplete< Option >\n\t\t\t\t\t\t\t\t\t\t\tid={ TAG_SELECTOR_ID }\n\t\t\t\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\t\t\t\tplaceholder={ __( 'Type tag name', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t\t\toptions={ tagOptions }\n\t\t\t\t\t\t\t\t\t\t\tselected={ [ toTagChip( selectedTag ) ] }\n\t\t\t\t\t\t\t\t\t\t\tonSelect={ handleTagSelect }\n\t\t\t\t\t\t\t\t\t\t\trenderTags={ ( values, getTagProps ) =>\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.map( ( value, index ) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TagChip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ value.value ?? value.label }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={ value.label }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchipProps={ getTagProps( { index } ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactiveState={ activeStyleState }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSelectState={ setActiveStyleState }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<ElementProvider\n\t\t\t\t\t\t\t\t\telement={ shimElement }\n\t\t\t\t\t\t\t\t\telementType={ shimElementType }\n\t\t\t\t\t\t\t\t\tsettings={ {} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ClassesPropProvider prop={ SHIM_CLASSES_PROP }>\n\t\t\t\t\t\t\t\t\t\t<StyleProvider\n\t\t\t\t\t\t\t\t\t\t\tmeta={ {\n\t\t\t\t\t\t\t\t\t\t\t\tbreakpoint,\n\t\t\t\t\t\t\t\t\t\t\t\tstate: activeStyleState,\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\tid={ selectedTag as StyleDefinitionID }\n\t\t\t\t\t\t\t\t\t\t\tsetId={ () => {} }\n\t\t\t\t\t\t\t\t\t\t\tsetMetaState={ setActiveStyleState }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<SessionStorageProvider prefix={ selectedTag }>\n\t\t\t\t\t\t\t\t\t\t\t\t<StyleInheritanceProvider>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SectionsList>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<StyleSections />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SectionsList>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: '150px',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</StyleInheritanceProvider>\n\t\t\t\t\t\t\t\t\t\t\t</SessionStorageProvider>\n\t\t\t\t\t\t\t\t\t\t</StyleProvider>\n\t\t\t\t\t\t\t\t\t</ClassesPropProvider>\n\t\t\t\t\t\t\t\t</ElementProvider>\n\t\t\t\t\t\t\t</PanelBody>\n\t\t\t\t\t\t\t<PanelFooter>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\t\t\tonClick={ () => void save() }\n\t\t\t\t\t\t\t\t\tdisabled={ ! isDirty }\n\t\t\t\t\t\t\t\t\tloading={ isSaving }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</PanelFooter>\n\t\t\t\t\t\t</Panel>\n\t\t\t\t\t</ControlReplacementsProvider>\n\t\t\t\t</ControlActionsProvider>\n\n\t\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t\t<SaveChangesDialog.Title onClose={ closeSaveChangesDialog }>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.Title>\n\t\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t\t{ __( 'You have unsaved changes in Default Styles.', 'elementor' ) }\n\t\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t\t{ __( 'To avoid losing your updates, save your changes before leaving.', 'elementor' ) }\n\t\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\t\tdiscard: {\n\t\t\t\t\t\t\t\t\tlabel: __( 'Discard', 'elementor' ),\n\t\t\t\t\t\t\t\t\taction: resetAndClosePanel,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\t\taction: handleSaveAndContinue,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SaveChangesDialog>\n\t\t\t\t) }\n\t\t\t</ThemeProvider>\n\t\t</ErrorBoundary>\n\t);\n}\n\nfunction useSave() {\n\treturn useMutation( {\n\t\tmutationFn: () => saveDefaultStyles(),\n\t} );\n}\n\nfunction usePreventUnload( isDirty: boolean ) {\n\tuseEffect( () => {\n\t\tconst handleBeforeUnload = ( event: BeforeUnloadEvent ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener( 'beforeunload', handleBeforeUnload );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'beforeunload', handleBeforeUnload );\n\t\t};\n\t}, [ isDirty ] );\n}\n","type ExtendedWindow = Window & {\n\telementor: {\n\t\tconfig: {\n\t\t\tatomic?: {\n\t\t\t\tdefault_styles?: {\n\t\t\t\t\tallowed_tags?: string[];\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n};\n\nconst getElementorConfig = () => ( window as unknown as ExtendedWindow ).elementor?.config ?? {};\n\nexport const getAllowedDefaultStyleTags = (): string[] => {\n\tconst tags = getElementorConfig().atomic?.default_styles?.allowed_tags;\n\n\tif ( ! tags?.length ) {\n\t\treturn [];\n\t}\n\n\treturn tags;\n};\n\nexport type AllowedHtmlTag = string;\n\nexport const getDefaultActiveTag = ( tags: string[] ): AllowedHtmlTag => {\n\tif ( tags.includes( 'h1' ) ) {\n\t\treturn 'h1';\n\t}\n\n\treturn tags[ 0 ] ?? '';\n};\n\nexport const isAllowedDefaultStyleTag = ( tag: string, tags = getAllowedDefaultStyleTags() ): tag is AllowedHtmlTag =>\n\ttags.includes( tag );\n","type ExtendedWindow = Window & {\n\t$e?: {\n\t\tcomponents?: {\n\t\t\tget?: ( name: 'panel' ) =>\n\t\t\t\t| {\n\t\t\t\t\t\tblockUserInteractions?: () => void;\n\t\t\t\t\t\tunblockUserInteractions?: () => void;\n\t\t\t\t }\n\t\t\t\t| undefined;\n\t\t};\n\t};\n};\n\nexport function blockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.blockUserInteractions?.();\n}\n\nexport function unblockPanelInteractions() {\n\tconst extendedWindow = window as unknown as ExtendedWindow;\n\n\textendedWindow.$e?.components?.get?.( 'panel' )?.unblockUserInteractions?.();\n}\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { hash } from '@elementor/utils';\n\nimport { type AllowedHtmlTag } from './allowed-tags';\nimport { apiClient } from './api';\nimport { selectData, selectInitialData, selectIsDirty, slice, type StateWithDefaultStyles } from './store';\n\nfunction getChangedTags( state: StateWithDefaultStyles ): AllowedHtmlTag[] {\n\tconst current = selectData( state );\n\tconst initial = selectInitialData( state );\n\n\tconst changed: AllowedHtmlTag[] = [];\n\n\tObject.keys( current ).forEach( ( tag ) => {\n\t\tconst currentStyle = current[ tag ];\n\t\tconst initialStyle = initial[ tag ];\n\n\t\tif ( ! initialStyle || hash( currentStyle ) !== hash( initialStyle ) ) {\n\t\t\tchanged.push( tag as AllowedHtmlTag );\n\t\t}\n\t} );\n\n\tObject.keys( initial ).forEach( ( tag ) => {\n\t\tif ( ! current[ tag ] ) {\n\t\t\tchanged.push( tag as AllowedHtmlTag );\n\t\t}\n\t} );\n\n\treturn changed;\n}\n\nexport async function saveDefaultStyles() {\n\tconst state = getState() as StateWithDefaultStyles;\n\n\tif ( ! selectIsDirty( state ) ) {\n\t\treturn;\n\t}\n\n\tconst data = selectData( state );\n\tconst changedTags = getChangedTags( state );\n\n\tawait Promise.all(\n\t\tchangedTags.map( async ( tag ) => {\n\t\t\tconst style = data[ tag ];\n\n\t\t\tif ( ! style || style.variants.length === 0 ) {\n\t\t\t\tawait apiClient.delete( tag );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait apiClient.put( tag, style.variants );\n\t\t} )\n\t);\n\n\tdispatch( slice.actions.commit() );\n}\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { type StyleDefinitionState } from '@elementor/editor-styles';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport {\n\ttype AutocompleteRenderGetTagProps,\n\tbindTrigger,\n\tChip,\n\tStack,\n\ttype Theme,\n\tTypography,\n\tUnstableChipGroup,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { TagStateMenu } from './tag-state-menu';\n\nconst CHIP_SIZE = 'tiny';\n\ntype TagChipProps = {\n\tlabel: string;\n\tchipProps: ReturnType< AutocompleteRenderGetTagProps >;\n\tactiveState: StyleDefinitionState | null;\n\tonSelectState: ( state: StyleDefinitionState | null ) => void;\n};\n\nexport function TagChip( { label, chipProps, activeState, onSelectState }: TagChipProps ) {\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: 'tag-state-menu',\n\t} );\n\tconst [ chipRef, setChipRef ] = useState< HTMLElement | null >( null );\n\n\tconst { onDelete: _onDelete, ...chipGroupProps } = chipProps;\n\tconst isShowingState = Boolean( activeState );\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableChipGroup\n\t\t\t\tref={ setChipRef }\n\t\t\t\t{ ...chipGroupProps }\n\t\t\t\taria-label={ `Edit ${ label }` }\n\t\t\t\trole=\"group\"\n\t\t\t\tsx={ ( theme: Theme ) => ( {\n\t\t\t\t\t'&.MuiChipGroup-root.MuiAutocomplete-tag': {\n\t\t\t\t\t\tmargin: theme.spacing( 0.125 ),\n\t\t\t\t\t},\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t<Chip\n\t\t\t\t\tsize={ CHIP_SIZE }\n\t\t\t\t\tlabel={ label }\n\t\t\t\t\tvariant={ isShowingState ? 'standard' : 'filled' }\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t\tcolor=\"default\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tif ( isShowingState ) {\n\t\t\t\t\t\t\tonSelectState( null );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tsx={ ( theme: Theme ) => ( {\n\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\tborderRadius: `${ theme.shape.borderRadius * 0.75 }px`,\n\t\t\t\t\t} ) }\n\t\t\t\t/>\n\t\t\t\t<Chip\n\t\t\t\t\ticon={ isShowingState ? undefined : <DotsVerticalIcon fontSize=\"tiny\" /> }\n\t\t\t\t\tsize={ CHIP_SIZE }\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tisShowingState ? (\n\t\t\t\t\t\t\t<Stack direction=\"row\" gap={ 0.5 } alignItems=\"center\">\n\t\t\t\t\t\t\t\t<Typography variant=\"inherit\">{ activeState }</Typography>\n\t\t\t\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t) : undefined\n\t\t\t\t\t}\n\t\t\t\t\tvariant=\"filled\"\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t\tcolor=\"default\"\n\t\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t\t\taria-label={ __( 'Open tag state menu', 'elementor' ) }\n\t\t\t\t\tsx={ ( theme: Theme ) => ( {\n\t\t\t\t\t\tborderRadius: `${ theme.shape.borderRadius * 0.75 }px`,\n\t\t\t\t\t\tpaddingRight: 0,\n\t\t\t\t\t\t...( ! isShowingState ? { paddingLeft: 0 } : {} ),\n\t\t\t\t\t\t'.MuiChip-label': isShowingState ? { paddingRight: 0 } : { padding: 0 },\n\t\t\t\t\t} ) }\n\t\t\t\t/>\n\t\t\t</UnstableChipGroup>\n\t\t\t<TagStateMenu\n\t\t\t\tpopupState={ popupState }\n\t\t\t\tanchorEl={ chipRef }\n\t\t\t\tactiveState={ activeState }\n\t\t\t\tonSelectState={ onSelectState }\n\t\t\t/>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { DEFAULT_PSEUDO_STATES, PseudoStateMenuItems } from '@elementor/editor-editing-panel';\nimport { type StyleDefinitionState } from '@elementor/editor-styles';\nimport { bindMenu, Menu, type PopupState } from '@elementor/ui';\n\ntype TagStateMenuProps = {\n\tpopupState: PopupState;\n\tanchorEl: HTMLElement | null;\n\tactiveState: StyleDefinitionState | null;\n\tonSelectState: ( state: StyleDefinitionState | null ) => void;\n};\n\nexport function TagStateMenu( { popupState, anchorEl, activeState, onSelectState }: TagStateMenuProps ) {\n\treturn (\n\t\t<Menu\n\t\t\tMenuListProps={ { dense: true, sx: { minWidth: '160px' } } }\n\t\t\t{ ...bindMenu( popupState ) }\n\t\t\tanchorEl={ anchorEl }\n\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\ttransformOrigin={ { horizontal: 'left', vertical: -4 } }\n\t\t\tdisableAutoFocusItem\n\t\t>\n\t\t\t<PseudoStateMenuItems\n\t\t\t\tstates={ DEFAULT_PSEUDO_STATES }\n\t\t\t\tactiveState={ activeState }\n\t\t\t\tonSelectState={ onSelectState }\n\t\t\t\tonClose={ popupState.close }\n\t\t\t/>\n\t\t</Menu>\n\t);\n}\n","import { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\nimport {\n\t__dispatch as dispatch,\n\t__getState as getState,\n\t__subscribeWithSelector as subscribeWithSelector,\n} from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { getAllowedDefaultStyleTags } from './allowed-tags';\nimport { selectData, slice } from './store';\n\nexport const DEFAULT_STYLES_PROVIDER_KEY = 'default-styles';\nexport const DEFAULT_STYLES_CSS_NAME_PREFIX = 'e-default-';\n\nconst resolveCssName = ( id: StyleDefinitionID ) => `${ DEFAULT_STYLES_CSS_NAME_PREFIX }${ id }`;\n\nconst placeholderDefinition = ( id: StyleDefinitionID ): StyleDefinition => ( {\n\tid,\n\tlabel: id,\n\ttype: 'class',\n\tvariants: [],\n} );\n\nconst asClassDefinition = ( style: StyleDefinition ): StyleDefinition => ( {\n\t...style,\n\ttype: 'class',\n} );\n\nexport const defaultStylesStylesProvider = createStylesProvider( {\n\tkey: DEFAULT_STYLES_PROVIDER_KEY,\n\tpriority: 15,\n\tlabels: {\n\t\tsingular: __( 'tag', 'elementor' ),\n\t\tplural: __( 'tags', 'elementor' ),\n\t},\n\tsubscribe: ( cb ) => subscribeWithStates( cb ),\n\tactions: {\n\t\tall: () =>\n\t\t\tgetAllowedDefaultStyleTags().map( ( tag ) => {\n\t\t\t\tconst style = selectData( getState() )[ tag ];\n\n\t\t\t\treturn style ? asClassDefinition( style ) : placeholderDefinition( tag );\n\t\t\t} ),\n\t\tget: ( id ) => {\n\t\t\tconst style = selectData( getState() )[ id ];\n\n\t\t\treturn style ? asClassDefinition( style ) : placeholderDefinition( id );\n\t\t},\n\t\tresolveCssName,\n\t\tupdate: ( payload ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.update( {\n\t\t\t\t\tstyle: payload,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tdelete: ( id ) => {\n\t\t\tdispatch( slice.actions.deleteTag( id ) );\n\t\t},\n\t\tupdateProps: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tprops: args.props,\n\t\t\t\t\tmode: args.mode,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tupdateCustomCss: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tcustom_css: args.custom_css,\n\t\t\t\t\tprops: {},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t},\n} );\n\nconst subscribeWithStates = (\n\tcb: ( previous: Record< string, StyleDefinition >, current: Record< string, StyleDefinition > ) => void\n) => {\n\tlet previousState = selectData( getState() );\n\n\treturn subscribeWithSelector(\n\t\t( state ) => selectData( state ),\n\t\t( currentState ) => {\n\t\t\tcb( previousState, currentState );\n\t\t\tpreviousState = currentState;\n\t\t}\n\t);\n};\n","import { type ActionProps } from '@elementor/editor-app-bar';\nimport { TextIcon } from '@elementor/icons';\nimport { __ } from '@wordpress/i18n';\n\nimport { EVENT_REQUEST_OPEN_DEFAULT_STYLES } from '../default-styles-open-gate';\n\nexport function useDefaultStylesActionProps(): ActionProps {\n\treturn {\n\t\ttitle: __( 'Default Styles', 'elementor' ),\n\t\ticon: TextIcon,\n\t\tonClick: () => {\n\t\t\twindow.dispatchEvent( new CustomEvent( EVENT_REQUEST_OPEN_DEFAULT_STYLES ) );\n\t\t},\n\t};\n}\n"],"mappings":"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","names":["React","useCallback","useEffect","SaveChangesDialog","ThemeProvider","useDialog","__","React","React","useEffect","useState","dispatch","Stack","__","dispatch","getState","getState","dispatch","React","__","useState","useEffect","dispatch","Stack","useDialog","useCallback","useEffect","ThemeProvider","SaveChangesDialog","__","dispatch","getState","__","__","getState","dispatch","__","__"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/default-styles-tab-embedded.tsx","../src/allowed-tags.ts","../src/save-default-styles.ts","../src/api.ts","../src/store.ts","../src/components/tag-chip.tsx","../src/components/tag-state-menu.tsx","../src/init.ts","../src/components/populate-store.tsx","../src/load-default-styles.ts","../src/default-styles-provider.ts"],"sourcesContent":["import * as React from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n\tControlActionsProvider,\n\tControlReplacementsProvider,\n\tgetControlReplacements,\n} from '@elementor/editor-controls';\nimport {\n\tClassesPropProvider,\n\tCreatableAutocomplete,\n\tElementProvider,\n\ttype Option,\n\tSectionsList,\n\tStyleInheritanceProvider,\n\tStyleProvider,\n\tStyleSections,\n} from '@elementor/editor-editing-panel';\nimport { type Element, type ElementType } from '@elementor/editor-elements';\nimport { useActiveBreakpoint } from '@elementor/editor-responsive';\nimport { type StyleDefinitionID, type StyleDefinitionState } from '@elementor/editor-styles';\nimport { SaveChangesDialog, ThemeProvider, useDialog } from '@elementor/editor-ui';\nimport { controlActionsMenu } from '@elementor/menus';\nimport { useMutation } from '@elementor/query';\nimport { getSessionStorageItem, SessionStorageProvider, setSessionStorageItem } from '@elementor/session';\nimport { __dispatch as dispatch, __useSelector as useSelector } from '@elementor/store';\nimport {\n\ttype AutocompleteChangeReason,\n\tBox,\n\tButton,\n\tErrorBoundary,\n\tFormControl,\n\tFormLabel,\n\tStack,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport {\n\ttype AllowedHtmlTag,\n\tgetAllowedDefaultStyleTags,\n\tgetDefaultActiveTag,\n\tisAllowedDefaultStyleTag,\n} from '../allowed-tags';\nimport { saveDefaultStyles } from '../save-default-styles';\nimport { selectIsDirty, slice } from '../store';\nimport { TagChip } from './tag-chip';\n\nconst { useMenuItems } = controlActionsMenu;\n\nconst SHIM_ELEMENT_ID = 'default-styles-editor-shim';\nconst SHIM_CLASSES_PROP = '__default_styles_classes__';\nconst TAG_SELECTOR_ID = 'default-styles-tag-selector';\nconst LAST_ACTIVE_TAG_SESSION_PREFIX = 'default-styles';\nconst LAST_ACTIVE_TAG_SESSION_KEY = 'last-active-tag';\nconst LAST_ACTIVE_TAG_STORAGE_KEY = `${ LAST_ACTIVE_TAG_SESSION_PREFIX }/${ LAST_ACTIVE_TAG_SESSION_KEY }`;\n\nfunction readStoredActiveTag( allowedTags: AllowedHtmlTag[] ): AllowedHtmlTag {\n\tconst storedTag = getSessionStorageItem< AllowedHtmlTag >( LAST_ACTIVE_TAG_STORAGE_KEY );\n\n\tif ( storedTag && isAllowedDefaultStyleTag( storedTag, allowedTags ) ) {\n\t\treturn storedTag;\n\t}\n\n\treturn getDefaultActiveTag( allowedTags );\n}\n\nfunction toTagChip( tag: AllowedHtmlTag ): Option {\n\treturn { label: tag, value: tag, fixed: true };\n}\n\nconst shimElement: Element = {\n\tid: SHIM_ELEMENT_ID,\n\ttype: 'default-style',\n};\n\nconst shimElementType: ElementType = {\n\tkey: 'default-style',\n\tcontrols: [],\n\tpropsSchema: {},\n\ttitle: __( 'Default Style', 'elementor' ),\n};\n\nexport type DefaultStylesTabEmbeddedProps = {\n\tonRequestClose: () => void | Promise< void >;\n\tonExposeCloseAttempt?: ( attemptClose: ( () => void ) | null ) => void;\n};\n\nexport function DefaultStylesTabEmbedded( { onRequestClose, onExposeCloseAttempt }: DefaultStylesTabEmbeddedProps ) {\n\tconst allowedTags = useMemo( () => getAllowedDefaultStyleTags(), [] );\n\tconst tagOptions = useMemo< Option[] >(\n\t\t() => allowedTags.map( ( tag ) => ( { label: tag, value: tag } ) ),\n\t\t[ allowedTags ]\n\t);\n\tconst [ selectedTag, setSelectedTagState ] = useState< AllowedHtmlTag >( () => readStoredActiveTag( allowedTags ) );\n\tconst [ activeStyleState, setActiveStyleState ] = useState< StyleDefinitionState | null >( null );\n\tconst breakpoint = useActiveBreakpoint();\n\tconst menuItems = useMenuItems().default;\n\tconst controlReplacements = getControlReplacements();\n\tconst isDirty = useSelector( selectIsDirty );\n\tconst { mutateAsync: save, isPending: isSaving } = useSave();\n\tconst { open: openSaveChangesDialog, close: closeSaveChangesDialog, isOpen: isSaveChangesDialogOpen } = useDialog();\n\n\tconst setSelectedTag = ( tag: AllowedHtmlTag ) => {\n\t\tsetSelectedTagState( tag );\n\t\tsetSessionStorageItem( LAST_ACTIVE_TAG_STORAGE_KEY, tag );\n\t};\n\n\tconst handleClosePanel = useCallback( () => {\n\t\tif ( isDirty ) {\n\t\t\topenSaveChangesDialog();\n\t\t\treturn;\n\t\t}\n\n\t\tvoid onRequestClose();\n\t}, [ isDirty, onRequestClose, openSaveChangesDialog ] );\n\n\tuseEffect( () => {\n\t\tif ( ! onExposeCloseAttempt ) {\n\t\t\treturn;\n\t\t}\n\n\t\tonExposeCloseAttempt( () => handleClosePanel() );\n\n\t\treturn () => onExposeCloseAttempt( null );\n\t}, [ onExposeCloseAttempt, handleClosePanel ] );\n\n\tusePreventUnload( isDirty );\n\n\tconst handleTagSelect = ( _selected: Option[], reason: AutocompleteChangeReason, option: Option ) => {\n\t\tif ( reason !== 'selectOption' || ! option.value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tsetSelectedTag( option.value as AllowedHtmlTag );\n\t\tsetActiveStyleState( null );\n\t};\n\n\tconst resetAndClosePanel = () => {\n\t\tdispatch( slice.actions.reset() );\n\t\tcloseSaveChangesDialog();\n\t\tvoid onRequestClose();\n\t};\n\n\tconst handleSaveAndContinue = async () => {\n\t\ttry {\n\t\t\tawait save();\n\t\t} catch {\n\t\t\treturn;\n\t\t}\n\n\t\tcloseSaveChangesDialog();\n\t\tvoid onRequestClose();\n\t};\n\n\treturn (\n\t\t<ErrorBoundary fallback={ null }>\n\t\t\t<ThemeProvider>\n\t\t\t\t<ControlActionsProvider items={ menuItems }>\n\t\t\t\t\t<ControlReplacementsProvider replacements={ controlReplacements }>\n\t\t\t\t\t\t<Stack\n\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\t\tminHeight: 0,\n\t\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Box sx={ { flex: 1, minHeight: 0, overflow: 'auto' } }>\n\t\t\t\t\t\t\t\t<Stack sx={ { px: 2, pt: 1, gap: 1 } }>\n\t\t\t\t\t\t\t\t\t<FormControl fullWidth size=\"small\">\n\t\t\t\t\t\t\t\t\t\t<FormLabel htmlFor={ TAG_SELECTOR_ID } size=\"small\" sx={ { mb: 1 } }>\n\t\t\t\t\t\t\t\t\t\t\t{ __( 'Tag', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t\t</FormLabel>\n\t\t\t\t\t\t\t\t\t\t<CreatableAutocomplete< Option >\n\t\t\t\t\t\t\t\t\t\t\tid={ TAG_SELECTOR_ID }\n\t\t\t\t\t\t\t\t\t\t\tsize=\"tiny\"\n\t\t\t\t\t\t\t\t\t\t\tplaceholder={ __( 'Type tag name', 'elementor' ) }\n\t\t\t\t\t\t\t\t\t\t\toptions={ tagOptions }\n\t\t\t\t\t\t\t\t\t\t\tselected={ [ toTagChip( selectedTag ) ] }\n\t\t\t\t\t\t\t\t\t\t\tonSelect={ handleTagSelect }\n\t\t\t\t\t\t\t\t\t\t\trenderTags={ ( values, getTagProps ) =>\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.map( ( value, index ) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<TagChip\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tkey={ value.value ?? value.label }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlabel={ value.label }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tchipProps={ getTagProps( { index } ) }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tactiveState={ activeStyleState }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSelectState={ setActiveStyleState }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t) )\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</FormControl>\n\t\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t\t\t<ElementProvider\n\t\t\t\t\t\t\t\t\telement={ shimElement }\n\t\t\t\t\t\t\t\t\telementType={ shimElementType }\n\t\t\t\t\t\t\t\t\tsettings={ {} }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ClassesPropProvider prop={ SHIM_CLASSES_PROP }>\n\t\t\t\t\t\t\t\t\t\t<StyleProvider\n\t\t\t\t\t\t\t\t\t\t\tmeta={ {\n\t\t\t\t\t\t\t\t\t\t\t\tbreakpoint,\n\t\t\t\t\t\t\t\t\t\t\t\tstate: activeStyleState,\n\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\tid={ selectedTag as StyleDefinitionID }\n\t\t\t\t\t\t\t\t\t\t\tsetId={ () => {} }\n\t\t\t\t\t\t\t\t\t\t\tsetMetaState={ setActiveStyleState }\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<SessionStorageProvider prefix={ selectedTag }>\n\t\t\t\t\t\t\t\t\t\t\t\t<StyleInheritanceProvider>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<SectionsList>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<StyleSections />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</SectionsList>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsx={ {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\theight: '150px',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t</StyleInheritanceProvider>\n\t\t\t\t\t\t\t\t\t\t\t</SessionStorageProvider>\n\t\t\t\t\t\t\t\t\t\t</StyleProvider>\n\t\t\t\t\t\t\t\t\t</ClassesPropProvider>\n\t\t\t\t\t\t\t\t</ElementProvider>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t\t<Box sx={ { flexShrink: 0, px: 2, py: 1.5 } }>\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t\t\tcolor=\"global\"\n\t\t\t\t\t\t\t\t\tvariant=\"contained\"\n\t\t\t\t\t\t\t\t\tonClick={ () => void save() }\n\t\t\t\t\t\t\t\t\tdisabled={ ! isDirty }\n\t\t\t\t\t\t\t\t\tloading={ isSaving }\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{ __( 'Save changes', 'elementor' ) }\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</Box>\n\t\t\t\t\t\t</Stack>\n\t\t\t\t\t</ControlReplacementsProvider>\n\t\t\t\t</ControlActionsProvider>\n\n\t\t\t\t{ isSaveChangesDialogOpen && (\n\t\t\t\t\t<SaveChangesDialog>\n\t\t\t\t\t\t<SaveChangesDialog.Title onClose={ closeSaveChangesDialog }>\n\t\t\t\t\t\t\t{ __( 'You have unsaved changes', 'elementor' ) }\n\t\t\t\t\t\t</SaveChangesDialog.Title>\n\t\t\t\t\t\t<SaveChangesDialog.Content>\n\t\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t\t{ __( 'You have unsaved changes in Default Styles.', 'elementor' ) }\n\t\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t<SaveChangesDialog.ContentText>\n\t\t\t\t\t\t\t\t{ __( 'To avoid losing your updates, save your changes before leaving.', 'elementor' ) }\n\t\t\t\t\t\t\t</SaveChangesDialog.ContentText>\n\t\t\t\t\t\t</SaveChangesDialog.Content>\n\t\t\t\t\t\t<SaveChangesDialog.Actions\n\t\t\t\t\t\t\tactions={ {\n\t\t\t\t\t\t\t\tdiscard: {\n\t\t\t\t\t\t\t\t\tlabel: __( 'Discard', 'elementor' ),\n\t\t\t\t\t\t\t\t\taction: resetAndClosePanel,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tconfirm: {\n\t\t\t\t\t\t\t\t\tlabel: __( 'Save & Continue', 'elementor' ),\n\t\t\t\t\t\t\t\t\taction: handleSaveAndContinue,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t} }\n\t\t\t\t\t\t/>\n\t\t\t\t\t</SaveChangesDialog>\n\t\t\t\t) }\n\t\t\t</ThemeProvider>\n\t\t</ErrorBoundary>\n\t);\n}\n\nfunction useSave() {\n\treturn useMutation( {\n\t\tmutationFn: () => saveDefaultStyles(),\n\t} );\n}\n\nfunction usePreventUnload( isDirty: boolean ) {\n\tuseEffect( () => {\n\t\tconst handleBeforeUnload = ( event: BeforeUnloadEvent ) => {\n\t\t\tif ( isDirty ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener( 'beforeunload', handleBeforeUnload );\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener( 'beforeunload', handleBeforeUnload );\n\t\t};\n\t}, [ isDirty ] );\n}\n","type ExtendedWindow = Window & {\n\telementor: {\n\t\tconfig: {\n\t\t\tatomic?: {\n\t\t\t\tdefault_styles?: {\n\t\t\t\t\tallowed_tags?: string[];\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n};\n\nconst getElementorConfig = () => ( window as unknown as ExtendedWindow ).elementor?.config ?? {};\n\nexport const getAllowedDefaultStyleTags = (): string[] => {\n\tconst tags = getElementorConfig().atomic?.default_styles?.allowed_tags;\n\n\tif ( ! tags?.length ) {\n\t\treturn [];\n\t}\n\n\treturn tags;\n};\n\nexport type AllowedHtmlTag = string;\n\nexport const getDefaultActiveTag = ( tags: string[] ): AllowedHtmlTag => {\n\tif ( tags.includes( 'h1' ) ) {\n\t\treturn 'h1';\n\t}\n\n\treturn tags[ 0 ] ?? '';\n};\n\nexport const isAllowedDefaultStyleTag = ( tag: string, tags = getAllowedDefaultStyleTags() ): tag is AllowedHtmlTag =>\n\ttags.includes( tag );\n","import { __dispatch as dispatch, __getState as getState } from '@elementor/store';\nimport { hash } from '@elementor/utils';\n\nimport { type AllowedHtmlTag } from './allowed-tags';\nimport { apiClient } from './api';\nimport { selectData, selectInitialData, selectIsDirty, slice, type StateWithDefaultStyles } from './store';\n\nfunction getChangedTags( state: StateWithDefaultStyles ): AllowedHtmlTag[] {\n\tconst current = selectData( state );\n\tconst initial = selectInitialData( state );\n\n\tconst changed: AllowedHtmlTag[] = [];\n\n\tObject.keys( current ).forEach( ( tag ) => {\n\t\tconst currentStyle = current[ tag ];\n\t\tconst initialStyle = initial[ tag ];\n\n\t\tif ( ! initialStyle || hash( currentStyle ) !== hash( initialStyle ) ) {\n\t\t\tchanged.push( tag as AllowedHtmlTag );\n\t\t}\n\t} );\n\n\tObject.keys( initial ).forEach( ( tag ) => {\n\t\tif ( ! current[ tag ] ) {\n\t\t\tchanged.push( tag as AllowedHtmlTag );\n\t\t}\n\t} );\n\n\treturn changed;\n}\n\nexport async function saveDefaultStyles() {\n\tconst state = getState() as StateWithDefaultStyles;\n\n\tif ( ! selectIsDirty( state ) ) {\n\t\treturn;\n\t}\n\n\tconst data = selectData( state );\n\tconst changedTags = getChangedTags( state );\n\n\tawait Promise.all(\n\t\tchangedTags.map( async ( tag ) => {\n\t\t\tconst style = data[ tag ];\n\n\t\t\tif ( ! style || style.variants.length === 0 ) {\n\t\t\t\tawait apiClient.delete( tag );\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait apiClient.put( tag, style.variants );\n\t\t} )\n\t);\n\n\tdispatch( slice.actions.commit() );\n}\n","import { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { type HttpResponse, httpService } from '@elementor/http-client';\n\nimport { type AllowedHtmlTag } from './allowed-tags';\n\nconst RESOURCE_URL = '/default-styles';\nconst BASE_URL = 'elementor/v1';\n\nexport type DefaultStylesMap = Record< StyleDefinitionID, StyleDefinition >;\n\ntype DefaultStylesHttpResponse = HttpResponse< DefaultStylesMap >;\n\nexport const apiClient = {\n\tall: () => httpService().get< DefaultStylesHttpResponse >( `${ BASE_URL }${ RESOURCE_URL }` ),\n\n\tput: ( tag: AllowedHtmlTag, variants: StyleDefinition[ 'variants' ] ) =>\n\t\thttpService().put( `${ BASE_URL }${ RESOURCE_URL }/${ tag }`, {\n\t\t\ttype: 'class',\n\t\t\tvariants,\n\t\t} ),\n\n\tdelete: ( tag: AllowedHtmlTag ) => httpService().delete( `${ BASE_URL }${ RESOURCE_URL }/${ tag }` ),\n};\n","import { type Props } from '@elementor/editor-props';\nimport {\n\ttype CustomCss,\n\tgetVariantByMeta,\n\ttype StyleDefinition,\n\ttype StyleDefinitionID,\n\ttype StyleDefinitionVariant,\n} from '@elementor/editor-styles';\nimport { type UpdateActionPayload } from '@elementor/editor-styles-repository';\nimport {\n\t__createSelector as createSelector,\n\t__createSlice as createSlice,\n\ttype PayloadAction,\n\ttype SliceState,\n} from '@elementor/store';\n\ntype DefaultStylesState = {\n\tdata: Record< StyleDefinitionID, StyleDefinition >;\n\tinitialData: Record< StyleDefinitionID, StyleDefinition >;\n\tisDirty: boolean;\n};\n\nconst initialState: DefaultStylesState = {\n\tdata: {},\n\tinitialData: {},\n\tisDirty: false,\n};\n\nexport type StateWithDefaultStyles = SliceState< typeof slice >;\n\nconst SLICE_NAME = 'defaultStyles';\n\nexport const slice = createSlice( {\n\tname: SLICE_NAME,\n\tinitialState,\n\treducers: {\n\t\tload(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload: { data },\n\t\t\t}: PayloadAction< {\n\t\t\t\tdata: Record< StyleDefinitionID, StyleDefinition >;\n\t\t\t} >\n\t\t) {\n\t\t\tconst normalizedData = Array.isArray( data ) ? {} : data;\n\n\t\t\tstate.initialData = structuredClone( normalizedData );\n\t\t\tstate.data = structuredClone( normalizedData );\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tupdate( state, { payload }: PayloadAction< { style: UpdateActionPayload } > ) {\n\t\t\tstate.data[ payload.style.id ] = {\n\t\t\t\t...state.data[ payload.style.id ],\n\t\t\t\t...payload.style,\n\t\t\t} as StyleDefinition;\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\tupdateProps(\n\t\t\tstate,\n\t\t\t{\n\t\t\t\tpayload,\n\t\t\t}: PayloadAction< {\n\t\t\t\tid: StyleDefinitionID;\n\t\t\t\tmeta: StyleDefinitionVariant[ 'meta' ];\n\t\t\t\tprops: Props;\n\t\t\t\tcustom_css?: CustomCss | null;\n\t\t\t\tmode?: 'merge' | 'replace';\n\t\t\t} >\n\t\t) {\n\t\t\tconst style = state.data[ payload.id ] ?? {\n\t\t\t\tid: payload.id,\n\t\t\t\tlabel: payload.id,\n\t\t\t\ttype: 'class' as const,\n\t\t\t\tvariants: [],\n\t\t\t};\n\n\t\t\tconst variant = getVariantByMeta( style, payload.meta );\n\t\t\tlet customCss = ( 'custom_css' in payload ? payload.custom_css : variant?.custom_css ) ?? null;\n\t\t\tcustomCss = customCss?.raw ? customCss : null;\n\n\t\t\tif ( variant ) {\n\t\t\t\tconst payloadProps = JSON.parse( JSON.stringify( payload.props ) ) as Props;\n\t\t\t\tconst mode = payload.mode ?? 'merge';\n\n\t\t\t\tif ( mode === 'replace' ) {\n\t\t\t\t\tvariant.props = payloadProps;\n\t\t\t\t} else {\n\t\t\t\t\tvariant.props = { ...variant.props, ...payloadProps };\n\t\t\t\t}\n\n\t\t\t\tvariant.custom_css = customCss;\n\t\t\t} else {\n\t\t\t\tstyle.variants.push( {\n\t\t\t\t\tmeta: payload.meta,\n\t\t\t\t\tprops: payload.props,\n\t\t\t\t\tcustom_css: customCss,\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tstate.data[ payload.id ] = style;\n\t\t\tstate.isDirty = true;\n\t\t},\n\n\t\treset( state ) {\n\t\t\tstate.data = state.initialData;\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tcommit( state ) {\n\t\t\tstate.initialData = state.data;\n\t\t\tstate.isDirty = false;\n\t\t},\n\n\t\tdeleteTag( state, { payload }: PayloadAction< StyleDefinitionID > ) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\tdelete state.data[ payload ];\n\t\t\tstate.isDirty = true;\n\t\t},\n\t},\n} );\n\nexport const selectData = createSelector(\n\t( state: StateWithDefaultStyles ) => state.defaultStyles.data,\n\t( data ) => data\n);\n\nexport const selectIsDirty = createSelector(\n\t( state: StateWithDefaultStyles ) => state.defaultStyles.isDirty,\n\t( isDirty ) => isDirty\n);\n\nexport const selectInitialData = createSelector(\n\t( state: StateWithDefaultStyles ) => state.defaultStyles.initialData,\n\t( initialData ) => initialData\n);\n\nexport const selectTagStyle = createSelector(\n\t[ selectData, ( _state: StateWithDefaultStyles, id: StyleDefinitionID ) => id ],\n\t( data, id ) => data[ id ]\n);\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { type StyleDefinitionState } from '@elementor/editor-styles';\nimport { DotsVerticalIcon } from '@elementor/icons';\nimport {\n\ttype AutocompleteRenderGetTagProps,\n\tbindTrigger,\n\tChip,\n\tStack,\n\ttype Theme,\n\tTypography,\n\tUnstableChipGroup,\n\tusePopupState,\n} from '@elementor/ui';\nimport { __ } from '@wordpress/i18n';\n\nimport { TagStateMenu } from './tag-state-menu';\n\nconst CHIP_SIZE = 'tiny';\n\ntype TagChipProps = {\n\tlabel: string;\n\tchipProps: ReturnType< AutocompleteRenderGetTagProps >;\n\tactiveState: StyleDefinitionState | null;\n\tonSelectState: ( state: StyleDefinitionState | null ) => void;\n};\n\nexport function TagChip( { label, chipProps, activeState, onSelectState }: TagChipProps ) {\n\tconst popupState = usePopupState( {\n\t\tvariant: 'popover',\n\t\tpopupId: 'tag-state-menu',\n\t} );\n\tconst [ chipRef, setChipRef ] = useState< HTMLElement | null >( null );\n\n\tconst { onDelete: _onDelete, ...chipGroupProps } = chipProps;\n\tconst isShowingState = Boolean( activeState );\n\n\treturn (\n\t\t<>\n\t\t\t<UnstableChipGroup\n\t\t\t\tref={ setChipRef }\n\t\t\t\t{ ...chipGroupProps }\n\t\t\t\taria-label={ `Edit ${ label }` }\n\t\t\t\trole=\"group\"\n\t\t\t\tsx={ ( theme: Theme ) => ( {\n\t\t\t\t\t'&.MuiChipGroup-root.MuiAutocomplete-tag': {\n\t\t\t\t\t\tmargin: theme.spacing( 0.125 ),\n\t\t\t\t\t},\n\t\t\t\t} ) }\n\t\t\t>\n\t\t\t\t<Chip\n\t\t\t\t\tsize={ CHIP_SIZE }\n\t\t\t\t\tlabel={ label }\n\t\t\t\t\tvariant={ isShowingState ? 'standard' : 'filled' }\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t\tcolor=\"default\"\n\t\t\t\t\tonClick={ () => {\n\t\t\t\t\t\tif ( isShowingState ) {\n\t\t\t\t\t\t\tonSelectState( null );\n\t\t\t\t\t\t}\n\t\t\t\t\t} }\n\t\t\t\t\tsx={ ( theme: Theme ) => ( {\n\t\t\t\t\t\tlineHeight: 1,\n\t\t\t\t\t\tborderRadius: `${ theme.shape.borderRadius * 0.75 }px`,\n\t\t\t\t\t} ) }\n\t\t\t\t/>\n\t\t\t\t<Chip\n\t\t\t\t\ticon={ isShowingState ? undefined : <DotsVerticalIcon fontSize=\"tiny\" /> }\n\t\t\t\t\tsize={ CHIP_SIZE }\n\t\t\t\t\tlabel={\n\t\t\t\t\t\tisShowingState ? (\n\t\t\t\t\t\t\t<Stack direction=\"row\" gap={ 0.5 } alignItems=\"center\">\n\t\t\t\t\t\t\t\t<Typography variant=\"inherit\">{ activeState }</Typography>\n\t\t\t\t\t\t\t\t<DotsVerticalIcon fontSize=\"tiny\" />\n\t\t\t\t\t\t\t</Stack>\n\t\t\t\t\t\t) : undefined\n\t\t\t\t\t}\n\t\t\t\t\tvariant=\"filled\"\n\t\t\t\t\tshape=\"rounded\"\n\t\t\t\t\tcolor=\"default\"\n\t\t\t\t\t{ ...bindTrigger( popupState ) }\n\t\t\t\t\taria-label={ __( 'Open tag state menu', 'elementor' ) }\n\t\t\t\t\tsx={ ( theme: Theme ) => ( {\n\t\t\t\t\t\tborderRadius: `${ theme.shape.borderRadius * 0.75 }px`,\n\t\t\t\t\t\tpaddingRight: 0,\n\t\t\t\t\t\t...( ! isShowingState ? { paddingLeft: 0 } : {} ),\n\t\t\t\t\t\t'.MuiChip-label': isShowingState ? { paddingRight: 0 } : { padding: 0 },\n\t\t\t\t\t} ) }\n\t\t\t\t/>\n\t\t\t</UnstableChipGroup>\n\t\t\t<TagStateMenu\n\t\t\t\tpopupState={ popupState }\n\t\t\t\tanchorEl={ chipRef }\n\t\t\t\tactiveState={ activeState }\n\t\t\t\tonSelectState={ onSelectState }\n\t\t\t/>\n\t\t</>\n\t);\n}\n","import * as React from 'react';\nimport { DEFAULT_PSEUDO_STATES, PseudoStateMenuItems } from '@elementor/editor-editing-panel';\nimport { type StyleDefinitionState } from '@elementor/editor-styles';\nimport { bindMenu, Menu, type PopupState } from '@elementor/ui';\n\ntype TagStateMenuProps = {\n\tpopupState: PopupState;\n\tanchorEl: HTMLElement | null;\n\tactiveState: StyleDefinitionState | null;\n\tonSelectState: ( state: StyleDefinitionState | null ) => void;\n};\n\nexport function TagStateMenu( { popupState, anchorEl, activeState, onSelectState }: TagStateMenuProps ) {\n\treturn (\n\t\t<Menu\n\t\t\tMenuListProps={ { dense: true, sx: { minWidth: '160px' } } }\n\t\t\t{ ...bindMenu( popupState ) }\n\t\t\tanchorEl={ anchorEl }\n\t\t\tanchorOrigin={ { vertical: 'bottom', horizontal: 'left' } }\n\t\t\ttransformOrigin={ { horizontal: 'left', vertical: -4 } }\n\t\t\tdisableAutoFocusItem\n\t\t>\n\t\t\t<PseudoStateMenuItems\n\t\t\t\tstates={ DEFAULT_PSEUDO_STATES }\n\t\t\t\tactiveState={ activeState }\n\t\t\t\tonSelectState={ onSelectState }\n\t\t\t\tonClose={ popupState.close }\n\t\t\t/>\n\t\t</Menu>\n\t);\n}\n","import { injectIntoLogic } from '@elementor/editor';\nimport { registerElementPanelDefaults, STYLE_SECTION_NAMES } from '@elementor/editor-editing-panel';\nimport { stylesRepository } from '@elementor/editor-styles-repository';\nimport { isExperimentActive } from '@elementor/editor-v1-adapters';\nimport { __registerSlice as registerSlice } from '@elementor/store';\n\nimport { PopulateStore } from './components/populate-store';\nimport { defaultStylesStylesProvider } from './default-styles-provider';\nimport { slice } from './store';\n\nconst DEFAULT_STYLES_EXPERIMENT = 'e_default_styles';\n\nexport function init() {\n\tif ( ! isExperimentActive( DEFAULT_STYLES_EXPERIMENT ) ) {\n\t\treturn;\n\t}\n\n\tregisterSlice( slice );\n\n\tregisterElementPanelDefaults( 'default-style', {\n\t\tdefaultTab: 'style',\n\t\tdefaultSectionsExpanded: {\n\t\t\tstyle: [ ...STYLE_SECTION_NAMES ],\n\t\t},\n\t} );\n\n\tstylesRepository.register( defaultStylesStylesProvider );\n\n\tinjectIntoLogic( {\n\t\tid: 'default-styles-populate-store',\n\t\tcomponent: PopulateStore,\n\t} );\n}\n","import { useEffect } from 'react';\nimport { __privateListenTo as listenTo, registerDataHook, routeCloseEvent } from '@elementor/editor-v1-adapters';\nimport { __getState as getState } from '@elementor/store';\n\nimport { loadDefaultStyles } from '../load-default-styles';\nimport { selectIsDirty } from '../store';\n\nconst V2_PANEL_ROUTE = 'panel/v2';\n\nexport function PopulateStore() {\n\tuseEffect( () => {\n\t\tvoid loadDefaultStyles();\n\n\t\tregisterDataHook( 'after', 'editor/documents/attach-preview', async () => {\n\t\t\tif ( selectIsDirty( getState() ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tawait loadDefaultStyles();\n\t\t} );\n\n\t\tconst unsubscribe = listenTo( routeCloseEvent( V2_PANEL_ROUTE ), () => {\n\t\t\tif ( selectIsDirty( getState() ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid loadDefaultStyles();\n\t\t} );\n\n\t\treturn unsubscribe;\n\t}, [] );\n\n\treturn null;\n}\n","import { __dispatch as dispatch } from '@elementor/store';\n\nimport { apiClient } from './api';\nimport { slice } from './store';\n\nexport async function loadDefaultStyles() {\n\tconst response = await apiClient.all();\n\n\tconst items = response.data.data;\n\n\tdispatch(\n\t\tslice.actions.load( {\n\t\t\tdata: items,\n\t\t} )\n\t);\n}\n","import { type StyleDefinition, type StyleDefinitionID } from '@elementor/editor-styles';\nimport { createStylesProvider } from '@elementor/editor-styles-repository';\nimport {\n\t__dispatch as dispatch,\n\t__getState as getState,\n\t__subscribeWithSelector as subscribeWithSelector,\n} from '@elementor/store';\nimport { __ } from '@wordpress/i18n';\n\nimport { getAllowedDefaultStyleTags } from './allowed-tags';\nimport { selectData, slice } from './store';\n\nexport const DEFAULT_STYLES_PROVIDER_KEY = 'default-styles';\nexport const DEFAULT_STYLES_CSS_NAME_PREFIX = 'e-default-';\n\nconst resolveCssName = ( id: StyleDefinitionID ) => `${ DEFAULT_STYLES_CSS_NAME_PREFIX }${ id }`;\n\nconst placeholderDefinition = ( id: StyleDefinitionID ): StyleDefinition => ( {\n\tid,\n\tlabel: id,\n\ttype: 'class',\n\tvariants: [],\n} );\n\nconst asClassDefinition = ( style: StyleDefinition ): StyleDefinition => ( {\n\t...style,\n\ttype: 'class',\n} );\n\nexport const defaultStylesStylesProvider = createStylesProvider( {\n\tkey: DEFAULT_STYLES_PROVIDER_KEY,\n\tpriority: 15,\n\tlabels: {\n\t\tsingular: __( 'tag', 'elementor' ),\n\t\tplural: __( 'tags', 'elementor' ),\n\t},\n\tsubscribe: ( cb ) => subscribeWithStates( cb ),\n\tactions: {\n\t\tall: () =>\n\t\t\tgetAllowedDefaultStyleTags().map( ( tag ) => {\n\t\t\t\tconst style = selectData( getState() )[ tag ];\n\n\t\t\t\treturn style ? asClassDefinition( style ) : placeholderDefinition( tag );\n\t\t\t} ),\n\t\tget: ( id ) => {\n\t\t\tconst style = selectData( getState() )[ id ];\n\n\t\t\treturn style ? asClassDefinition( style ) : placeholderDefinition( id );\n\t\t},\n\t\tresolveCssName,\n\t\tupdate: ( payload ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.update( {\n\t\t\t\t\tstyle: payload,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tdelete: ( id ) => {\n\t\t\tdispatch( slice.actions.deleteTag( id ) );\n\t\t},\n\t\tupdateProps: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tprops: args.props,\n\t\t\t\t\tmode: args.mode,\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t\tupdateCustomCss: ( args ) => {\n\t\t\tdispatch(\n\t\t\t\tslice.actions.updateProps( {\n\t\t\t\t\tid: args.id,\n\t\t\t\t\tmeta: args.meta,\n\t\t\t\t\tcustom_css: args.custom_css,\n\t\t\t\t\tprops: {},\n\t\t\t\t} )\n\t\t\t);\n\t\t},\n\t},\n} );\n\nconst subscribeWithStates = (\n\tcb: ( previous: Record< string, StyleDefinition >, current: Record< string, StyleDefinition > ) => void\n) => {\n\tlet previousState = selectData( getState() );\n\n\treturn subscribeWithSelector(\n\t\t( state ) => selectData( state ),\n\t\t( currentState ) => {\n\t\t\tcb( previousState, currentState );\n\t\t\tpreviousState = currentState;\n\t\t}\n\t);\n};\n"],"mappings":"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","names":["React","useState","dispatch","Stack","__","React","__","useState","dispatch","Stack","useEffect","getState","dispatch","dispatch","useEffect","getState","dispatch","getState","__","__","getState","dispatch"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@elementor/editor-default-styles",
|
|
3
|
-
"version": "4.3.0-
|
|
3
|
+
"version": "4.3.0-1052",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Elementor Team",
|
|
6
6
|
"homepage": "https://elementor.com/",
|
|
@@ -39,27 +39,27 @@
|
|
|
39
39
|
"dev": "tsup --config=../../tsup.dev.ts"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@elementor/editor": "4.3.0-
|
|
43
|
-
"@elementor/editor-app-bar": "4.3.0-
|
|
44
|
-
"@elementor/editor-controls": "4.3.0-
|
|
45
|
-
"@elementor/editor-documents": "4.3.0-
|
|
46
|
-
"@elementor/editor-editing-panel": "4.3.0-
|
|
47
|
-
"@elementor/editor-elements": "4.3.0-
|
|
48
|
-
"@elementor/editor-panels": "4.3.0-
|
|
49
|
-
"@elementor/editor-props": "4.3.0-
|
|
50
|
-
"@elementor/editor-responsive": "4.3.0-
|
|
51
|
-
"@elementor/editor-styles": "4.3.0-
|
|
52
|
-
"@elementor/editor-styles-repository": "4.3.0-
|
|
53
|
-
"@elementor/editor-ui": "4.3.0-
|
|
54
|
-
"@elementor/editor-v1-adapters": "4.3.0-
|
|
55
|
-
"@elementor/http-client": "4.3.0-
|
|
42
|
+
"@elementor/editor": "4.3.0-1052",
|
|
43
|
+
"@elementor/editor-app-bar": "4.3.0-1052",
|
|
44
|
+
"@elementor/editor-controls": "4.3.0-1052",
|
|
45
|
+
"@elementor/editor-documents": "4.3.0-1052",
|
|
46
|
+
"@elementor/editor-editing-panel": "4.3.0-1052",
|
|
47
|
+
"@elementor/editor-elements": "4.3.0-1052",
|
|
48
|
+
"@elementor/editor-panels": "4.3.0-1052",
|
|
49
|
+
"@elementor/editor-props": "4.3.0-1052",
|
|
50
|
+
"@elementor/editor-responsive": "4.3.0-1052",
|
|
51
|
+
"@elementor/editor-styles": "4.3.0-1052",
|
|
52
|
+
"@elementor/editor-styles-repository": "4.3.0-1052",
|
|
53
|
+
"@elementor/editor-ui": "4.3.0-1052",
|
|
54
|
+
"@elementor/editor-v1-adapters": "4.3.0-1052",
|
|
55
|
+
"@elementor/http-client": "4.3.0-1052",
|
|
56
56
|
"@elementor/icons": "~1.75.1",
|
|
57
|
-
"@elementor/menus": "4.3.0-
|
|
58
|
-
"@elementor/query": "4.3.0-
|
|
59
|
-
"@elementor/session": "4.3.0-
|
|
60
|
-
"@elementor/store": "4.3.0-
|
|
57
|
+
"@elementor/menus": "4.3.0-1052",
|
|
58
|
+
"@elementor/query": "4.3.0-1052",
|
|
59
|
+
"@elementor/session": "4.3.0-1052",
|
|
60
|
+
"@elementor/store": "4.3.0-1052",
|
|
61
61
|
"@elementor/ui": "1.37.5",
|
|
62
|
-
"@elementor/utils": "4.3.0-
|
|
62
|
+
"@elementor/utils": "4.3.0-1052",
|
|
63
63
|
"@wordpress/i18n": "^5.13.0"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
@@ -16,7 +16,6 @@ import {
|
|
|
16
16
|
StyleSections,
|
|
17
17
|
} from '@elementor/editor-editing-panel';
|
|
18
18
|
import { type Element, type ElementType } from '@elementor/editor-elements';
|
|
19
|
-
import { Panel, PanelBody, PanelFooter, PanelHeader, PanelHeaderTitle } from '@elementor/editor-panels';
|
|
20
19
|
import { useActiveBreakpoint } from '@elementor/editor-responsive';
|
|
21
20
|
import { type StyleDefinitionID, type StyleDefinitionState } from '@elementor/editor-styles';
|
|
22
21
|
import { SaveChangesDialog, ThemeProvider, useDialog } from '@elementor/editor-ui';
|
|
@@ -28,7 +27,6 @@ import {
|
|
|
28
27
|
type AutocompleteChangeReason,
|
|
29
28
|
Box,
|
|
30
29
|
Button,
|
|
31
|
-
CloseButton,
|
|
32
30
|
ErrorBoundary,
|
|
33
31
|
FormControl,
|
|
34
32
|
FormLabel,
|
|
@@ -42,7 +40,6 @@ import {
|
|
|
42
40
|
getDefaultActiveTag,
|
|
43
41
|
isAllowedDefaultStyleTag,
|
|
44
42
|
} from '../allowed-tags';
|
|
45
|
-
import { blockPanelInteractions, unblockPanelInteractions } from '../panel-interactions';
|
|
46
43
|
import { saveDefaultStyles } from '../save-default-styles';
|
|
47
44
|
import { selectIsDirty, slice } from '../store';
|
|
48
45
|
import { TagChip } from './tag-chip';
|
|
@@ -82,11 +79,12 @@ const shimElementType: ElementType = {
|
|
|
82
79
|
title: __( 'Default Style', 'elementor' ),
|
|
83
80
|
};
|
|
84
81
|
|
|
85
|
-
type
|
|
86
|
-
onRequestClose: () => void
|
|
82
|
+
export type DefaultStylesTabEmbeddedProps = {
|
|
83
|
+
onRequestClose: () => void | Promise< void >;
|
|
84
|
+
onExposeCloseAttempt?: ( attemptClose: ( () => void ) | null ) => void;
|
|
87
85
|
};
|
|
88
86
|
|
|
89
|
-
export function
|
|
87
|
+
export function DefaultStylesTabEmbedded( { onRequestClose, onExposeCloseAttempt }: DefaultStylesTabEmbeddedProps ) {
|
|
90
88
|
const allowedTags = useMemo( () => getAllowedDefaultStyleTags(), [] );
|
|
91
89
|
const tagOptions = useMemo< Option[] >(
|
|
92
90
|
() => allowedTags.map( ( tag ) => ( { label: tag, value: tag } ) ),
|
|
@@ -112,16 +110,18 @@ export function DefaultStylesPanelContent( { onRequestClose }: DefaultStylesPane
|
|
|
112
110
|
return;
|
|
113
111
|
}
|
|
114
112
|
|
|
115
|
-
onRequestClose();
|
|
113
|
+
void onRequestClose();
|
|
116
114
|
}, [ isDirty, onRequestClose, openSaveChangesDialog ] );
|
|
117
115
|
|
|
118
116
|
useEffect( () => {
|
|
119
|
-
|
|
117
|
+
if ( ! onExposeCloseAttempt ) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
120
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}, [] );
|
|
121
|
+
onExposeCloseAttempt( () => handleClosePanel() );
|
|
122
|
+
|
|
123
|
+
return () => onExposeCloseAttempt( null );
|
|
124
|
+
}, [ onExposeCloseAttempt, handleClosePanel ] );
|
|
125
125
|
|
|
126
126
|
usePreventUnload( isDirty );
|
|
127
127
|
|
|
@@ -137,7 +137,7 @@ export function DefaultStylesPanelContent( { onRequestClose }: DefaultStylesPane
|
|
|
137
137
|
const resetAndClosePanel = () => {
|
|
138
138
|
dispatch( slice.actions.reset() );
|
|
139
139
|
closeSaveChangesDialog();
|
|
140
|
-
onRequestClose();
|
|
140
|
+
void onRequestClose();
|
|
141
141
|
};
|
|
142
142
|
|
|
143
143
|
const handleSaveAndContinue = async () => {
|
|
@@ -148,7 +148,7 @@ export function DefaultStylesPanelContent( { onRequestClose }: DefaultStylesPane
|
|
|
148
148
|
}
|
|
149
149
|
|
|
150
150
|
closeSaveChangesDialog();
|
|
151
|
-
onRequestClose();
|
|
151
|
+
void onRequestClose();
|
|
152
152
|
};
|
|
153
153
|
|
|
154
154
|
return (
|
|
@@ -156,28 +156,16 @@ export function DefaultStylesPanelContent( { onRequestClose }: DefaultStylesPane
|
|
|
156
156
|
<ThemeProvider>
|
|
157
157
|
<ControlActionsProvider items={ menuItems }>
|
|
158
158
|
<ControlReplacementsProvider replacements={ controlReplacements }>
|
|
159
|
-
<
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
>
|
|
170
|
-
<PanelHeaderTitle sx={ { flex: 1, minWidth: 0 } }>
|
|
171
|
-
{ __( 'Default Styles', 'elementor' ) }
|
|
172
|
-
</PanelHeaderTitle>
|
|
173
|
-
<CloseButton
|
|
174
|
-
aria-label={ __( 'Close', 'elementor' ) }
|
|
175
|
-
sx={ { flexShrink: 0 } }
|
|
176
|
-
onClick={ handleClosePanel }
|
|
177
|
-
/>
|
|
178
|
-
</Stack>
|
|
179
|
-
</PanelHeader>
|
|
180
|
-
<PanelBody>
|
|
159
|
+
<Stack
|
|
160
|
+
sx={ {
|
|
161
|
+
flex: 1,
|
|
162
|
+
minHeight: 0,
|
|
163
|
+
overflow: 'hidden',
|
|
164
|
+
display: 'flex',
|
|
165
|
+
flexDirection: 'column',
|
|
166
|
+
} }
|
|
167
|
+
>
|
|
168
|
+
<Box sx={ { flex: 1, minHeight: 0, overflow: 'auto' } }>
|
|
181
169
|
<Stack sx={ { px: 2, pt: 1, gap: 1 } }>
|
|
182
170
|
<FormControl fullWidth size="small">
|
|
183
171
|
<FormLabel htmlFor={ TAG_SELECTOR_ID } size="small" sx={ { mb: 1 } }>
|
|
@@ -234,8 +222,8 @@ export function DefaultStylesPanelContent( { onRequestClose }: DefaultStylesPane
|
|
|
234
222
|
</StyleProvider>
|
|
235
223
|
</ClassesPropProvider>
|
|
236
224
|
</ElementProvider>
|
|
237
|
-
</
|
|
238
|
-
<
|
|
225
|
+
</Box>
|
|
226
|
+
<Box sx={ { flexShrink: 0, px: 2, py: 1.5 } }>
|
|
239
227
|
<Button
|
|
240
228
|
fullWidth
|
|
241
229
|
size="small"
|
|
@@ -247,8 +235,8 @@ export function DefaultStylesPanelContent( { onRequestClose }: DefaultStylesPane
|
|
|
247
235
|
>
|
|
248
236
|
{ __( 'Save changes', 'elementor' ) }
|
|
249
237
|
</Button>
|
|
250
|
-
</
|
|
251
|
-
</
|
|
238
|
+
</Box>
|
|
239
|
+
</Stack>
|
|
252
240
|
</ControlReplacementsProvider>
|
|
253
241
|
</ControlActionsProvider>
|
|
254
242
|
|
package/src/index.ts
CHANGED
package/src/init.ts
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { injectIntoLogic } from '@elementor/editor';
|
|
2
|
-
import { toolsMenu } from '@elementor/editor-app-bar';
|
|
3
2
|
import { registerElementPanelDefaults, STYLE_SECTION_NAMES } from '@elementor/editor-editing-panel';
|
|
4
|
-
import { __registerPanel as registerPanel } from '@elementor/editor-panels';
|
|
5
3
|
import { stylesRepository } from '@elementor/editor-styles-repository';
|
|
4
|
+
import { isExperimentActive } from '@elementor/editor-v1-adapters';
|
|
6
5
|
import { __registerSlice as registerSlice } from '@elementor/store';
|
|
7
6
|
|
|
8
7
|
import { PopulateStore } from './components/populate-store';
|
|
9
|
-
import { DefaultStylesOpenGate } from './default-styles-open-gate';
|
|
10
|
-
import { panel } from './default-styles-panel';
|
|
11
8
|
import { defaultStylesStylesProvider } from './default-styles-provider';
|
|
12
|
-
import { useDefaultStylesActionProps } from './hooks/use-default-styles-action-props';
|
|
13
9
|
import { slice } from './store';
|
|
14
10
|
|
|
11
|
+
const DEFAULT_STYLES_EXPERIMENT = 'e_default_styles';
|
|
12
|
+
|
|
15
13
|
export function init() {
|
|
14
|
+
if ( ! isExperimentActive( DEFAULT_STYLES_EXPERIMENT ) ) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
|
|
16
18
|
registerSlice( slice );
|
|
17
19
|
|
|
18
20
|
registerElementPanelDefaults( 'default-style', {
|
|
@@ -22,23 +24,10 @@ export function init() {
|
|
|
22
24
|
},
|
|
23
25
|
} );
|
|
24
26
|
|
|
25
|
-
registerPanel( panel );
|
|
26
|
-
|
|
27
27
|
stylesRepository.register( defaultStylesStylesProvider );
|
|
28
28
|
|
|
29
|
-
toolsMenu.registerAction( {
|
|
30
|
-
id: 'default-styles-button',
|
|
31
|
-
priority: 4,
|
|
32
|
-
useProps: useDefaultStylesActionProps,
|
|
33
|
-
} );
|
|
34
|
-
|
|
35
29
|
injectIntoLogic( {
|
|
36
30
|
id: 'default-styles-populate-store',
|
|
37
31
|
component: PopulateStore,
|
|
38
32
|
} );
|
|
39
|
-
|
|
40
|
-
injectIntoLogic( {
|
|
41
|
-
id: 'default-styles-open-gate',
|
|
42
|
-
component: DefaultStylesOpenGate,
|
|
43
|
-
} );
|
|
44
33
|
}
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { useCallback, useEffect, useRef } from 'react';
|
|
3
|
-
import {
|
|
4
|
-
__useActiveDocument as useActiveDocument,
|
|
5
|
-
__useActiveDocumentActions as useActiveDocumentActions,
|
|
6
|
-
} from '@elementor/editor-documents';
|
|
7
|
-
import { SaveChangesDialog, ThemeProvider, useDialog } from '@elementor/editor-ui';
|
|
8
|
-
import { __ } from '@wordpress/i18n';
|
|
9
|
-
|
|
10
|
-
import { usePanelActions } from './default-styles-panel';
|
|
11
|
-
|
|
12
|
-
export const EVENT_REQUEST_OPEN_DEFAULT_STYLES = 'elementor/default-styles/request-open';
|
|
13
|
-
|
|
14
|
-
export function DefaultStylesOpenGate() {
|
|
15
|
-
const { open } = usePanelActions();
|
|
16
|
-
const document = useActiveDocument();
|
|
17
|
-
const { save: saveDocument } = useActiveDocumentActions();
|
|
18
|
-
const { open: openSaveDialog, close: closeSaveDialog, isOpen: isSaveDialogOpen } = useDialog();
|
|
19
|
-
|
|
20
|
-
const documentRef = useRef( document );
|
|
21
|
-
documentRef.current = document;
|
|
22
|
-
|
|
23
|
-
const pendingOpenRef = useRef< ( () => void ) | null >( null );
|
|
24
|
-
|
|
25
|
-
const gatedOpen = useCallback(
|
|
26
|
-
( onClean: () => void ) => {
|
|
27
|
-
if ( documentRef.current?.isDirty ) {
|
|
28
|
-
pendingOpenRef.current = onClean;
|
|
29
|
-
openSaveDialog();
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
onClean();
|
|
34
|
-
},
|
|
35
|
-
[ openSaveDialog ]
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
const handleSaveAndContinue = useCallback( async () => {
|
|
39
|
-
try {
|
|
40
|
-
await saveDocument();
|
|
41
|
-
closeSaveDialog();
|
|
42
|
-
pendingOpenRef.current?.();
|
|
43
|
-
pendingOpenRef.current = null;
|
|
44
|
-
} catch {
|
|
45
|
-
// Keep dialog open.
|
|
46
|
-
}
|
|
47
|
-
}, [ saveDocument, closeSaveDialog ] );
|
|
48
|
-
|
|
49
|
-
const handleStayHere = useCallback( () => {
|
|
50
|
-
closeSaveDialog();
|
|
51
|
-
pendingOpenRef.current = null;
|
|
52
|
-
}, [ closeSaveDialog ] );
|
|
53
|
-
|
|
54
|
-
useEffect( () => {
|
|
55
|
-
const handler = () => {
|
|
56
|
-
gatedOpen( () => {
|
|
57
|
-
void open();
|
|
58
|
-
} );
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
window.addEventListener( EVENT_REQUEST_OPEN_DEFAULT_STYLES, handler );
|
|
62
|
-
|
|
63
|
-
return () => {
|
|
64
|
-
window.removeEventListener( EVENT_REQUEST_OPEN_DEFAULT_STYLES, handler );
|
|
65
|
-
};
|
|
66
|
-
}, [ gatedOpen, open ] );
|
|
67
|
-
|
|
68
|
-
if ( ! isSaveDialogOpen ) {
|
|
69
|
-
return null;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return (
|
|
73
|
-
<ThemeProvider>
|
|
74
|
-
<SaveChangesDialog>
|
|
75
|
-
<SaveChangesDialog.Title>{ __( 'You have unsaved changes', 'elementor' ) }</SaveChangesDialog.Title>
|
|
76
|
-
<SaveChangesDialog.Content>
|
|
77
|
-
<SaveChangesDialog.ContentText sx={ { mb: 2 } }>
|
|
78
|
-
{ __(
|
|
79
|
-
"To open Default Styles, save your page first. You can't continue without saving.",
|
|
80
|
-
'elementor'
|
|
81
|
-
) }
|
|
82
|
-
</SaveChangesDialog.ContentText>
|
|
83
|
-
</SaveChangesDialog.Content>
|
|
84
|
-
<SaveChangesDialog.Actions
|
|
85
|
-
actions={ {
|
|
86
|
-
cancel: {
|
|
87
|
-
label: __( 'Stay here', 'elementor' ),
|
|
88
|
-
action: handleStayHere,
|
|
89
|
-
},
|
|
90
|
-
confirm: {
|
|
91
|
-
label: __( 'Save & Continue', 'elementor' ),
|
|
92
|
-
action: handleSaveAndContinue,
|
|
93
|
-
},
|
|
94
|
-
} }
|
|
95
|
-
/>
|
|
96
|
-
</SaveChangesDialog>
|
|
97
|
-
</ThemeProvider>
|
|
98
|
-
);
|
|
99
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { __createPanel as createPanel } from '@elementor/editor-panels';
|
|
3
|
-
import { changeEditMode } from '@elementor/editor-v1-adapters';
|
|
4
|
-
|
|
5
|
-
import { DefaultStylesPanelContent } from './components/default-styles-panel-content';
|
|
6
|
-
|
|
7
|
-
export const DEFAULT_STYLES_PANEL_ID = 'default-styles';
|
|
8
|
-
|
|
9
|
-
export const { panel, usePanelStatus, usePanelActions } = createPanel( {
|
|
10
|
-
id: DEFAULT_STYLES_PANEL_ID,
|
|
11
|
-
component: DefaultStylesPanelRoot,
|
|
12
|
-
allowedEditModes: [ 'edit', DEFAULT_STYLES_PANEL_ID ],
|
|
13
|
-
onOpen: () => {
|
|
14
|
-
changeEditMode( DEFAULT_STYLES_PANEL_ID );
|
|
15
|
-
},
|
|
16
|
-
onClose: async () => {
|
|
17
|
-
changeEditMode( 'edit' );
|
|
18
|
-
},
|
|
19
|
-
isOpenPreviousElement: true,
|
|
20
|
-
} );
|
|
21
|
-
|
|
22
|
-
function DefaultStylesPanelRoot() {
|
|
23
|
-
const { close } = usePanelActions();
|
|
24
|
-
|
|
25
|
-
return (
|
|
26
|
-
<DefaultStylesPanelContent
|
|
27
|
-
onRequestClose={ () => {
|
|
28
|
-
void close();
|
|
29
|
-
} }
|
|
30
|
-
/>
|
|
31
|
-
);
|
|
32
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { type ActionProps } from '@elementor/editor-app-bar';
|
|
2
|
-
import { TextIcon } from '@elementor/icons';
|
|
3
|
-
import { __ } from '@wordpress/i18n';
|
|
4
|
-
|
|
5
|
-
import { EVENT_REQUEST_OPEN_DEFAULT_STYLES } from '../default-styles-open-gate';
|
|
6
|
-
|
|
7
|
-
export function useDefaultStylesActionProps(): ActionProps {
|
|
8
|
-
return {
|
|
9
|
-
title: __( 'Default Styles', 'elementor' ),
|
|
10
|
-
icon: TextIcon,
|
|
11
|
-
onClick: () => {
|
|
12
|
-
window.dispatchEvent( new CustomEvent( EVENT_REQUEST_OPEN_DEFAULT_STYLES ) );
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
}
|