/*! elementor - v3.16.0 - 17-10-2023 */ "use strict";(self.webpackChunkelementor=self.webpackChunkelementor||[]).push([[745],{9269:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;class Alert extends elementorModules.frontend.handlers.Base{getDefaultSettings(){return{selectors:{dismissButton:".elementor-alert-dismiss"}}}getDefaultElements(){const e=this.getSettings("selectors");return{$dismissButton:this.$element.find(e.dismissButton)}}bindEvents(){this.elements.$dismissButton.on("click",this.onDismissButtonClick.bind(this))}onDismissButtonClick(){this.$element.fadeOut()}}t.default=Alert}}]);/******/ (function() { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./packages/packages/pro/editor-components-extended/src/components/angie-install-dialog/angie-install-dialog.tsx": /*!***********************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/angie-install-dialog/angie-install-dialog.tsx ***! \***********************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AngieInstallDialog: function() { return /* binding */ AngieInstallDialog; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/events */ "@elementor/events"); /* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_events__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__); const PROMOTION_IMAGE_URL = 'https://assets.elementor.com/packages/v1/images/angie-components-promotion.svg'; const ANGIE_COMPONENTS_TAB_ENTRY = 'components_tab'; const ANGIE_INSTALL_STARTED_EVENT = 'angie_install_started'; function AngieInstallDialog({ open, onClose, prompt }) { const [installState, setInstallState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('idle'); const handleClose = () => { if (installState === 'installing') { return; } setInstallState('idle'); onClose(); }; const handleInstall = async () => { setInstallState('installing'); (0,_elementor_events__WEBPACK_IMPORTED_MODULE_2__.trackEvent)({ eventName: ANGIE_INSTALL_STARTED_EVENT, trigger_source: ANGIE_COMPONENTS_TAB_ENTRY }); const result = await (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__.installAngiePlugin)(); if (!result.success) { setInstallState('error'); return; } (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__.redirectToAppAdmin)(prompt); }; const handleFallbackInstall = () => { (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_1__.redirectToInstallation)(prompt); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Dialog, { fullWidth: true, maxWidth: "md", open: open, onClose: handleClose }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.IconButton, { "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Close', 'elementor-pro'), onClick: handleClose, sx: { position: 'absolute', right: 8, top: 8, zIndex: 1 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_3__.XIcon, null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.DialogContent, { sx: { p: 0, overflow: 'hidden' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, { direction: "row", sx: { height: 400 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Image, { sx: { height: '100%', aspectRatio: '1 / 1', objectFit: 'cover', objectPosition: 'right center' }, src: PROMOTION_IMAGE_URL }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, { gap: 2, justifyContent: "center", p: 4 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography, { variant: "h6", fontWeight: 600, whiteSpace: "nowrap" }, installState === 'error' ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Installation failed', 'elementor-pro') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Install Angie to build components', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography, { variant: "body2", color: "text.secondary" }, installState === 'error' ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)("We couldn't install Angie automatically. Click below to install it manually.", 'elementor-pro') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Angie lets you create components, widgets, sections, and code using simple instructions.', 'elementor-pro')), installState !== 'error' && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Typography, { variant: "body2", color: "text.secondary" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Install once to start building directly inside the editor.', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, { direction: "row", justifyContent: "flex-end", sx: { mt: 2 } }, installState === 'error' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Button, { variant: "contained", color: "accent", onClick: handleFallbackInstall }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Install Manually', 'elementor-pro')) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Button, { variant: "contained", color: "accent", onClick: handleInstall, disabled: installState === 'installing', startIcon: installState === 'installing' ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.CircularProgress, { size: 18, color: "inherit" }) : undefined }, installState === 'installing' ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Installing…', 'elementor-pro') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Install Angie', 'elementor-pro'))))))); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/angie-install-dialog/index.ts": /*!*******************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/angie-install-dialog/index.ts ***! \*******************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ AngieInstallDialog: function() { return /* reexport safe */ _angie_install_dialog__WEBPACK_IMPORTED_MODULE_0__.AngieInstallDialog; } /* harmony export */ }); /* harmony import */ var _angie_install_dialog__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./angie-install-dialog */ "./packages/packages/pro/editor-components-extended/src/components/angie-install-dialog/angie-install-dialog.tsx"); /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/angie-intro/angie-intro-popover.tsx": /*!*************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/angie-intro/angie-intro-popover.tsx ***! \*************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ANGIE_INTRO_MESSAGE_KEY: function() { return /* binding */ ANGIE_INTRO_MESSAGE_KEY; }, /* harmony export */ AngieIntroPopover: function() { return /* binding */ AngieIntroPopover; }, /* harmony export */ useAngieIntro: function() { return /* binding */ useAngieIntro; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-current-user */ "@elementor/editor-current-user"); /* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); const ANGIE_INTRO_MESSAGE_KEY = 'angie-components-intro'; const INTRO_IMAGE_URL = 'https://assets.elementor.com/packages/v1/images/angie-components-promotion.svg'; const IMAGE_OVERLAY_COLOR = 'rgba(255, 0, 191, 0.6)'; const BUTTON_COLOR = '#f0abfc'; const BUTTON_HOVER_COLOR = '#e879f9'; const BUTTON_TEXT_COLOR = '#0c0d0e'; const AngieIntroPopover = ({ open, onClose, onConfirm, anchorRef }) => { const anchorEl = anchorRef?.current; const slotProps = anchorEl ? { popper: { anchorEl, modifiers: [{ name: 'offset', options: { offset: [-40, 8] } }] } } : undefined; const handleClose = e => { e.stopPropagation(); onClose(); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Infotip, { placement: "right-start", content: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(AngieIntroCard, { onClose: handleClose, onConfirm: onConfirm }), open: open, slotProps: slotProps }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null)); }; function AngieIntroCard({ onClose, onConfirm }) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.ClickAwayListener, { disableReactTree: true, mouseEvent: "onMouseDown", touchEvent: "onTouchStart", onClickAway: onClose }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Card, { elevation: 0, sx: { width: 296, borderRadius: '4px' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.CardHeader, { title: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, { sx: { display: 'flex', alignItems: 'center', gap: 1 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { variant: "subtitle2" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Meet Angie', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Chip, { label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('New', 'elementor-pro'), size: "small", sx: { height: 24, fontSize: '13px', backgroundColor: '#ebf2fe', color: '#1945a4', borderRadius: '1000px' } })), action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.CloseButton, { slotProps: { icon: { fontSize: 'tiny' } }, onClick: onClose }), sx: { py: 1, px: 2 } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, { sx: { position: 'relative', width: '100%', height: 148 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.CardMedia, { component: "img", image: INTRO_IMAGE_URL, alt: "", sx: { width: '100%', height: '100%', objectFit: 'cover' } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, { sx: { position: 'absolute', inset: 0, backgroundColor: IMAGE_OVERLAY_COLOR, pointerEvents: 'none' } })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.CardContent, { sx: { px: 2, py: 1 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { variant: "body2", color: "text.secondary" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Build components using simple instructions.', 'elementor-pro'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.CardActions, { sx: { justifyContent: 'flex-end', px: 2, pb: 1.5, pt: 1 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Button, { variant: "contained", size: "small", onClick: onConfirm, sx: { backgroundColor: BUTTON_COLOR, color: BUTTON_TEXT_COLOR, '&:hover': { backgroundColor: BUTTON_HOVER_COLOR } } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Start building', 'elementor-pro'))))); } const useAngieIntro = () => { const [isMessageSuppressed, suppressMessage] = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_1__.useSuppressedMessage)(ANGIE_INTRO_MESSAGE_KEY); return { shouldShowIntro: !isMessageSuppressed, suppressIntro: suppressMessage }; }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/angie-intro/index.ts": /*!**********************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/angie-intro/index.ts ***! \**********************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ANGIE_INTRO_MESSAGE_KEY: function() { return /* reexport safe */ _angie_intro_popover__WEBPACK_IMPORTED_MODULE_0__.ANGIE_INTRO_MESSAGE_KEY; }, /* harmony export */ AngieIntroPopover: function() { return /* reexport safe */ _angie_intro_popover__WEBPACK_IMPORTED_MODULE_0__.AngieIntroPopover; }, /* harmony export */ useAngieIntro: function() { return /* reexport safe */ _angie_intro_popover__WEBPACK_IMPORTED_MODULE_0__.useAngieIntro; } /* harmony export */ }); /* harmony import */ var _angie_intro_popover__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./angie-intro-popover */ "./packages/packages/pro/editor-components-extended/src/components/angie-intro/angie-intro-popover.tsx"); /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-introduction.tsx": /*!****************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-introduction.tsx ***! \****************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ComponentIntroduction: function() { return /* binding */ ComponentIntroduction; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_controls__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-controls */ "@elementor/editor-controls"); /* harmony import */ var _elementor_editor_controls__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); const ComponentIntroduction = ({ anchorRef, shouldShowIntroduction, onClose }) => { if (!anchorRef.current || !shouldShowIntroduction) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Popover, { anchorEl: anchorRef.current, open: shouldShowIntroduction, anchorOrigin: { vertical: 'top', horizontal: 'right' }, transformOrigin: { vertical: 'top', horizontal: -30 }, onClose: onClose }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { sx: { width: '296px' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.PopoverHeader, { title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Add your first property', 'elementor-pro'), onClose: onClose }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Image, { sx: { width: '296px', height: '160px' }, src: 'https://assets.elementor.com/packages/v1/images/components-properties-intro.png', alt: '' }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_1__.PopoverContent, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { sx: { p: 2 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: 'body2' }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Properties make instances flexible.', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: 'body2' }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Select any Element, then in the General tab, click next to any setting you want users to customize - like text, images, or links.', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: 'body2', sx: { mt: 2 } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Your properties will appear in the Properties panel, where you can organize and manage them anytime.', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Link, { href: "http://go.elementor.com/components-guide", target: "_blank", sx: { mt: 2 }, color: "info.main", variant: "body2" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Learn more', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { direction: "row", alignItems: "center", justifyContent: "flex-end", sx: { pt: 1 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Button, { size: "medium", variant: "contained", onClick: onClose }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Got it', 'elementor-pro'))))))); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-panel-header/component-badge.tsx": /*!********************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-panel-header/component-badge.tsx ***! \********************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ComponentsBadge: function() { return /* binding */ ComponentsBadge; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); const ComponentsBadge = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(({ overridablePropsCount, onClick }, ref) => { const prevCount = usePrevious(overridablePropsCount); const isFirstExposedProperty = prevCount === 0 && overridablePropsCount === 1; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StyledBadge, { ref: ref, color: "primary", key: overridablePropsCount, invisible: overridablePropsCount === 0, animate: isFirstExposedProperty, anchorOrigin: { vertical: 'top', horizontal: 'right' }, badgeContent: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, { sx: { animation: !isFirstExposedProperty ? `${slideUp} 300ms ease-out` : 'none' } }, overridablePropsCount), "data-testid": "component-panel-header-properties-badge" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Tooltip, { title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Component properties', 'elementor-pro') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.ToggleButton, { value: "exposed properties", size: "tiny", onClick: onClick, "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Component properties', 'elementor-pro') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.ComponentPropListIcon, { fontSize: "tiny" })))); }); const StyledBadge = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Badge, { shouldForwardProp: prop => prop !== 'animate' })(({ theme, animate }) => ({ '& .MuiBadge-badge': { minWidth: theme.spacing(2), height: theme.spacing(2), minHeight: theme.spacing(2), maxWidth: theme.spacing(2), fontSize: theme.typography.caption.fontSize, animation: animate ? `${bounceIn} 300ms ease-out` : 'none' } })); function usePrevious(value) { const ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(value); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { ref.current = value; }, [value]); return ref.current; } const bounceIn = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.keyframes)` 0% { transform: scale(0) translate(50%, 50%); opacity: 0; } 70% { transform: scale(1.1) translate(50%, -50%); opacity: 1; } 100% { transform: scale(1) translate(50%, -50%); opacity: 1; } `; const slideUp = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.keyframes)` from { transform: translateY(100%); opacity: 0; } to { transform: translateY(0); opacity: 1; } `; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-panel-header/component-panel-header.tsx": /*!***************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-panel-header/component-panel-header.tsx ***! \***************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ComponentPanelHeader: function() { return /* binding */ ComponentPanelHeader; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-current-user */ "@elementor/editor-current-user"); /* harmony import */ var _elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-panels */ "@elementor/editor-panels"); /* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _hooks_use_navigate_back__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../hooks/use-navigate-back */ "./packages/packages/pro/editor-components-extended/src/hooks/use-navigate-back.ts"); /* harmony import */ var _component_introduction__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../component-introduction */ "./packages/packages/pro/editor-components-extended/src/components/component-introduction.tsx"); /* harmony import */ var _component_properties_panel_component_properties_panel__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../component-properties-panel/component-properties-panel */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-panel.tsx"); /* harmony import */ var _component_badge__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./component-badge */ "./packages/packages/pro/editor-components-extended/src/components/component-panel-header/component-badge.tsx"); const MESSAGE_KEY = 'components-properties-introduction'; const ComponentPanelHeader = () => { const { id: currentComponentId, uid: componentUid } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useCurrentComponent)() ?? { id: null, uid: null }; const overridableProps = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useSanitizeOverridableProps)(currentComponentId); const onBack = (0,_hooks_use_navigate_back__WEBPACK_IMPORTED_MODULE_10__.useNavigateBack)(); const componentName = getComponentName(); const [isMessageSuppressed, suppressMessage] = (0,_elementor_editor_current_user__WEBPACK_IMPORTED_MODULE_2__.useSuppressedMessage)(MESSAGE_KEY); const [shouldShowIntroduction, setShouldShowIntroduction] = react__WEBPACK_IMPORTED_MODULE_0__.useState(!isMessageSuppressed); const { open: openPropertiesPanel } = (0,_component_properties_panel_component_properties_panel__WEBPACK_IMPORTED_MODULE_12__.usePanelActions)(); const overridablePropsCount = overridableProps ? Object.keys(overridableProps.props).length : 0; const anchorRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null); if (!currentComponentId) { return null; } const handleCloseIntroduction = () => { suppressMessage(); setShouldShowIntroduction(false); }; const handleOpenPropertiesPanel = () => { openPropertiesPanel(); (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.trackComponentEvent)({ action: 'propertiesPanelOpened', source: 'user', component_uid: componentUid, properties_count: overridablePropsCount }); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_8__.Box, { "data-testid": "component-panel-header" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_4__.PanelHeader, { sx: { justifyContent: 'start', px: 2 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_8__.Tooltip, { title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('Back', 'elementor-pro') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_8__.IconButton, { size: "tiny", onClick: onBack, "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('Back', 'elementor-pro') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_6__.ArrowLeftIcon, { fontSize: "tiny" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_6__.ComponentsFilledIcon, { fontSize: "tiny", stroke: "currentColor" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_5__.EllipsisWithTooltip, { title: componentName, as: _elementor_ui__WEBPACK_IMPORTED_MODULE_8__.Typography, variant: "caption", sx: { fontWeight: 500, flexGrow: 1 } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_component_badge__WEBPACK_IMPORTED_MODULE_13__.ComponentsBadge, { overridablePropsCount: overridablePropsCount, ref: anchorRef, onClick: handleOpenPropertiesPanel })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_8__.Divider, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_component_introduction__WEBPACK_IMPORTED_MODULE_11__.ComponentIntroduction, { anchorRef: anchorRef, shouldShowIntroduction: shouldShowIntroduction, onClose: handleCloseIntroduction })); }; function getComponentName() { const state = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_7__.__getState)(); const path = state[_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.SLICE_NAME].path; const { instanceTitle } = path.at(-1) ?? {}; if (instanceTitle) { return instanceTitle; } const documentsManager = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__.getV1DocumentsManager)(); const currentDocument = documentsManager.getCurrent(); return currentDocument?.container?.settings?.get('post_title') ?? ''; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/apply-multi-sortable-update.ts": /*!***********************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/apply-multi-sortable-update.ts ***! \***********************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ applyMultiSortableUpdate: function() { return /* binding */ applyMultiSortableUpdate; }, /* harmony export */ hasDuplicateIds: function() { return /* binding */ hasDuplicateIds; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _component_properties_sortable_ids__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./component-properties-sortable-ids */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-sortable-ids.ts"); function hasDuplicateIds(updated) { return Object.entries(updated).some(([key, ids]) => key !== _component_properties_sortable_ids__WEBPACK_IMPORTED_MODULE_2__.COMPONENT_PROP_GROUP_HEADERS_KEY && Array.isArray(ids) && ids.length !== new Set(ids).size); } function applyMultiSortableUpdate(updated, currentComponentId) { const latest = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(currentComponentId); if (!latest) { return; } const newOrder = updated[_component_properties_sortable_ids__WEBPACK_IMPORTED_MODULE_2__.COMPONENT_PROP_GROUP_HEADERS_KEY] ?? []; const { items, props } = buildGroupsAndProps(updated, latest); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(currentComponentId, { ...latest, props, groups: { items, order: newOrder.filter(id => id in items) } }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.setDocumentModifiedStatus)(true); } function buildGroupsAndProps(updated, latest) { const items = { ...latest.groups.items }; const props = { ...latest.props }; for (const [groupId, propKeys] of Object.entries(updated)) { if (groupId === _component_properties_sortable_ids__WEBPACK_IMPORTED_MODULE_2__.COMPONENT_PROP_GROUP_HEADERS_KEY || !Array.isArray(propKeys)) { continue; } // Workaround: UnstableSortable (mode="multiple") reports duplicate IDs during same-group reorder. const uniquePropKeys = [...new Set(propKeys)]; const group = items[groupId]; if (group) { items[groupId] = { ...group, props: uniquePropKeys }; } for (const propKey of uniquePropKeys) { const prop = props[propKey]; if (prop && prop.groupId !== groupId) { props[propKey] = { ...prop, groupId }; } } } return { items, props }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-panel-content.tsx": /*!*******************************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-panel-content.tsx ***! \*******************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ComponentPropertiesPanelContent: function() { return /* binding */ ComponentPropertiesPanelContent; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-panels */ "@elementor/editor-panels"); /* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _store_actions_add_overridable_group__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../store/actions/add-overridable-group */ "./packages/packages/pro/editor-components-extended/src/store/actions/add-overridable-group.ts"); /* harmony import */ var _store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/actions/delete-component-overridable-prop */ "./packages/packages/pro/editor-components-extended/src/store/actions/delete-component-overridable-prop.ts"); /* harmony import */ var _store_actions_delete_overridable_group__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/actions/delete-overridable-group */ "./packages/packages/pro/editor-components-extended/src/store/actions/delete-overridable-group.ts"); /* harmony import */ var _store_actions_reorder_group_props__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../store/actions/reorder-group-props */ "./packages/packages/pro/editor-components-extended/src/store/actions/reorder-group-props.ts"); /* harmony import */ var _store_actions_reorder_overridable_groups__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../store/actions/reorder-overridable-groups */ "./packages/packages/pro/editor-components-extended/src/store/actions/reorder-overridable-groups.ts"); /* harmony import */ var _store_actions_update_overridable_prop_params__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../store/actions/update-overridable-prop-params */ "./packages/packages/pro/editor-components-extended/src/store/actions/update-overridable-prop-params.ts"); /* harmony import */ var _component_properties_sortable_ids__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./component-properties-sortable-ids */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-sortable-ids.ts"); /* harmony import */ var _multi_group_properties_group__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./multi-group-properties-group */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/multi-group-properties-group.tsx"); /* harmony import */ var _properties_empty_state__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./properties-empty-state */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/properties-empty-state.tsx"); /* harmony import */ var _properties_group__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./properties-group */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/properties-group.tsx"); /* harmony import */ var _sortable__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./sortable */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/sortable.tsx"); /* harmony import */ var _use_current_editable_item__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./use-current-editable-item */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/use-current-editable-item.ts"); /* harmony import */ var _use_multi_sortable_sync__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./use-multi-sortable-sync */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/use-multi-sortable-sync.ts"); /* harmony import */ var _utils_generate_unique_label__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./utils/generate-unique-label */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/utils/generate-unique-label.ts"); function ComponentPropertiesPanelContent({ onClose }) { const currentComponentId = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useCurrentComponentId)(); const overridableProps = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useSanitizeOverridableProps)(currentComponentId); const [isAddingGroup, setIsAddingGroup] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); const introductionRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null); const groupLabelEditable = (0,_use_current_editable_item__WEBPACK_IMPORTED_MODULE_19__.useCurrentEditableItem)(); const groups = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { if (!overridableProps) { return []; } return overridableProps.groups.order.map(groupId => overridableProps.groups.items[groupId] ?? null).filter(Boolean); }, [overridableProps]); const allGroupsForSelect = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => groups.map(group => ({ value: group.id, label: group.label })), [groups]); if (!currentComponentId || !overridableProps) { return null; } const hasGroups = groups.length > 0; const showEmptyState = !hasGroups && !isAddingGroup; const handleAddGroupClick = () => { if (isAddingGroup) { return; } const newGroupId = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_6__.generateUniqueId)('group'); const newLabel = (0,_utils_generate_unique_label__WEBPACK_IMPORTED_MODULE_21__.generateUniqueLabel)(groups); (0,_store_actions_add_overridable_group__WEBPACK_IMPORTED_MODULE_8__.addOverridableGroup)({ componentId: currentComponentId, groupId: newGroupId, label: newLabel, source: 'user' }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(true); setIsAddingGroup(false); groupLabelEditable.setEditingGroupId(newGroupId); }; const handlePropertyDelete = propKey => { (0,_store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_9__.deleteComponentOverridableProp)({ componentId: currentComponentId, propKey, source: 'user' }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(true); }; const handlePropertyUpdate = (overrideKey, data) => { (0,_store_actions_update_overridable_prop_params__WEBPACK_IMPORTED_MODULE_13__.updateOverridablePropParams)({ componentId: currentComponentId, overrideKey, label: data.label, groupId: data.group }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(true); }; const handleGroupDelete = groupId => { (0,_store_actions_delete_overridable_group__WEBPACK_IMPORTED_MODULE_10__.deleteOverridableGroup)({ componentId: currentComponentId, groupId }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(true); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3__.PanelHeader, { sx: { justifyContent: 'start', pl: 1.5, pr: 1, py: 1 }, "data-testid": "component-property-panel-header" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { direction: "row", alignItems: "center", gap: 0.5, flexGrow: 1 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__.ComponentPropListIcon, { fontSize: "tiny" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3__.PanelHeaderTitle, { variant: "subtitle2" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Component properties', 'elementor-pro'))), !showEmptyState && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Tooltip, { title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Add new group', 'elementor-pro') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.IconButton, { size: "tiny", "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Add new group', 'elementor-pro'), onClick: handleAddGroupClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__.FolderPlusIcon, { fontSize: "tiny" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Tooltip, { title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Close panel', 'elementor-pro') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.IconButton, { ref: introductionRef, size: "tiny", "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Close panel', 'elementor-pro'), onClick: onClose }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__.XIcon, { fontSize: "tiny" })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Divider, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_3__.PanelBody, null, showEmptyState ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_properties_empty_state__WEBPACK_IMPORTED_MODULE_16__.PropertiesEmptyState, { introductionRef: introductionRef }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.List, { sx: { p: 2, display: 'flex', flexDirection: 'column', gap: 2 } }, _sortable__WEBPACK_IMPORTED_MODULE_18__.isMultiGroupSortingEnabled ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MultiGroupSortableContent, { currentComponentId: currentComponentId, overridableProps: overridableProps, groups: groups, allGroupsForSelect: allGroupsForSelect, groupLabelEditable: groupLabelEditable, setIsAddingGroup: setIsAddingGroup, onPropertyDelete: handlePropertyDelete, onPropertyUpdate: handlePropertyUpdate, onGroupDelete: handleGroupDelete }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LegacySortableContent, { currentComponentId: currentComponentId, overridableProps: overridableProps, groups: groups, allGroupsForSelect: allGroupsForSelect, groupLabelEditable: groupLabelEditable, setIsAddingGroup: setIsAddingGroup, onPropertyDelete: handlePropertyDelete, onPropertyUpdate: handlePropertyUpdate, onGroupDelete: handleGroupDelete })))); } function LegacySortableContent({ currentComponentId, overridableProps, groups, allGroupsForSelect, groupLabelEditable, setIsAddingGroup, onPropertyDelete, onPropertyUpdate, onGroupDelete }) { const groupIds = overridableProps.groups.order; const handleGroupsReorder = newOrder => { (0,_store_actions_reorder_overridable_groups__WEBPACK_IMPORTED_MODULE_12__.reorderOverridableGroups)({ componentId: currentComponentId, newOrder }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(true); }; const handlePropsReorder = (groupId, newPropsOrder) => { (0,_store_actions_reorder_group_props__WEBPACK_IMPORTED_MODULE_11__.reorderGroupProps)({ componentId: currentComponentId, groupId, newPropsOrder }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(true); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_18__.SortableProvider, { value: groupIds, onChange: handleGroupsReorder }, groups.map(group => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_18__.SortableItem, { key: group.id, id: group.id }, ({ triggerProps, triggerStyle, isDragPlaceholder }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_properties_group__WEBPACK_IMPORTED_MODULE_17__.PropertiesGroup, { group: group, props: overridableProps.props, allGroups: allGroupsForSelect, allGroupsRecord: overridableProps.groups.items, sortableTriggerProps: { ...triggerProps, style: triggerStyle }, isDragPlaceholder: isDragPlaceholder, setIsAddingGroup: setIsAddingGroup, onPropsReorder: newOrder => handlePropsReorder(group.id, newOrder), onPropertyDelete: onPropertyDelete, onPropertyUpdate: onPropertyUpdate, editableLabelProps: groupLabelEditable, onGroupDelete: onGroupDelete })))); } function MultiGroupSortableContent({ currentComponentId, overridableProps, groups, allGroupsForSelect, groupLabelEditable, onPropertyDelete, onPropertyUpdate, onGroupDelete }) { const { sortableKey, sortableValue, handlePropertyDelete: handlePropertyDeleteWithSortableResync, handlePropertyUpdate: handlePropertyUpdateWithSortableResync, handleSortableChange } = (0,_use_multi_sortable_sync__WEBPACK_IMPORTED_MODULE_20__.useMultiSortableSync)({ currentComponentId, overridableProps, groups, onPropertyDelete, onPropertyUpdate }); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_18__.MultiSortableRoot, { key: sortableKey, value: sortableValue, onChange: handleSortableChange }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_18__.MultiSortableGroup, { groupId: _component_properties_sortable_ids__WEBPACK_IMPORTED_MODULE_14__.COMPONENT_PROP_GROUP_HEADERS_KEY }, ({ setDroppableRef, items }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { ref: setDroppableRef, direction: "column", sx: { width: '100%', gap: 2 } }, items.map(headerItemId => { const groupId = String(headerItemId); const group = overridableProps.groups.items[groupId]; if (!group) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_18__.MultiSortableItem, { key: groupId, id: headerItemId }, ({ itemProps, itemStyle, triggerProps, triggerStyle, isDragPlaceholder }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_multi_group_properties_group__WEBPACK_IMPORTED_MODULE_15__.MultiGroupPropertiesGroup, { sortableItemProps: itemProps, sortableItemStyle: itemStyle, group: group, props: overridableProps.props, allGroups: allGroupsForSelect, sortableTriggerProps: { ...triggerProps, style: triggerStyle }, isDragPlaceholder: isDragPlaceholder, onPropertyDelete: handlePropertyDeleteWithSortableResync, onPropertyUpdate: handlePropertyUpdateWithSortableResync, editableLabelProps: groupLabelEditable, onGroupDelete: onGroupDelete })); })))); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-panel.tsx": /*!***********************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-panel.tsx ***! \***********************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ panel: function() { return /* binding */ panel; }, /* harmony export */ usePanelActions: function() { return /* binding */ usePanelActions; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-editing-panel */ "@elementor/editor-editing-panel"); /* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-panels */ "@elementor/editor-panels"); /* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _component_properties_panel_content__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./component-properties-panel-content */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-panel-content.tsx"); const id = 'component-properties-panel'; const { panel, usePanelActions } = (0,_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_2__.__createPanel)({ id, component: ComponentPropertiesPanel }); function ComponentPropertiesPanel() { const { close: closePanel } = usePanelActions(); const { open: openEditingPanel } = (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_1__.usePanelActions)(); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_3__.ThemeProvider, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.ErrorBoundary, { fallback: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ErrorBoundaryFallback, null) }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_2__.Panel, { "data-testid": "component-properties-panel" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_component_properties_panel_content__WEBPACK_IMPORTED_MODULE_6__.ComponentPropertiesPanelContent, { onClose: () => { closePanel(); openEditingPanel(); } })))); } const ErrorBoundaryFallback = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Box, { role: "alert", sx: { minHeight: '100%', p: 2 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Alert, { severity: "error", sx: { mb: 2, maxWidth: 400, textAlign: 'center' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("strong", null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_5__.__)('Something went wrong', 'elementor-pro')))); /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-sortable-ids.ts": /*!*****************************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-sortable-ids.ts ***! \*****************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ COMPONENT_PROP_GROUP_HEADERS_KEY: function() { return /* binding */ COMPONENT_PROP_GROUP_HEADERS_KEY; } /* harmony export */ }); const COMPONENT_PROP_GROUP_HEADERS_KEY = '__cpPropGroupHeaders__'; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/multi-group-properties-group.tsx": /*!*************************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/multi-group-properties-group.tsx ***! \*************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ MultiGroupPropertiesGroup: function() { return /* binding */ MultiGroupPropertiesGroup; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _multi_group_property_item__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./multi-group-property-item */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/multi-group-property-item.tsx"); /* harmony import */ var _sortable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sortable */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/sortable.tsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function MultiGroupPropertiesGroup({ group, props, allGroups, sortableItemProps, sortableItemStyle, sortableTriggerProps, isDragPlaceholder, onPropertyDelete, onPropertyUpdate, onGroupDelete, editableLabelProps }) { const popupState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.usePopupState)({ variant: 'popover', disableAutoFocus: true }); const { editableRef, isEditing, error, getEditableProps, setEditingGroupId, editingGroupId } = editableLabelProps; const hasProperties = group.props.length > 0; const isThisGroupEditing = isEditing && editingGroupId === group.id; const handleRenameClick = () => { popupState.close(); setEditingGroupId(group.id); }; const handleDeleteClick = () => { popupState.close(); onGroupDelete(group.id); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, _extends({}, sortableItemProps, { style: sortableItemStyle, sx: { opacity: isDragPlaceholder ? 0.5 : 1 } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { gap: 1 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { className: "group-header", sx: { position: 'relative', '&:hover .group-sortable-trigger': { visibility: 'visible' }, '& .group-sortable-trigger': { visibility: 'hidden' }, '&:hover .group-menu': { visibility: 'visible' }, '& .group-menu': { visibility: 'hidden' } } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_6__.SortableTrigger, _extends({ triggerClassName: "group-sortable-trigger" }, sortableTriggerProps)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", gap: 2 }, isThisGroupEditing ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { sx: { height: 28, display: 'flex', alignItems: 'center', border: 2, borderColor: 'text.secondary', borderRadius: 1, pl: 0.5, flexGrow: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width: '100%' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.EditableField, _extends({ ref: editableRef, as: _elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, variant: "caption", error: error ?? undefined, sx: { color: 'text.primary', fontWeight: 400, lineHeight: 1.66 } }, getEditableProps()))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.EllipsisWithTooltip, { title: group.label, as: _elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, variant: "caption", sx: { color: 'text.primary', fontWeight: 400, lineHeight: 1.66 } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.IconButton, _extends({ className: "group-menu", size: "tiny", sx: { p: 0.25, visibility: isThisGroupEditing ? 'visible' : undefined }, "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Group actions', 'elementor-pro') }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindTrigger)(popupState)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.DotsVerticalIcon, { fontSize: "tiny" })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_6__.MultiSortableGroup, { groupId: group.id }, ({ setDroppableRef, isEmpty, items }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.List, { ref: setDroppableRef, sx: { p: 0, display: 'flex', flexDirection: 'column', gap: 1, ...(isEmpty && { minHeight: 40, backgroundColor: 'action.hover', borderRadius: 1 }) } }, items.map(propId => { const property = props[String(propId)]; if (!property) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_6__.MultiSortableItem, { key: String(propId), id: propId }, ({ itemProps, itemStyle, triggerProps, triggerStyle, isDragPlaceholder: isItemDragPlaceholder }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_multi_group_property_item__WEBPACK_IMPORTED_MODULE_5__.MultiGroupPropertyItem, { sortableItemProps: itemProps, sortableItemStyle: itemStyle, prop: property, sortableTriggerProps: { ...triggerProps, style: triggerStyle }, isDragPlaceholder: isItemDragPlaceholder, groups: allGroups, existingLabels: Object.values(props).map(p => p.label), onDelete: onPropertyDelete, onUpdate: data => onPropertyUpdate(property.overrideKey, data) })); })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Menu, _extends({}, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindMenu)(popupState), { anchorOrigin: { vertical: 'bottom', horizontal: 'right' }, transformOrigin: { vertical: 'top', horizontal: 'right' } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuListItem, { sx: { minWidth: '160px' }, onClick: handleRenameClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: "caption", sx: { color: 'text.primary' } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Rename', 'elementor-pro'))), hasProperties ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Tooltip, { title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('To delete the group, first remove all the properties', 'elementor-pro'), placement: "right" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuListItem, { disabled: true }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: "caption", sx: { color: 'text.disabled' } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Delete', 'elementor-pro'))))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuListItem, { onClick: handleDeleteClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: "caption", sx: { color: 'error.light' } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Delete', 'elementor-pro'))))); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/multi-group-property-item.tsx": /*!**********************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/multi-group-property-item.tsx ***! \**********************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ MultiGroupPropertyItem: function() { return /* binding */ MultiGroupPropertyItem; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _overridable_props_overridable_prop_form__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../overridable-props/overridable-prop-form */ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-form.tsx"); /* harmony import */ var _sortable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sortable */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/sortable.tsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function MultiGroupPropertyItem({ prop, sortableItemProps, sortableItemStyle, sortableTriggerProps, isDragPlaceholder, groups, existingLabels, onDelete, onUpdate }) { const popoverState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.usePopupState)({ variant: 'popover' }); const icon = getElementIcon(prop); const popoverProps = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindPopover)(popoverState); const handleSubmit = data => { onUpdate(data); popoverState.close(); }; const handleDelete = event => { event.stopPropagation(); onDelete(prop.overrideKey); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, _extends({}, sortableItemProps, { style: sortableItemStyle }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindTrigger)(popoverState), { "data-testid": "component-property-item", sx: { position: 'relative', pl: 0.5, pr: 1, py: 0.25, minHeight: 28, borderRadius: 1, border: '1px solid', borderColor: 'divider', display: 'flex', alignItems: 'center', gap: 0.5, opacity: isDragPlaceholder ? 0.5 : 1, cursor: 'pointer', '&:hover': { backgroundColor: 'action.hover' }, '&:hover .sortable-trigger': { visibility: 'visible' }, '& .sortable-trigger': { visibility: 'hidden' }, '&:hover .delete-button': { visibility: 'visible' }, '& .delete-button': { visibility: 'hidden' } } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_6__.SortableTrigger, sortableTriggerProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { sx: { display: 'flex', alignItems: 'center', color: 'text.primary', fontSize: 12, padding: 0.25 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("i", { className: icon })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: "caption", sx: { color: 'text.primary', flexGrow: 1, fontSize: 10 } }, prop.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.IconButton, { className: "delete-button", size: "tiny", onClick: handleDelete, "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Delete property', 'elementor-pro'), sx: { p: 0.25 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.XIcon, { fontSize: "tiny" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Popover, _extends({}, popoverProps, { anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, PaperProps: { sx: { width: popoverState.anchorEl?.getBoundingClientRect().width } } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_overridable_props_overridable_prop_form__WEBPACK_IMPORTED_MODULE_5__.OverridablePropForm, { onSubmit: handleSubmit, currentValue: prop, groups: groups, existingLabels: existingLabels, sx: { width: '100%' } }))); } function getElementIcon(prop) { const elType = prop.elType === 'widget' ? prop.widgetType : prop.elType; const widgetsCache = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getWidgetsCache)(); if (!widgetsCache) { return 'eicon-apps'; } const widgetConfig = widgetsCache[elType]; return widgetConfig?.icon || 'eicon-apps'; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/properties-empty-state.tsx": /*!*******************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/properties-empty-state.tsx ***! \*******************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PropertiesEmptyState: function() { return /* binding */ PropertiesEmptyState; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _component_introduction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../component-introduction */ "./packages/packages/pro/editor-components-extended/src/components/component-introduction.tsx"); function PropertiesEmptyState({ introductionRef }) { const [isOpen, setIsOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, { alignItems: "center", justifyContent: "flex-start", height: "100%", color: "text.secondary", sx: { px: 2.5, pt: 10, pb: 5.5 }, gap: 1 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.ComponentPropListIcon, { fontSize: "large" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { align: "center", variant: "subtitle2" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Add your first property', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { align: "center", variant: "caption" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Make instances flexible while keeping design synced.', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { align: "center", variant: "caption" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Select any element, then click + next to a setting to expose it.', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Link, { variant: "caption", color: "secondary", sx: { textDecorationLine: 'underline' }, onClick: () => setIsOpen(true) }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Learn more', 'elementor-pro'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_component_introduction__WEBPACK_IMPORTED_MODULE_4__.ComponentIntroduction, { anchorRef: introductionRef, shouldShowIntroduction: isOpen, onClose: () => setIsOpen(false) })); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/properties-group.tsx": /*!*************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/properties-group.tsx ***! \*************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PropertiesGroup: function() { return /* binding */ PropertiesGroup; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _property_item__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./property-item */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/property-item.tsx"); /* harmony import */ var _sortable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./sortable */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/sortable.tsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function PropertiesGroup({ group, props, allGroups, sortableTriggerProps, isDragPlaceholder, onPropsReorder, onPropertyDelete, onPropertyUpdate, onGroupDelete, editableLabelProps }) { const groupProps = group.props.map(propId => props[propId]).filter(prop => Boolean(prop)); const popupState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.usePopupState)({ variant: 'popover', disableAutoFocus: true }); const { editableRef, isEditing, error, getEditableProps, setEditingGroupId, editingGroupId } = editableLabelProps; const hasProperties = group.props.length > 0; const isThisGroupEditing = isEditing && editingGroupId === group.id; const handleRenameClick = () => { popupState.close(); setEditingGroupId(group.id); }; const handleDeleteClick = () => { popupState.close(); onGroupDelete(group.id); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { sx: { opacity: isDragPlaceholder ? 0.5 : 1 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { gap: 1 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { className: "group-header", sx: { position: 'relative', '&:hover .group-sortable-trigger': { visibility: 'visible' }, '& .group-sortable-trigger': { visibility: 'hidden' }, '&:hover .group-menu': { visibility: 'visible' }, '& .group-menu': { visibility: 'hidden' } } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_6__.SortableTrigger, _extends({ triggerClassName: "group-sortable-trigger" }, sortableTriggerProps)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { direction: "row", alignItems: "center", justifyContent: "space-between", gap: 2 }, isThisGroupEditing ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { sx: { height: 28, display: 'flex', alignItems: 'center', border: 2, borderColor: 'text.secondary', borderRadius: 1, pl: 0.5, flexGrow: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', width: '100%' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.EditableField, _extends({ ref: editableRef, as: _elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, variant: "caption", error: error ?? undefined, sx: { color: 'text.primary', fontWeight: 400, lineHeight: 1.66 } }, getEditableProps()))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.EllipsisWithTooltip, { title: group.label, as: _elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, variant: "caption", sx: { color: 'text.primary', fontWeight: 400, lineHeight: 1.66 } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.IconButton, _extends({ className: "group-menu", size: "tiny", sx: { p: 0.25, visibility: isThisGroupEditing ? 'visible' : undefined }, "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Group actions', 'elementor-pro') }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindTrigger)(popupState)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.DotsVerticalIcon, { fontSize: "tiny" })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.List, { sx: { p: 0, display: 'flex', flexDirection: 'column', gap: 1 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_6__.SortableProvider, { value: group.props, onChange: onPropsReorder }, groupProps.map(prop => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_6__.SortableItem, { key: prop.overrideKey, id: prop.overrideKey }, ({ triggerProps, triggerStyle, isDragPlaceholder: isItemDragPlaceholder }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_property_item__WEBPACK_IMPORTED_MODULE_5__.PropertyItem, { prop: prop, sortableTriggerProps: { ...triggerProps, style: triggerStyle }, isDragPlaceholder: isItemDragPlaceholder, groups: allGroups, existingLabels: Object.values(props).map(p => p.label), onDelete: onPropertyDelete, onUpdate: data => onPropertyUpdate(prop.overrideKey, data) })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Menu, _extends({}, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindMenu)(popupState), { anchorOrigin: { vertical: 'bottom', horizontal: 'right' }, transformOrigin: { vertical: 'top', horizontal: 'right' } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuListItem, { sx: { minWidth: '160px' }, onClick: handleRenameClick }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: "caption", sx: { color: 'text.primary' } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Rename', 'elementor-pro'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Tooltip, { title: hasProperties ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('To delete the group, first remove all the properties', 'elementor-pro') : '', placement: "right" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuListItem, { onClick: handleDeleteClick, disabled: hasProperties }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: "caption", sx: { color: hasProperties ? 'text.disabled' : 'error.light' } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Delete', 'elementor-pro'))))))); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/property-item.tsx": /*!**********************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/property-item.tsx ***! \**********************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ PropertyItem: function() { return /* binding */ PropertyItem; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _overridable_props_overridable_prop_form__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../overridable-props/overridable-prop-form */ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-form.tsx"); /* harmony import */ var _sortable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sortable */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/sortable.tsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function PropertyItem({ prop, sortableTriggerProps, isDragPlaceholder, groups, existingLabels, onDelete, onUpdate }) { const popoverState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.usePopupState)({ variant: 'popover' }); const icon = getElementIcon(prop); const popoverProps = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindPopover)(popoverState); const handleSubmit = data => { onUpdate(data); popoverState.close(); }; const handleDelete = event => { event.stopPropagation(); onDelete(prop.overrideKey); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, _extends({}, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.bindTrigger)(popoverState), { "data-testid": "component-property-item", sx: { position: 'relative', pl: 0.5, pr: 1, py: 0.25, minHeight: 28, borderRadius: 1, border: '1px solid', borderColor: 'divider', display: 'flex', alignItems: 'center', gap: 0.5, opacity: isDragPlaceholder ? 0.5 : 1, cursor: 'pointer', '&:hover': { backgroundColor: 'action.hover' }, '&:hover .sortable-trigger': { visibility: 'visible' }, '& .sortable-trigger': { visibility: 'hidden' }, '&:hover .delete-button': { visibility: 'visible' }, '& .delete-button': { visibility: 'hidden' } } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sortable__WEBPACK_IMPORTED_MODULE_5__.SortableTrigger, sortableTriggerProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { sx: { display: 'flex', alignItems: 'center', color: 'text.primary', fontSize: 12, padding: 0.25 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("i", { className: icon })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { variant: "caption", sx: { color: 'text.primary', flexGrow: 1, fontSize: 10 } }, prop.label), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.IconButton, { size: "tiny", onClick: handleDelete, "aria-label": "Delete property", sx: { p: 0.25 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.XIcon, { fontSize: "tiny" }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Popover, _extends({}, popoverProps, { anchorOrigin: { vertical: 'bottom', horizontal: 'left' }, transformOrigin: { vertical: 'top', horizontal: 'left' }, PaperProps: { sx: { width: popoverState.anchorEl?.getBoundingClientRect().width } } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_overridable_props_overridable_prop_form__WEBPACK_IMPORTED_MODULE_4__.OverridablePropForm, { onSubmit: handleSubmit, currentValue: prop, groups: groups, existingLabels: existingLabels, sx: { width: '100%' } }))); } function getElementIcon(prop) { const elType = prop.elType === 'widget' ? prop.widgetType : prop.elType; const widgetsCache = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getWidgetsCache)(); if (!widgetsCache) { return 'eicon-apps'; } const widgetConfig = widgetsCache[elType]; return widgetConfig?.icon || 'eicon-apps'; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/sortable.tsx": /*!*****************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/sortable.tsx ***! \*****************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ MultiSortableGroup: function() { return /* binding */ MultiSortableGroup; }, /* harmony export */ MultiSortableItem: function() { return /* binding */ MultiSortableItem; }, /* harmony export */ MultiSortableRoot: function() { return /* binding */ MultiSortableRoot; }, /* harmony export */ SortableItem: function() { return /* binding */ SortableItem; }, /* harmony export */ SortableProvider: function() { return /* binding */ SortableProvider; }, /* harmony export */ SortableTrigger: function() { return /* binding */ SortableTrigger; }, /* harmony export */ isMultiGroupSortingEnabled: function() { return /* binding */ isMultiGroupSortingEnabled; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/core-adapter-utils */ "@elementor/core-adapter-utils"); /* harmony import */ var _elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const SortableProvider = props => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.UnstableSortableProvider, _extends({ restrictAxis: true, variant: "static", dragPlaceholderStyle: { opacity: '1' } }, props)); const SortableTrigger = ({ triggerClassName, ...props }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(StyledSortableTrigger, _extends({}, props, { role: "button", className: `sortable-trigger ${triggerClassName ?? ''}`.trim(), "aria-label": "sort" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.GripVerticalIcon, { fontSize: "tiny" })); const SortableItem = ({ children, id }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.UnstableSortableItem, { id: id, render: ({ itemProps, isDragged, triggerProps, itemStyle, triggerStyle, dropIndicationStyle, showDropIndication, isDragOverlay, isDragPlaceholder }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, _extends({}, itemProps, { style: itemStyle, component: "div", role: "listitem", sx: { backgroundColor: isDragOverlay ? 'background.paper' : undefined } }), children({ isDragged, isDragPlaceholder, triggerProps, triggerStyle }), showDropIndication && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(SortableItemIndicator, { style: dropIndicationStyle })) }); const MULTI_GROUP_SORTABLE_MIN_CORE_VERSION = '4.1.0'; const isMultiGroupSortingEnabled = (0,_elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_1__.isCoreAtLeast)(MULTI_GROUP_SORTABLE_MIN_CORE_VERSION); function MultiSortableRoot({ children, value, onChange }) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.UnstableSortable, { mode: "multiple", restrictAxis: true, dragPlaceholderStyle: { opacity: '1' }, value: value, onChange: onChange }, children); } function MultiSortableGroup({ groupId, children }) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.UnstableSortableGroup, { groupId: groupId }, children); } function MultiSortableItem({ id, children }) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.UnstableSortableItem, { id: id }, children); } const StyledSortableTrigger = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.styled)('div')(({ theme }) => ({ position: 'absolute', left: '-2px', top: '50%', transform: `translate( -${theme.spacing(1.5)}, -50% )`, color: theme.palette.action.active, cursor: 'grab' })); const SortableItemIndicator = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.styled)((0,_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box))` width: 100%; height: 1px; background-color: ${({ theme }) => theme.palette.text.primary}; `; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/use-current-editable-item.ts": /*!*********************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/use-current-editable-item.ts ***! \*********************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useCurrentEditableItem: function() { return /* binding */ useCurrentEditableItem; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _store_actions_rename_overridable_group__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../store/actions/rename-overridable-group */ "./packages/packages/pro/editor-components-extended/src/store/actions/rename-overridable-group.ts"); /* harmony import */ var _utils_validate_group_label__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/validate-group-label */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/utils/validate-group-label.ts"); function useCurrentEditableItem() { const [editingGroupId, setEditingGroupId] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); const currentComponentId = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useCurrentComponentId)(); const overridableProps = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useOverridableProps)(currentComponentId); const allGroupsRecord = overridableProps?.groups?.items ?? {}; const currentGroup = editingGroupId ? allGroupsRecord[editingGroupId] : null; const validateLabel = newLabel => { const otherGroups = Object.fromEntries(Object.entries(allGroupsRecord).filter(([id]) => id !== editingGroupId)); return (0,_utils_validate_group_label__WEBPACK_IMPORTED_MODULE_6__.validateGroupLabel)(newLabel, otherGroups) || null; }; const handleSubmit = newLabel => { if (!editingGroupId || !currentComponentId) { throw new Error((0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Group ID or component ID is missing', 'elementor-pro')); } (0,_store_actions_rename_overridable_group__WEBPACK_IMPORTED_MODULE_5__.renameOverridableGroup)({ componentId: currentComponentId, groupId: editingGroupId, label: newLabel }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.setDocumentModifiedStatus)(true); }; const { ref: editableRef, openEditMode, isEditing, error, getProps: getEditableProps } = (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_3__.useEditable)({ value: currentGroup?.label ?? '', onSubmit: handleSubmit, validation: validateLabel }); return { editableRef, isEditing, error, getEditableProps, setEditingGroupId: groupId => { setEditingGroupId(groupId); openEditMode(); }, editingGroupId }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/use-multi-sortable-sync.ts": /*!*******************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/use-multi-sortable-sync.ts ***! \*******************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useMultiSortableSync: function() { return /* binding */ useMultiSortableSync; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _apply_multi_sortable_update__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./apply-multi-sortable-update */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/apply-multi-sortable-update.ts"); /* harmony import */ var _component_properties_sortable_ids__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./component-properties-sortable-ids */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-sortable-ids.ts"); function useMultiSortableSync({ currentComponentId, overridableProps, groups, onPropertyDelete, onPropertyUpdate }) { const [syncNonce, setSyncNonce] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0); const handlePropertyDelete = propKey => { onPropertyDelete(propKey); setSyncNonce(n => n + 1); }; const handlePropertyUpdate = (overrideKey, data) => { const existing = overridableProps.props[overrideKey]; const groupChanged = existing ? data.group !== existing.groupId : false; onPropertyUpdate(overrideKey, data); if (groupChanged) { setSyncNonce(n => n + 1); } }; const handleSortableChange = updated => { (0,_apply_multi_sortable_update__WEBPACK_IMPORTED_MODULE_1__.applyMultiSortableUpdate)(updated, currentComponentId); if ((0,_apply_multi_sortable_update__WEBPACK_IMPORTED_MODULE_1__.hasDuplicateIds)(updated)) { setSyncNonce(n => n + 1); } }; const sortableValue = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { const headers = groups.map(g => g.id); const byGroup = Object.fromEntries(groups.map(g => [g.id, [...g.props]])); return { [_component_properties_sortable_ids__WEBPACK_IMPORTED_MODULE_2__.COMPONENT_PROP_GROUP_HEADERS_KEY]: headers, ...byGroup }; }, [groups]); const sortableKey = `${groups.length}:${syncNonce}`; return { sortableKey, sortableValue, handlePropertyDelete, handlePropertyUpdate, handleSortableChange }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/utils/generate-unique-label.ts": /*!***********************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/utils/generate-unique-label.ts ***! \***********************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ generateUniqueLabel: function() { return /* binding */ generateUniqueLabel; } /* harmony export */ }); const DEFAULT_NEW_GROUP_LABEL = 'New group'; function generateUniqueLabel(groups) { const existingLabels = new Set(groups.map(group => group.label)); if (!existingLabels.has(DEFAULT_NEW_GROUP_LABEL)) { return DEFAULT_NEW_GROUP_LABEL; } let index = 1; let newLabel = `${DEFAULT_NEW_GROUP_LABEL}-${index}`; while (existingLabels.has(newLabel)) { index++; newLabel = `${DEFAULT_NEW_GROUP_LABEL}-${index}`; } return newLabel; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/utils/validate-group-label.ts": /*!**********************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/utils/validate-group-label.ts ***! \**********************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ERROR_MESSAGES: function() { return /* binding */ ERROR_MESSAGES; }, /* harmony export */ validateGroupLabel: function() { return /* binding */ validateGroupLabel; } /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); const ERROR_MESSAGES = { EMPTY_NAME: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Group name is required', 'elementor-pro'), DUPLICATE_NAME: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Group name already exists', 'elementor-pro') }; function validateGroupLabel(label, existingGroups) { const trimmedLabel = label.trim(); if (!trimmedLabel) { return ERROR_MESSAGES.EMPTY_NAME; } const isDuplicate = Object.values(existingGroups).some(group => group.label === trimmedLabel); if (isDuplicate) { return ERROR_MESSAGES.DUPLICATE_NAME; } return ''; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/components-tab/component-item.tsx": /*!***********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/components-tab/component-item.tsx ***! \***********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ComponentItem: function() { return /* binding */ ComponentItem; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-canvas */ "@elementor/editor-canvas"); /* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _elementor_license_api__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/license-api */ "@elementor/license-api"); /* harmony import */ var _elementor_license_api__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_elementor_license_api__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _store_actions_archive_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/actions/archive-component */ "./packages/packages/pro/editor-components-extended/src/store/actions/archive-component.ts"); /* harmony import */ var _store_actions_rename_component__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/actions/rename-component */ "./packages/packages/pro/editor-components-extended/src/store/actions/rename-component.ts"); /* harmony import */ var _utils_component_name_validation__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../utils/component-name-validation */ "./packages/packages/pro/editor-components-extended/src/utils/component-name-validation.ts"); /* harmony import */ var _utils_create_component_model__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../utils/create-component-model */ "./packages/packages/pro/editor-components-extended/src/utils/create-component-model.ts"); /* harmony import */ var _utils_get_container_for_new_element__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../utils/get-container-for-new-element */ "./packages/packages/pro/editor-components-extended/src/utils/get-container-for-new-element.ts"); /* harmony import */ var _delete_confirmation_dialog__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./delete-confirmation-dialog */ "./packages/packages/pro/editor-components-extended/src/components/components-tab/delete-confirmation-dialog.tsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function ComponentItem({ component }) { const itemRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); const { canRename, canDelete } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.useComponentsPermissions)(); const { data: isLicenseExpired = true, isPending: isLicenseFetching } = (0,_elementor_license_api__WEBPACK_IMPORTED_MODULE_6__.useIsLicenseExpired)(); const shouldShowActions = (canRename || canDelete) && !isLicenseExpired; const { ref: editableRef, isEditing, openEditMode, error, getProps: getEditableProps } = (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.useEditable)({ value: component.name, onSubmit: newName => (0,_store_actions_rename_component__WEBPACK_IMPORTED_MODULE_10__.renameComponent)(component.uid, newName), validation: validateComponentTitle }); const componentModel = (0,_utils_create_component_model__WEBPACK_IMPORTED_MODULE_12__.createComponentModel)(component); const popupState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.usePopupState)({ variant: 'popover', disableAutoFocus: true }); const handleClick = () => { addComponentToPage(componentModel); }; const handleDragEnd = () => { (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.loadComponentsAssets)([componentModel]); (0,_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__.endDragElementFromPanel)(); }; const handleDeleteClick = () => { setIsDeleteDialogOpen(true); popupState.close(); }; const handleDeleteConfirm = () => { if (!component.id) { throw new Error('Component ID is required'); } setIsDeleteDialogOpen(false); (0,_store_actions_archive_component__WEBPACK_IMPORTED_MODULE_9__.archiveComponent)(component.id, component.name); }; const handleDeleteDialogClose = () => { setIsDeleteDialogOpen(false); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ComponentItemWrapper, { isAnimating: isLicenseFetching }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.WarningInfotip, { open: Boolean(error), text: error ?? '', placement: "bottom", width: itemRef.current?.getBoundingClientRect().width, offset: [0, -15] }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.ComponentItem, { ref: itemRef, component: component, disabled: isLicenseExpired, draggable: !isLicenseExpired, onDragStart: event => (0,_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__.startDragElementFromPanel)(componentModel, event), onDragEnd: handleDragEnd, onClick: handleClick, isEditing: isEditing, error: error, nameSlot: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.ComponentName, { name: component.name, editable: { ref: editableRef, isEditing, getProps: getEditableProps } }), endSlot: shouldShowActions ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.IconButton, _extends({ size: "tiny" }, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.bindTrigger)(popupState), { "aria-label": "More actions" }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_5__.DotsVerticalIcon, { fontSize: "tiny" })) : undefined })), shouldShowActions && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Menu, _extends({}, (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.bindMenu)(popupState), { anchorOrigin: { vertical: 'bottom', horizontal: 'right' }, transformOrigin: { vertical: 'top', horizontal: 'right' } }), canRename && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.MenuListItem, { sx: { minWidth: '160px' }, primaryTypographyProps: { variant: 'caption', color: 'text.primary' }, onClick: () => { popupState.close(); openEditMode(); } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Rename', 'elementor-pro')), canDelete && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.MenuListItem, { sx: { minWidth: '160px' }, primaryTypographyProps: { variant: 'caption', color: 'error.light' }, onClick: handleDeleteClick }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Delete', 'elementor-pro'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_delete_confirmation_dialog__WEBPACK_IMPORTED_MODULE_14__.DeleteConfirmationDialog, { open: isDeleteDialogOpen, onClose: handleDeleteDialogClose, onConfirm: handleDeleteConfirm })); } const addComponentToPage = model => { const { container, options } = (0,_utils_get_container_for_new_element__WEBPACK_IMPORTED_MODULE_13__.getContainerForNewElement)(); if (!container) { throw new Error(`Can't find container to drop new component instance at`); } (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.loadComponentsAssets)([model]); (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__.dropElement)({ containerId: container.id, model, options: { ...options, useHistory: false, scrollIntoView: true } }); }; const validateComponentTitle = newTitle => { const result = (0,_utils_component_name_validation__WEBPACK_IMPORTED_MODULE_11__.validateComponentName)(newTitle); if (!result.errorMessage) { return null; } return result.errorMessage; }; const pulse = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.keyframes)` 0%, 100% { opacity: 0.4; } 50% { opacity: 0.8; } `; const ComponentItemWrapper = ({ children, isAnimating }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Stack, { sx: { animation: isAnimating ? `${pulse} 1.5s ease-in-out infinite` : undefined } }, children); /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/components-tab/components-footer.tsx": /*!**************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/components-tab/components-footer.tsx ***! \**************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ComponentsFooter: function() { return /* binding */ ComponentsFooter; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/events */ "@elementor/events"); /* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_events__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__); const GENERATE_COMPONENT_PROMPT = 'Tell Angie what component you want to build'; const ANGIE_COMPONENTS_TAB_ENTRY = 'components_tab'; const ANGIE_CTA_CLICKED_EVENT = 'angie_cta_clicked'; const ComponentsFooter = () => { const { canCreate } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useComponentsPermissions)(); if (!canCreate || !(0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__.isAngieAvailable)()) { return null; } const handleCreateClick = () => { (0,_elementor_events__WEBPACK_IMPORTED_MODULE_3__.trackEvent)({ eventName: ANGIE_CTA_CLICKED_EVENT, entry_point: ANGIE_COMPONENTS_TAB_ENTRY, has_angie_installed: true }); (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__.sendPromptToAngie)(GENERATE_COMPONENT_PROMPT); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Box, { sx: { position: 'sticky', bottom: 0, backgroundColor: 'background.default', px: 2, pb: 2 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { gap: 1 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Divider, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { direction: "row", alignItems: "center", justifyContent: "space-between" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Typography, { variant: "caption", color: "text.secondary" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Create components with Angie', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Button, { variant: "text", size: "small", startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__.AIIcon, { fontSize: "small" }), onClick: handleCreateClick, sx: { color: '#c00bb9', px: '5px', py: '4px', minWidth: 'auto' } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Create', 'elementor-pro'))))); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/components-tab/components.tsx": /*!*******************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/components-tab/components.tsx ***! \*******************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ExtendedComponents: function() { return /* binding */ ExtendedComponents; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_license_api__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/license-api */ "@elementor/license-api"); /* harmony import */ var _elementor_license_api__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_license_api__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _component_item__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./component-item */ "./packages/packages/pro/editor-components-extended/src/components/components-tab/component-item.tsx"); /* harmony import */ var _components_footer__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./components-footer */ "./packages/packages/pro/editor-components-extended/src/components/components-tab/components-footer.tsx"); /* harmony import */ var _expired_components_promotion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./expired-components-promotion */ "./packages/packages/pro/editor-components-extended/src/components/components-tab/expired-components-promotion.tsx"); /* harmony import */ var _expired_empty_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./expired-empty-state */ "./packages/packages/pro/editor-components-extended/src/components/components-tab/expired-empty-state.tsx"); /* harmony import */ var _pro_empty_state__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./pro-empty-state */ "./packages/packages/pro/editor-components-extended/src/components/components-tab/pro-empty-state.tsx"); const ExtendedComponents = () => { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_2__.ThemeProvider, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.SearchProvider, { localStorageKey: "elementor-components-search" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ExtendedComponentsContent, null))); }; const ExtendedComponentsContent = () => { const { components, isLoading } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useComponents)(); const hasComponents = !isLoading && components.length > 0; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, hasComponents && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.ComponentSearch, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ExtendedComponentsList, null)); }; const EMPTY_STATE_STYLE_ID = 'components-empty-state-full-height'; const FULL_HEIGHT_CSS = ` #elementor-panel-page-elements { display: flex; flex-direction: column; height: 100%; } #elementor-panel-elements { display: flex; flex-direction: column; flex: 1; min-height: 0; } #elementor-panel-elements-wrapper { display: flex; flex-direction: column; flex: 1; min-height: 0; } `; const useFullHeightPanel = () => { (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => { let style = document.getElementById(EMPTY_STATE_STYLE_ID); if (!style) { style = document.createElement('style'); style.id = EMPTY_STATE_STYLE_ID; style.textContent = FULL_HEIGHT_CSS; document.head.appendChild(style); } return () => { document.getElementById(EMPTY_STATE_STYLE_ID)?.remove(); }; }, []); }; const ExtendedComponentsList = () => { const { isLoading: isAllLoading } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useComponents)(); const { components: filteredComponents, isLoading, searchValue } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useFilteredComponents)(); const { data: isLicenseExpired = false, isPending: isLicenseFetching } = (0,_elementor_license_api__WEBPACK_IMPORTED_MODULE_3__.useIsLicenseExpired)(); useFullHeightPanel(); if (isLoading || isAllLoading || isLicenseFetching) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.LoadingComponents, null); } const isEmpty = !filteredComponents?.length; const isSearching = searchValue.length > 0; if (isEmpty) { if (isSearching) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.EmptySearchResult, null); } if (isLicenseExpired) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_expired_empty_state__WEBPACK_IMPORTED_MODULE_8__.ExpiredEmptyState, null); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_pro_empty_state__WEBPACK_IMPORTED_MODULE_9__.ProEmptyState, null); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.Stack, { justifyContent: "space-between", sx: { flex: 1, minHeight: 0 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_4__.List, { sx: { display: 'flex', flexDirection: 'column', gap: 1, px: 2 } }, filteredComponents.map(component => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_component_item__WEBPACK_IMPORTED_MODULE_5__.ComponentItem, { key: component.uid, component: component }))), isLicenseExpired ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_expired_components_promotion__WEBPACK_IMPORTED_MODULE_7__.ExpiredComponentsPromotion, null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_footer__WEBPACK_IMPORTED_MODULE_6__.ComponentsFooter, null)); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/components-tab/delete-confirmation-dialog.tsx": /*!***********************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/components-tab/delete-confirmation-dialog.tsx ***! \***********************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ DeleteConfirmationDialog: function() { return /* binding */ DeleteConfirmationDialog; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); function DeleteConfirmationDialog({ open, onClose, onConfirm }) { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog, { open: open, onClose: onClose }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.Title, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Delete this component?', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.Content, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.ContentText, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Existing instances on your pages will remain functional. You will no longer find this component in your list.', 'elementor-pro'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.ConfirmationDialog.Actions, { onClose: onClose, onConfirm: onConfirm })); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/components-tab/expired-components-promotion.tsx": /*!*************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/components-tab/expired-components-promotion.tsx ***! \*************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ExpiredComponentsPromotion: function() { return /* binding */ ExpiredComponentsPromotion; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); const RENEW_COMPONENTS_URL = 'https://go.elementor.com/renew-license-components-exist-footer/'; const ExpiredComponentsPromotion = () => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, { sx: { px: 2.5, pb: 2, position: 'sticky', bottom: 0, zIndex: 1000 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Alert, { variant: "standard", color: "promotion", icon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.CrownFilledIcon, { fontSize: "tiny" }), "aria-label": "expired-components-promotion", action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.AlertAction, { color: "promotion", variant: "contained", href: RENEW_COMPONENTS_URL, target: "_blank", rel: "noopener noreferrer" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Upgrade Now', 'elementor-pro')), sx: { maxWidth: 296 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box, { sx: { gap: 0.5, display: 'flex', flexDirection: 'column' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.AlertTitle, null, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Create New Components', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { variant: "caption" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Your Pro subscription has expired. Renew to create new components.', 'elementor-pro'))))); /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/components-tab/expired-empty-state.tsx": /*!****************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/components-tab/expired-empty-state.tsx ***! \****************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ExpiredEmptyState: function() { return /* binding */ ExpiredEmptyState; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); const RENEW_COMPONENTS_URL = 'https://go.elementor.com/renew-license-components/'; const SUBTITLE_OVERRIDE_SX = { fontSize: '0.875rem !important', fontWeight: '500 !important' }; const ExpiredEmptyState = () => { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { alignItems: "center", justifyContent: "start", sx: { px: 2, pt: 4 }, gap: 1.75, overflow: "hidden" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__.ComponentsIcon, { fontSize: "large", sx: { color: 'text.secondary' } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { align: "center", variant: "subtitle2", color: "text.secondary", sx: SUBTITLE_OVERRIDE_SX }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Create Reusable Components', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Typography, { align: "center", variant: "caption", color: "text.secondary" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Create design elements that sync across your entire site.', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.CtaButton, { size: "small", href: RENEW_COMPONENTS_URL })); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/components-tab/pro-empty-state.tsx": /*!************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/components-tab/pro-empty-state.tsx ***! \************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ProEmptyState: function() { return /* binding */ ProEmptyState; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/events */ "@elementor/events"); /* harmony import */ var _elementor_events__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_events__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _utils_can_show_angie_elementor_promotion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils/can-show-angie-elementor-promotion */ "./packages/packages/pro/editor-components-extended/src/utils/can-show-angie-elementor-promotion.ts"); /* harmony import */ var _angie_install_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../angie-install-dialog */ "./packages/packages/pro/editor-components-extended/src/components/angie-install-dialog/index.ts"); /* harmony import */ var _angie_intro__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../angie-intro */ "./packages/packages/pro/editor-components-extended/src/components/angie-intro/index.ts"); const LEARN_MORE_URL = 'http://go.elementor.com/components-guide-article'; const GENERATE_COMPONENT_PROMPT = 'Tell Angie what component you want to build'; const ANGIE_COMPONENTS_TAB_ENTRY = 'components_tab'; const ANGIE_CTA_CLICKED_EVENT = 'angie_cta_clicked'; // Injected dynamically because global CSS would break the Widgets tab (shared panel elements). const SUBTITLE_OVERRIDE_SX = { fontSize: '0.875rem !important', fontWeight: '500 !important' }; const ProEmptyState = () => { const { canCreate } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useComponentsPermissions)(); const { shouldShowIntro, suppressIntro } = (0,_angie_intro__WEBPACK_IMPORTED_MODULE_9__.useAngieIntro)(); const [isIntroOpen, setIsIntroOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); const [isInstallDialogOpen, setIsInstallDialogOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false); const linkRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null); const handleGenerateClick = () => { const hasAngieInstalled = (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__.isAngieAvailable)(); (0,_elementor_events__WEBPACK_IMPORTED_MODULE_3__.trackEvent)({ eventName: ANGIE_CTA_CLICKED_EVENT, entry_point: ANGIE_COMPONENTS_TAB_ENTRY, has_angie_installed: hasAngieInstalled }); if (!hasAngieInstalled) { setIsInstallDialogOpen(true); return; } if ((0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__.isAngieSidebarOpen)()) { (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__.sendPromptToAngie)(GENERATE_COMPONENT_PROMPT); return; } if (shouldShowIntro) { setIsIntroOpen(true); return; } (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__.sendPromptToAngie)(GENERATE_COMPONENT_PROMPT); }; const handleIntroConfirm = () => { suppressIntro(); setIsIntroOpen(false); (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_2__.sendPromptToAngie)(GENERATE_COMPONENT_PROMPT); }; const handleIntroClose = () => { setIsIntroOpen(false); }; const handleInstallDialogClose = () => { setIsInstallDialogOpen(false); }; const isMac = navigator.platform.toUpperCase().indexOf('MAC') >= 0; const shortcutKey = isMac ? 'Cmd' : 'Ctrl'; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { alignItems: "center", justifyContent: "start", height: "100%", sx: { px: 2, py: 4 }, gap: 1, overflow: "hidden" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { alignItems: "center", gap: 1.75 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__.ComponentsIcon, { fontSize: "large", sx: { color: 'text.secondary' } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { alignItems: "center", gap: 1.75 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Typography, { align: "center", variant: "subtitle2", color: "text.secondary", sx: SUBTITLE_OVERRIDE_SX }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Create your first component', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Typography, { align: "center", variant: "caption", color: "text.tertiary" }, canCreate ? `${(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('To create, press', 'elementor-pro')} ${shortcutKey}+ Shift + K ${(0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('on div-block or flexbox.', 'elementor-pro')}` : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('With your current role, you cannot create components. Contact an administrator to create one.', 'elementor-pro')))), canCreate && (0,_utils_can_show_angie_elementor_promotion__WEBPACK_IMPORTED_MODULE_7__.canShowAngieElementorPromotion)() && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { alignItems: "center", gap: 1, width: "100%" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Typography, { variant: "subtitle2", color: "text.primary", sx: { py: 0.5, fontWeight: 500 } }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Or', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { alignItems: "center", gap: 1 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Typography, { align: "center", variant: "caption", color: "text.tertiary" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Create a custom component with Angie', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Link, { ref: linkRef, component: "button", variant: "caption", onClick: handleGenerateClick, sx: { display: 'flex', alignItems: 'center', padding: 0.5, gap: 0.5, color: '#c00bb9', textDecoration: 'none', '&:hover': { textDecoration: 'underline' } } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_4__.AIIcon, { sx: { fontSize: 16 } }), (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Create component', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_angie_intro__WEBPACK_IMPORTED_MODULE_9__.AngieIntroPopover, { open: isIntroOpen, onClose: handleIntroClose, onConfirm: handleIntroConfirm, anchorRef: linkRef }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Stack, { alignItems: "center", gap: 0.5, sx: { mt: 'auto', width: '100%' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Divider, { sx: { width: '100%', mb: 2 } }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Typography, { align: "center", variant: "caption", color: "text.tertiary" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Components are reusable elements that sync across your site.', 'elementor-pro')), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_5__.Link, { href: LEARN_MORE_URL, target: "_blank", rel: "noopener noreferrer", variant: "caption", color: "info.main" }, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_6__.__)('Learn more', 'elementor-pro'))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_angie_install_dialog__WEBPACK_IMPORTED_MODULE_8__.AngieInstallDialog, { open: isInstallDialogOpen, onClose: handleInstallDialogClose, prompt: GENERATE_COMPONENT_PROMPT })); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/create-component-form/create-component-form.tsx": /*!*************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/create-component-form/create-component-form.tsx ***! \*************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CreateComponentForm: function() { return /* binding */ CreateComponentForm; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-notifications */ "@elementor/editor-notifications"); /* harmony import */ var _elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _store_actions_create_unpublished_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../store/actions/create-unpublished-component */ "./packages/packages/pro/editor-components-extended/src/store/actions/create-unpublished-component.ts"); /* harmony import */ var _sync_prevent_non_atomic_nesting__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../sync/prevent-non-atomic-nesting */ "./packages/packages/pro/editor-components-extended/src/sync/prevent-non-atomic-nesting.ts"); /* harmony import */ var _utils_component_form_schema__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../utils/component-form-schema */ "./packages/packages/pro/editor-components-extended/src/utils/component-form-schema.ts"); /* harmony import */ var _hooks_use_form__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks/use-form */ "./packages/packages/pro/editor-components-extended/src/components/create-component-form/hooks/use-form.ts"); /* harmony import */ var _utils_get_component_event_data__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils/get-component-event-data */ "./packages/packages/pro/editor-components-extended/src/components/create-component-form/utils/get-component-event-data.ts"); const MAX_COMPONENTS = 100; function CreateComponentForm() { const [element, setElement] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); const [anchorPosition, setAnchorPosition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(); const { components } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useComponents)(); const eventData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { const OPEN_SAVE_AS_COMPONENT_FORM_EVENT = 'elementor/editor/open-save-as-component-form'; const openPopup = event => { const { shouldOpen, notification } = shouldOpenForm(event.detail.element, components?.length ?? 0); if (!shouldOpen) { (0,_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_3__.notify)(notification); return; } setElement({ element: event.detail.element, elementLabel: (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_2__.getElementLabel)(event.detail.element.id) }); setAnchorPosition(event.detail.anchorPosition); eventData.current = (0,_utils_get_component_event_data__WEBPACK_IMPORTED_MODULE_12__.getComponentEventData)(event.detail.element, event.detail.options); (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.trackComponentEvent)({ action: 'createClicked', source: 'user', ...eventData.current }); }; window.addEventListener(OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup); return () => { window.removeEventListener(OPEN_SAVE_AS_COMPONENT_FORM_EVENT, openPopup); }; }, [components?.length]); const handleSave = async values => { try { if (!element) { throw new Error(`Can't save element as component: element not found`); } const { uid, instanceId } = await (0,_store_actions_create_unpublished_component__WEBPACK_IMPORTED_MODULE_8__.createUnpublishedComponent)({ name: values.componentName, element: element.element, eventData: eventData.current, source: 'user' }); const publishedComponentId = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.componentsSelectors.getComponentByUid(uid)?.id; if (publishedComponentId) { (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.switchToComponent)(publishedComponentId, instanceId); } else { throw new Error('Failed to find published component'); } (0,_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_3__.notify)({ type: 'success', message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Component created successfully.', 'elementor-pro'), id: `component-saved-successfully-${uid}` }); resetAndClosePopup(); } catch { const errorMessage = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Failed to create component. Please try again.', 'elementor-pro'); (0,_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_3__.notify)({ type: 'error', message: errorMessage, id: 'component-save-failed' }); resetAndClosePopup(); } }; const resetAndClosePopup = () => { setElement(null); setAnchorPosition(undefined); }; const cancelSave = () => { resetAndClosePopup(); (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.trackComponentEvent)({ action: 'createCancelled', source: 'user', ...eventData.current }); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.ThemeProvider, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Popover, { open: element !== null, onClose: cancelSave, anchorReference: "anchorPosition", anchorPosition: anchorPosition, "data-testid": "create-component-form" }, element !== null && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Form, { initialValues: { componentName: element.elementLabel }, handleSave: handleSave, closePopup: cancelSave }))); } function shouldOpenForm(element, componentsCount) { const nonAtomicElements = (0,_sync_prevent_non_atomic_nesting__WEBPACK_IMPORTED_MODULE_9__.findNonAtomicElementsInElement)(element); if (nonAtomicElements.length > 0) { return { shouldOpen: false, notification: { type: 'default', message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Components require atomic elements only. Remove widgets to create this component.', 'elementor-pro'), id: 'non-atomic-element-save-blocked' } }; } if (componentsCount >= MAX_COMPONENTS) { return { shouldOpen: false, notification: { type: 'default', /* translators: %s is the maximum number of components */ message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)(`You've reached the limit of %s components. Please remove an existing one to create a new component.`, 'elementor-pro').replace('%s', MAX_COMPONENTS.toString()), id: 'maximum-number-of-components-exceeded' } }; } return { shouldOpen: true, notification: null }; } const FONT_SIZE = 'tiny'; const Form = ({ initialValues, handleSave, closePopup }) => { const { values, errors, isValid, handleChange, validateForm } = (0,_hooks_use_form__WEBPACK_IMPORTED_MODULE_11__.useForm)(initialValues); const nameInputRef = (0,_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.useTextFieldAutoSelect)(); const { components } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useComponents)(); const existingComponentNames = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { return components?.map(component => component.name) ?? []; }, [components]); const changeValidationSchema = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => (0,_utils_component_form_schema__WEBPACK_IMPORTED_MODULE_10__.createBaseComponentSchema)(existingComponentNames), [existingComponentNames]); const submitValidationSchema = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => (0,_utils_component_form_schema__WEBPACK_IMPORTED_MODULE_10__.createSubmitComponentSchema)(existingComponentNames), [existingComponentNames]); const handleSubmit = () => { const { success, parsedValues } = validateForm(submitValidationSchema); if (success) { handleSave(parsedValues); } }; const texts = { heading: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Create component', 'elementor-pro'), name: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Name', 'elementor-pro'), cancel: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Cancel', 'elementor-pro'), create: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__.__)('Create', 'elementor-pro') }; const nameInputId = 'component-name'; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_4__.Form, { onSubmit: handleSubmit }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Stack, { alignItems: "start", width: "268px" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Stack, { direction: "row", alignItems: "center", py: 1, px: 1.5, sx: { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_5__.ComponentsIcon, { fontSize: FONT_SIZE }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Typography, { variant: "caption", sx: { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }, texts.heading)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Grid, { container: true, gap: 0.75, alignItems: "start", p: 1.5 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Grid, { item: true, xs: 12 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.FormLabel, { htmlFor: nameInputId, size: "tiny" }, texts.name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Grid, { item: true, xs: 12 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.TextField, { id: nameInputId, size: FONT_SIZE, fullWidth: true, value: values.componentName, onChange: e => handleChange(e, 'componentName', changeValidationSchema), inputProps: { style: { color: 'text.primary', fontWeight: '600' } }, error: Boolean(errors.componentName), helperText: errors.componentName, inputRef: nameInputRef }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Stack, { direction: "row", justifyContent: "flex-end", alignSelf: "end", py: 1, px: 1.5 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Button, { onClick: closePopup, color: "secondary", variant: "text", size: "small" }, texts.cancel), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_6__.Button, { type: "submit", disabled: !isValid, variant: "contained", color: "primary", size: "small" }, texts.create)))); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/create-component-form/hooks/use-form.ts": /*!*****************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/create-component-form/hooks/use-form.ts ***! \*****************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useForm: function() { return /* binding */ useForm; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); const useForm = initialValues => { const [values, setValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initialValues); const [errors, setErrors] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({}); const isValid = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { return !Object.values(errors).some(error => error); }, [errors]); const handleChange = (e, field, validationSchema) => { const updated = { ...values, [field]: e.target.value }; setValues(updated); const { success, errors: validationErrors } = validateForm(updated, validationSchema); if (!success) { setErrors(validationErrors); } else { setErrors({}); } }; const validate = validationSchema => { const { success, errors: validationErrors, parsedValues } = validateForm(values, validationSchema); if (!success) { setErrors(validationErrors); return { success }; } setErrors({}); return { success, parsedValues }; }; return { values, errors, isValid, handleChange, validateForm: validate }; }; const validateForm = (values, schema) => { const result = schema.safeParse(values); if (result.success) { return { success: true, parsedValues: result.data }; } const errors = {}; Object.entries(result.error.formErrors.fieldErrors).forEach(([field, error]) => { errors[field] = error[0]; }); return { success: false, errors }; }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/create-component-form/utils/get-component-event-data.ts": /*!*********************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/create-component-form/utils/get-component-event-data.ts ***! \*********************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getComponentEventData: function() { return /* binding */ getComponentEventData; } /* harmony export */ }); const getComponentEventData = (containerElement, options) => { const { elementsCount, componentsCount } = countNestedElements(containerElement); return { nested_elements_count: elementsCount, nested_components_count: componentsCount, top_element_type: containerElement.elType, location: options?.location, secondary_location: options?.secondaryLocation, trigger: options?.trigger }; }; function countNestedElements(container) { if (!container.elements || container.elements.length === 0) { return { elementsCount: 0, componentsCount: 0 }; } let elementsCount = container.elements.length; let componentsCount = 0; for (const element of container.elements) { if (element.widgetType === 'e-component') { componentsCount++; } const { elementsCount: nestedElementsCount, componentsCount: nestedComponentsCount } = countNestedElements(element); elementsCount += nestedElementsCount; componentsCount += nestedComponentsCount; } return { elementsCount, componentsCount }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/edit-component/component-modal.tsx": /*!************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/edit-component/component-modal.tsx ***! \************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ComponentModal: function() { return /* binding */ ComponentModal; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ "react-dom"); /* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_dom__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _use_canvas_document__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./use-canvas-document */ "./packages/packages/pro/editor-components-extended/src/components/edit-component/use-canvas-document.ts"); /* harmony import */ var _use_element_rect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./use-element-rect */ "./packages/packages/pro/editor-components-extended/src/components/edit-component/use-element-rect.ts"); function ComponentModal({ topLevelElementDom, onClose }) { const canvasDocument = (0,_use_canvas_document__WEBPACK_IMPORTED_MODULE_3__.useCanvasDocument)(); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { const handleEsc = event => { if (event.key === 'Escape') { onClose(); } }; canvasDocument?.body.addEventListener('keydown', handleEsc); return () => { canvasDocument?.body.removeEventListener('keydown', handleEsc); }; }, [canvasDocument, onClose]); if (!canvasDocument?.body) { return null; } return /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(BlockEditPage, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Backdrop, { canvas: canvasDocument, element: topLevelElementDom, onClose: onClose })), canvasDocument.body); } function Backdrop({ canvas, element, onClose }) { const rect = (0,_use_element_rect__WEBPACK_IMPORTED_MODULE_4__.useElementRect)(element); const clipPath = element ? getRectPath(rect, canvas.defaultView) : undefined; const backdropStyle = { position: 'fixed', top: 0, left: 0, width: '100vw', height: '100vh', backgroundColor: 'rgba(0, 0, 0, 0.5)', zIndex: 999, pointerEvents: 'painted', cursor: 'pointer', clipPath }; const handleKeyDown = event => { if (event.key === 'Enter' || event.key === ' ') { event.preventDefault(); onClose(); } }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { style: backdropStyle, onClick: onClose, onKeyDown: handleKeyDown, role: "button", tabIndex: 0, "aria-label": (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_2__.__)('Exit component editing mode', 'elementor-pro') }); } function getRectPath(rect, viewport) { const { x, y, width, height } = rect; const { innerWidth: vw, innerHeight: vh } = viewport; const path = `path(evenodd, 'M 0 0 L ${vw} 0 L ${vw} ${vh} L 0 ${vh} Z M ${x} ${y} L ${x + width} ${y} L ${x + width} ${y + height} L ${x} ${y + height} L ${x} ${y} Z' )`; return path.replace(/\s{2,}/g, ' '); } /** * when switching to another document id, we get a document handler when hovering * this functionality originates in Pro, and is intended for editing templates, e.g. header/footer * in components we don't want that, so the easy way out is to prevent it of being displayed via a CSS rule */ function BlockEditPage() { const blockV3DocumentHandlesStyles = ` .elementor-editor-active { & .elementor-section-wrap.ui-sortable { display: contents; } & *[data-editable-elementor-document]:not(.elementor-edit-mode):hover { & .elementor-document-handle:not(.elementor-document-save-back-handle) { display: none; &::before, & .elementor-document-handle__inner { display: none; } } } } `; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("style", { "data-e-style-id": "e-block-v3-document-handles-styles" }, blockV3DocumentHandlesStyles); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/edit-component/edit-component.tsx": /*!***********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/edit-component/edit-component.tsx ***! \***********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ EditComponent: function() { return /* binding */ EditComponent; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../consts */ "./packages/packages/pro/editor-components-extended/src/consts.ts"); /* harmony import */ var _hooks_use_navigate_back__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../hooks/use-navigate-back */ "./packages/packages/pro/editor-components-extended/src/hooks/use-navigate-back.ts"); /* harmony import */ var _store_actions_reset_sanitized_components__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../store/actions/reset-sanitized-components */ "./packages/packages/pro/editor-components-extended/src/store/actions/reset-sanitized-components.ts"); /* harmony import */ var _store_actions_update_current_component__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/actions/update-current-component */ "./packages/packages/pro/editor-components-extended/src/store/actions/update-current-component.ts"); /* harmony import */ var _component_modal__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./component-modal */ "./packages/packages/pro/editor-components-extended/src/components/edit-component/component-modal.tsx"); function EditComponent() { const currentComponentId = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useCurrentComponentId)(); useHandleDocumentSwitches(); const navigateBack = (0,_hooks_use_navigate_back__WEBPACK_IMPORTED_MODULE_7__.useNavigateBack)(); const onClose = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_5__.throttle)(navigateBack, 100); const topLevelElementDom = useComponentDOMElement(currentComponentId ?? undefined); if (!currentComponentId) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_component_modal__WEBPACK_IMPORTED_MODULE_10__.ComponentModal, { topLevelElementDom: topLevelElementDom, onClose: onClose }); } function useHandleDocumentSwitches() { const documentsManager = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.getV1DocumentsManager)(); const currentComponentId = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useCurrentComponentId)(); const path = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_4__.__useSelector)(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.selectPath); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { return (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__.__privateListenTo)((0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__.commandEndEvent)('editor/documents/open'), () => { const nextDocument = documentsManager.getCurrent(); if (nextDocument.id === currentComponentId) { return; } if (currentComponentId) { _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.apiClient.unlockComponent(currentComponentId); } (0,_store_actions_reset_sanitized_components__WEBPACK_IMPORTED_MODULE_8__.resetSanitizedComponents)(); const isComponent = nextDocument.config.type === _consts__WEBPACK_IMPORTED_MODULE_6__.COMPONENT_DOCUMENT_TYPE; if (!isComponent) { (0,_store_actions_update_current_component__WEBPACK_IMPORTED_MODULE_9__.updateCurrentComponent)({ path: [], currentComponentId: null }); return; } (0,_store_actions_update_current_component__WEBPACK_IMPORTED_MODULE_9__.updateCurrentComponent)({ path: getUpdatedComponentPath(path, nextDocument), currentComponentId: nextDocument.id }); }); }, [path, documentsManager, currentComponentId]); } function getUpdatedComponentPath(path, nextDocument) { const componentIndex = path.findIndex(({ componentId }) => componentId === nextDocument.id); if (componentIndex >= 0) { // When exiting the editing of a nested component - we in fact go back a step // so we need to make sure the path is cleaned up of any newer items // By doing it with the slice and not a simple pop() - we could jump to any component in the path and make sure it becomes the current one return path.slice(0, componentIndex + 1); } const instanceId = nextDocument?.container.view?.el?.dataset.id; const instanceTitle = getInstanceTitle(instanceId, path); return [...path, { instanceId, instanceTitle, componentId: nextDocument.id }]; } function getInstanceTitle(instanceId, path) { if (!instanceId) { return undefined; } const documentsManager = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.getV1DocumentsManager)(); const parentDocId = path.at(-1)?.componentId ?? documentsManager.getInitialId(); const parentDoc = documentsManager.get(parentDocId); const parentContainer = parentDoc?.container; const widget = parentContainer?.children?.findRecursive?.(container => container.id === instanceId); const editorSettings = widget?.model?.get?.('editor_settings'); return editorSettings?.title; } function useComponentDOMElement(id) { const { componentContainerDomElement, topLevelElementDom } = getComponentDOMElements(id); const [currentElementDom, setCurrentElementDom] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(topLevelElementDom); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { setCurrentElementDom(topLevelElementDom); }, [topLevelElementDom]); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (!componentContainerDomElement) { return; } const mutationObserver = new MutationObserver(() => { const newElementDom = componentContainerDomElement.children[0]; setCurrentElementDom(newElementDom); }); mutationObserver.observe(componentContainerDomElement, { childList: true }); return () => { mutationObserver.disconnect(); }; }, [componentContainerDomElement]); return currentElementDom; } function getComponentDOMElements(id) { if (!id) { return { componentContainerDomElement: null, topLevelElementDom: null }; } const documentsManager = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.getV1DocumentsManager)(); const currentComponent = documentsManager.get(id); const componentContainer = currentComponent?.container; const componentContainerDomElement = componentContainer?.view?.el?.children?.[0] ?? null; const topLevelElementDom = componentContainerDomElement?.children[0] ?? null; return { componentContainerDomElement, topLevelElementDom }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/edit-component/use-canvas-document.ts": /*!***************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/edit-component/use-canvas-document.ts ***! \***************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useCanvasDocument: function() { return /* binding */ useCanvasDocument; } /* harmony export */ }); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__); function useCanvasDocument() { return (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__.__privateUseListenTo)((0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__.commandEndEvent)('editor/documents/attach-preview'), () => (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__.getCanvasIframeDocument)()); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/edit-component/use-element-rect.ts": /*!************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/edit-component/use-element-rect.ts ***! \************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useElementRect: function() { return /* binding */ useElementRect; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_1__); function useElementRect(element) { const [rect, setRect] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(new DOMRect(0, 0, 0, 0)); const onChange = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_1__.throttle)(() => { setRect(element?.getBoundingClientRect() ?? new DOMRect(0, 0, 0, 0)); }, 20, true); useScrollListener({ element, onChange }); useResizeListener({ element, onChange }); useMutationsListener({ element, onChange }); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => () => { onChange.cancel(); }, [onChange]); return rect; } function useScrollListener({ element, onChange }) { (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (!element) { return; } const win = element.ownerDocument?.defaultView; win?.addEventListener('scroll', onChange, { passive: true }); return () => { win?.removeEventListener('scroll', onChange); }; }, [element, onChange]); } function useResizeListener({ element, onChange }) { (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (!element) { return; } const resizeObserver = new ResizeObserver(onChange); resizeObserver.observe(element); const win = element.ownerDocument?.defaultView; win?.addEventListener('resize', onChange, { passive: true }); return () => { resizeObserver.disconnect(); win?.removeEventListener('resize', onChange); }; }, [element, onChange]); } function useMutationsListener({ element, onChange }) { (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (!element) { return; } const mutationObserver = new MutationObserver(onChange); mutationObserver.observe(element, { childList: true, subtree: true }); return () => { mutationObserver.disconnect(); }; }, [element, onChange]); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/instance-editing-panel/instance-editing-panel.tsx": /*!***************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/instance-editing-panel/instance-editing-panel.tsx ***! \***************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ExtendedInstanceEditingPanel: function() { return /* binding */ ExtendedInstanceEditingPanel; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); function ExtendedInstanceEditingPanel() { const { canEdit } = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useComponentsPermissions)(); const data = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useInstancePanelData)(); if (!data) { return null; } const { componentId, component, overrides, overridableProps, groups, isEmpty, componentInstanceId } = data; /* translators: %s: component name. */ const panelTitle = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Edit %s', 'elementor-pro').replace('%s', component.name); const handleEditComponent = () => (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.switchToComponent)(componentId, componentInstanceId); const actions = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Stack, { direction: "row", gap: 0.5 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.DetachAction, { componentInstanceId: componentInstanceId, componentId: componentId }), canEdit ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.EditComponentAction, { label: panelTitle, onClick: handleEditComponent, icon: _elementor_icons__WEBPACK_IMPORTED_MODULE_2__.PencilIcon }) : null); return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_3__.Box, { "data-testid": "instance-editing-panel", sx: { height: '100%' } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.ComponentInstanceProvider, { componentId: componentId, overrides: overrides, overridableProps: overridableProps }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.InstancePanelHeader, { componentName: component.name, actions: actions }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.InstancePanelBody, { groups: groups, isEmpty: isEmpty, emptyState: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.InstanceEmptyState, { onEditComponent: canEdit ? handleEditComponent : undefined }), componentInstanceId: componentInstanceId }))); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/load-template-components.tsx": /*!******************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/load-template-components.tsx ***! \******************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ LoadTemplateComponents: function() { return /* binding */ LoadTemplateComponents; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_templates_extended__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-templates-extended */ "@elementor/editor-templates-extended"); /* harmony import */ var _elementor_editor_templates_extended__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_templates_extended__WEBPACK_IMPORTED_MODULE_2__); const LoadTemplateComponents = () => { if ((0,_elementor_editor_templates_extended__WEBPACK_IMPORTED_MODULE_2__.isCoreHandlingTemplateStyles)()) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LoadTemplateComponentsInternal, null); }; function LoadTemplateComponentsInternal() { const templates = (0,_elementor_editor_templates_extended__WEBPACK_IMPORTED_MODULE_2__.useLoadedTemplates)(); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.loadComponentsAssets)(templates.flatMap(elements => elements ?? [])); }, [templates]); return null; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/indicator.tsx": /*!*********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/overridable-props/indicator.tsx ***! \*********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Indicator: function() { return /* binding */ Indicator; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/icons */ "@elementor/icons"); /* harmony import */ var _elementor_icons__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const SIZE = 'tiny'; const IconContainer = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)((0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box))` pointer-events: none; opacity: 0; transition: opacity 0.2s ease-in-out; & > svg { position: absolute; top: 50%; left: 50%; transform: translate( -50%, -50% ); width: 10px; height: 10px; fill: ${({ theme }) => theme.palette.primary.contrastText}; stroke: ${({ theme }) => theme.palette.primary.contrastText}; stroke-width: 2px; } `; const Content = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.styled)((0,_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Box))` position: relative; display: flex; align-items: center; justify-content: center; cursor: pointer; width: 16px; height: 16px; margin-inline: ${({ theme }) => theme.spacing(0.5)}; &:before { content: ''; display: block; position: absolute; top: 50%; left: 50%; transform: translate( -50%, -50% ) rotate( 45deg ); width: 5px; height: 5px; border-radius: 1px; background-color: ${({ theme }) => theme.palette.primary.main}; transition: all 0.1s ease-in-out; } &:hover, &.enlarged { &:before { width: 12px; height: 12px; border-radius: 2px; } .icon { opacity: 1; } } `; const Indicator = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(({ isOpen, isOverridable, ...props }, ref) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Content, _extends({ role: "button", ref: ref }, props, { className: isOpen || isOverridable ? 'enlarged' : '', "aria-label": isOverridable ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Overridable property', 'elementor-pro') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Make prop overridable', 'elementor-pro') }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(IconContainer, { className: "icon" }, isOverridable ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.CheckIcon, { fontSize: SIZE }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_icons__WEBPACK_IMPORTED_MODULE_1__.PlusIcon, { fontSize: SIZE })))); /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-control.tsx": /*!************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-control.tsx ***! \************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ OverridablePropControl: function() { return /* binding */ OverridablePropControl; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-controls */ "@elementor/editor-controls"); /* harmony import */ var _elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-editing-panel */ "@elementor/editor-editing-panel"); /* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../consts */ "./packages/packages/pro/editor-components-extended/src/consts.ts"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function OverridablePropControl({ OriginalControl, ...props }) { const { elementType } = (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_3__.useElement)(); const { value, bind, setValue, placeholder, ...propContext } = (0,_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.useBoundProp)(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.componentOverridablePropTypeUtil); const componentId = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useCurrentComponentId)(); const overridableProps = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useOverridableProps)(componentId); const filteredReplacements = (0,_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.getControlReplacements)().filter(r => !r.id || r.id !== _consts__WEBPACK_IMPORTED_MODULE_4__.OVERRIDABLE_PROP_REPLACEMENT_ID); if (!componentId) { return null; } if (!value?.override_key) { throw new Error('Override key is required'); } const isComponentInstance = elementType.key === 'e-component'; const overridablePropData = overridableProps?.props?.[value.override_key]; const setOverridableValue = newValue => { const propValue = { ...value, origin_value: newValue[bind] }; setValue(propValue); if (!isComponentInstance) { (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.updateOverridableProp)(componentId, propValue, overridablePropData?.originPropFields); } }; const defaultPropType = elementType.propsSchema[bind]; const overridePropType = overridablePropData ? (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.getPropTypeForComponentOverride)(overridablePropData) : undefined; const resolvedPropType = overridePropType ?? defaultPropType; if (!resolvedPropType) { return null; } const propType = (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_3__.createTopLevelObjectType)({ schema: { [bind]: resolvedPropType } }); const propValue = isComponentInstance ? (value.origin_value?.value).override_value : value.origin_value; const objectPlaceholder = placeholder ? { [bind]: placeholder } : undefined; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.OverridablePropProvider, { value: value }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.PropProvider, _extends({}, propContext, { propType: propType, setValue: setOverridableValue, value: { [bind]: propValue }, placeholder: objectPlaceholder }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.PropKeyProvider, { bind: bind }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.ControlReplacementsProvider, { replacements: filteredReplacements }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ControlWithReplacements, { OriginalControl: OriginalControl, props: props }))))); } function ControlWithReplacements({ OriginalControl, props }) { const { ControlToRender, isReplaced } = (0,_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.useControlReplacement)(OriginalControl); if (isReplaced) { const ReplacementControl = ControlToRender; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ReplacementControl, _extends({}, props, { OriginalControl: OriginalControl })); } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(OriginalControl, props); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-form.tsx": /*!*********************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-form.tsx ***! \*********************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ OverridablePropForm: function() { return /* binding */ OverridablePropForm; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-ui */ "@elementor/editor-ui"); /* harmony import */ var _elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _utils_validate_prop_label__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./utils/validate-prop-label */ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/utils/validate-prop-label.ts"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } const SIZE = 'tiny'; const DEFAULT_GROUP = { value: null, label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Default', 'elementor-pro') }; function OverridablePropForm({ onSubmit, groups, currentValue, existingLabels = [], sx }) { const selectGroups = groups?.length ? groups : [DEFAULT_GROUP]; const [propLabel, setPropLabel] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(currentValue?.label ?? null); const [group, setGroup] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(currentValue?.groupId ?? selectGroups[0]?.value ?? null); const [error, setError] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null); const name = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Name', 'elementor-pro'); const groupName = (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Group Name', 'elementor-pro'); const isCreate = currentValue === undefined; const title = isCreate ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Create new property', 'elementor-pro') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Update property', 'elementor-pro'); const ctaLabel = isCreate ? (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Create', 'elementor-pro') : (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Update', 'elementor-pro'); const handleSubmit = () => { const validationResult = (0,_utils_validate_prop_label__WEBPACK_IMPORTED_MODULE_4__.validatePropLabel)(propLabel ?? '', existingLabels, currentValue?.label); if (!validationResult.isValid) { setError(validationResult.errorMessage); return; } onSubmit({ label: propLabel ?? '', group }); }; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.Form, { onSubmit: handleSubmit, "data-testid": "overridable-prop-form" }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, { alignItems: "start", sx: { width: '268px', ...sx } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, { direction: "row", alignItems: "center", py: 1, px: 1.5, sx: { columnGap: 0.5, borderBottom: '1px solid', borderColor: 'divider', width: '100%', mb: 1.5 } }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Typography, { variant: "caption", sx: { color: 'text.primary', fontWeight: '500', lineHeight: 1 } }, title)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Grid, { container: true, gap: 0.75, alignItems: "start", px: 1.5, mb: 1.5 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Grid, { item: true, xs: 12 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.FormLabel, { size: "tiny" }, name)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Grid, { item: true, xs: 12 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.TextField, { name: name, size: SIZE, fullWidth: true, autoFocus: true // eslint-disable-line jsx-a11y/no-autofocus -- ED-23316: primary field when exposing a property , placeholder: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Enter value', 'elementor-pro'), value: propLabel ?? '', onChange: e => { const newValue = e.target.value; setPropLabel(newValue); const validationResult = (0,_utils_validate_prop_label__WEBPACK_IMPORTED_MODULE_4__.validatePropLabel)(newValue, existingLabels, currentValue?.label); setError(validationResult.errorMessage); }, error: Boolean(error), helperText: error }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Grid, { container: true, gap: 0.75, alignItems: "start", px: 1.5, mb: 1.5 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Grid, { item: true, xs: 12 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.FormLabel, { size: "tiny" }, groupName)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Grid, { item: true, xs: 12 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Select, { name: groupName, size: SIZE, fullWidth: true, value: group ?? null, onChange: e => setGroup(e.target.value), displayEmpty: true, renderValue: selectedValue => { if (!selectedValue) { return selectGroups[0].label; } return selectGroups.find(({ value }) => value === selectedValue)?.label ?? selectedValue; } }, selectGroups.map(({ label: groupLabel, ...props }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_editor_ui__WEBPACK_IMPORTED_MODULE_1__.MenuListItem, _extends({ key: props.value }, props, { value: props.value ?? '' }), groupLabel))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Stack, { direction: "row", justifyContent: "flex-end", alignSelf: "end", mt: 1.5, py: 1, px: 1.5 }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_2__.Button, { type: "submit", disabled: !propLabel || Boolean(error), variant: "contained", color: "primary", size: "small" }, ctaLabel)))); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-indicator.tsx": /*!**************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-indicator.tsx ***! \**************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ Content: function() { return /* binding */ Content; }, /* harmony export */ OverridablePropIndicator: function() { return /* binding */ OverridablePropIndicator; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-controls */ "@elementor/editor-controls"); /* harmony import */ var _elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-editing-panel */ "@elementor/editor-editing-panel"); /* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @elementor/ui */ "@elementor/ui"); /* harmony import */ var _elementor_ui__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _store_actions_create_component_overridable_prop__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../store/actions/create-component-overridable-prop */ "./packages/packages/pro/editor-components-extended/src/store/actions/create-component-overridable-prop.ts"); /* harmony import */ var _store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../store/actions/delete-component-overridable-prop */ "./packages/packages/pro/editor-components-extended/src/store/actions/delete-component-overridable-prop.ts"); /* harmony import */ var _store_actions_update_overridable_prop_params__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../store/actions/update-overridable-prop-params */ "./packages/packages/pro/editor-components-extended/src/store/actions/update-overridable-prop-params.ts"); /* harmony import */ var _indicator__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./indicator */ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/indicator.tsx"); /* harmony import */ var _overridable_prop_form__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./overridable-prop-form */ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-form.tsx"); function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function OverridablePropIndicator() { const { propType } = (0,_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.useBoundProp)(); const componentId = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useCurrentComponentId)(); const overridableProps = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useSanitizeOverridableProps)(componentId); if (!isPropAllowed(propType) || !componentId || !overridableProps) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Content, { componentId: componentId, overridableProps: overridableProps }); } function Content({ componentId, overridableProps }) { const { element: { id: elementId }, elementType } = (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__.useElement)(); const { value, bind, propType, setValue: setElementOriginValue } = (0,_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.useBoundProp)(); const contextOverridableValue = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useOverridablePropValue)(); const componentInstanceElement = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useComponentInstanceElement)(); const { value: boundPropOverridableValue, setValue: setElementOverridableValue } = (0,_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.useBoundProp)(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.componentOverridablePropTypeUtil); const makePropOverridable = useUndoableMakePropOverridable({ setElementOverridableValue, setElementOriginValue }); /** * This is intended to handle custom layout controls, such as , which has nested within it * i.e. its bound prop value would be the one manipulated by the new thus won't be considered overridable */ const overridableValue = boundPropOverridableValue ?? contextOverridableValue; const popupState = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.usePopupState)({ variant: 'popover' }); const triggerProps = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.bindTrigger)(popupState); const popoverProps = (0,_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.bindPopover)(popupState); const { elType } = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_5__.getWidgetsCache)()?.[elementType.key] ?? { elType: 'widget' }; const handleSubmit = ({ label, group }) => { const matchingOverridableProp = overridableValue ? overridableProps?.props?.[overridableValue.override_key] : undefined; if (matchingOverridableProp) { // updating label / group of the existing overridable prop (0,_store_actions_update_overridable_prop_params__WEBPACK_IMPORTED_MODULE_11__.updateOverridablePropParams)({ componentId, overrideKey: matchingOverridableProp.overrideKey, label, groupId: group }); } else { // making the prop overridable for the first time const propTypeDefault = propType.default ?? {}; const elementOriginValue = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.resolveOverridePropValue)(overridableValue?.origin_value) ?? value ?? propTypeDefault; const componentOverridablePropConfig = { componentId, overrideKey: overridableValue?.override_key ?? null, elementId: componentInstanceElement?.element.id ?? elementId, label, groupId: group, propKey: bind, elType: elType ?? 'widget', widgetType: componentInstanceElement?.elementType.key ?? elementType.key, originValue: elementOriginValue, source: 'user' }; makePropOverridable({ componentOverridablePropConfig, elementOriginValue }); } popupState.close(); }; const overridableConfig = overridableValue ? (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.getOverridableProp)({ componentId, overrideKey: overridableValue.override_key }) : undefined; return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Tooltip, { placement: "top", title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('Override Property', 'elementor-pro') }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_indicator__WEBPACK_IMPORTED_MODULE_12__.Indicator, _extends({}, triggerProps, { isOpen: !!popoverProps.open, isOverridable: !!overridableValue }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_elementor_ui__WEBPACK_IMPORTED_MODULE_7__.Popover, _extends({ disableScrollLock: true, anchorOrigin: { vertical: 'bottom', horizontal: 'right' }, transformOrigin: { vertical: 'top', horizontal: 'right' }, PaperProps: { sx: { my: 2.5 } } }, popoverProps), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_overridable_prop_form__WEBPACK_IMPORTED_MODULE_13__.OverridablePropForm, { onSubmit: handleSubmit, groups: overridableProps?.groups.order.map(groupId => ({ value: groupId, label: overridableProps.groups.items[groupId].label })), existingLabels: Object.values(overridableProps?.props ?? {}).map(prop => prop.label), currentValue: overridableConfig }))); } function isPropAllowed(propType) { return propType.meta.overridable !== false; } function useUndoableMakePropOverridable({ setElementOverridableValue, setElementOriginValue }) { return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => { const makePropOverridable = ({ componentOverridablePropConfig, elementOriginValue }) => { const overridableProp = (0,_store_actions_create_component_overridable_prop__WEBPACK_IMPORTED_MODULE_9__.createComponentOverridableProp)(componentOverridablePropConfig); setElementOverridableValue({ override_key: overridableProp.overrideKey, origin_value: elementOriginValue }, undefined, { withHistory: false }); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__.setDocumentModifiedStatus)(true); return { createdOverridableProp: overridableProp }; }; return (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_6__.undoable)({ do: ({ componentOverridablePropConfig, elementOriginValue }) => { return makePropOverridable({ componentOverridablePropConfig, elementOriginValue }); }, undo: ({ componentOverridablePropConfig, elementOriginValue }, { createdOverridableProp }) => { (0,_store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_10__.deleteComponentOverridableProp)({ componentId: componentOverridablePropConfig.componentId, propKey: createdOverridableProp.overrideKey, source: 'system', revertElementOverridable: false }); setElementOriginValue(elementOriginValue, undefined, { withHistory: false }); }, redo: ({ elementOriginValue, componentOverridablePropConfig }, { createdOverridableProp }) => { return makePropOverridable({ componentOverridablePropConfig: { ...componentOverridablePropConfig, overrideKey: createdOverridableProp.overrideKey }, elementOriginValue }); } }, { title: ({ componentOverridablePropConfig }) => componentOverridablePropConfig.label, subtitle: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_8__.__)('property exposed', 'elementor-pro') }); }, [setElementOriginValue, setElementOverridableValue]); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/utils/validate-prop-label.ts": /*!************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/components/overridable-props/utils/validate-prop-label.ts ***! \************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ERROR_MESSAGES: function() { return /* binding */ ERROR_MESSAGES; }, /* harmony export */ validatePropLabel: function() { return /* binding */ validatePropLabel; } /* harmony export */ }); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__); const ERROR_MESSAGES = { EMPTY_NAME: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Property name is required', 'elementor-pro'), DUPLICATE_NAME: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_0__.__)('Property name already exists', 'elementor-pro') }; function validatePropLabel(label, existingLabels, currentLabel) { const trimmedLabel = label.trim(); if (!trimmedLabel) { return { isValid: false, errorMessage: ERROR_MESSAGES.EMPTY_NAME }; } const normalizedLabel = trimmedLabel.toLowerCase(); const normalizedCurrentLabel = currentLabel?.trim().toLowerCase(); const isDuplicate = existingLabels.some(existingLabel => { const normalizedExisting = existingLabel.trim().toLowerCase(); if (normalizedCurrentLabel && normalizedExisting === normalizedCurrentLabel) { return false; } return normalizedExisting === normalizedLabel; }); if (isDuplicate) { return { isValid: false, errorMessage: ERROR_MESSAGES.DUPLICATE_NAME }; } return { isValid: true, errorMessage: null }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/consts.ts": /*!************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/consts.ts ***! \************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ COMPONENTS_FEATURE_NAME: function() { return /* binding */ COMPONENTS_FEATURE_NAME; }, /* harmony export */ COMPONENTS_MCP_INSTRUCTIONS: function() { return /* binding */ COMPONENTS_MCP_INSTRUCTIONS; }, /* harmony export */ COMPONENT_DOCUMENT_TYPE: function() { return /* binding */ COMPONENT_DOCUMENT_TYPE; }, /* harmony export */ OVERRIDABLE_PROP_REPLACEMENT_ID: function() { return /* binding */ OVERRIDABLE_PROP_REPLACEMENT_ID; } /* harmony export */ }); const OVERRIDABLE_PROP_REPLACEMENT_ID = 'overridable-prop'; const COMPONENTS_FEATURE_NAME = 'atomic-components'; const COMPONENT_DOCUMENT_TYPE = 'elementor_component'; const COMPONENTS_MCP_INSTRUCTIONS = `Elementor Editor Components MCP - Tools for creating and managing reusable components. Components are reusable blocks of content that can be used multiple times across the pages, its a widget which contains a set of elements and styles. Before using the tools, you must fetch the list of components from the resource (as mentioned in the required resources), if you see something that might fit, get the component instance. Then you can save the component instance as a new component (Name is unique so do not repeat it). If you see that there is a component that might match the needs of the user, get the component, see if it's published and suggest the user to use it (but only if you are 100% sure on that). Ignore this If statement when the users asks to create a new component, you can only suggest it after the work is done.`; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/feature-guarded-injections.tsx": /*!*********************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/feature-guarded-injections.tsx ***! \*********************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ FeatureGuardedComponentPropertiesPanel: function() { return /* binding */ FeatureGuardedComponentPropertiesPanel; }, /* harmony export */ FeatureGuardedLogicInjections: function() { return /* binding */ FeatureGuardedLogicInjections; }, /* harmony export */ FeatureGuardedTopInjections: function() { return /* binding */ FeatureGuardedTopInjections; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_license_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/license-api */ "@elementor/license-api"); /* harmony import */ var _elementor_license_api__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_license_api__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _components_component_properties_panel_component_properties_panel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/component-properties-panel/component-properties-panel */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-panel.tsx"); /* harmony import */ var _components_create_component_form_create_component_form__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/create-component-form/create-component-form */ "./packages/packages/pro/editor-components-extended/src/components/create-component-form/create-component-form.tsx"); /* harmony import */ var _components_edit_component_edit_component__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/edit-component/edit-component */ "./packages/packages/pro/editor-components-extended/src/components/edit-component/edit-component.tsx"); /* harmony import */ var _components_load_template_components__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/load-template-components */ "./packages/packages/pro/editor-components-extended/src/components/load-template-components.tsx"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./consts */ "./packages/packages/pro/editor-components-extended/src/consts.ts"); /* harmony import */ var _sync_sanitize_overridable_props__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./sync/sanitize-overridable-props */ "./packages/packages/pro/editor-components-extended/src/sync/sanitize-overridable-props.ts"); function FeatureGuardedComponentPropertiesPanel() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FeatureGuard, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_component_properties_panel_component_properties_panel__WEBPACK_IMPORTED_MODULE_2__.panel.component, null)); } function FeatureGuardedTopInjections() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FeatureGuard, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_create_component_form_create_component_form__WEBPACK_IMPORTED_MODULE_3__.CreateComponentForm, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_edit_component_edit_component__WEBPACK_IMPORTED_MODULE_4__.EditComponent, null)); } function FeatureGuardedLogicInjections() { return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(FeatureGuard, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_sync_sanitize_overridable_props__WEBPACK_IMPORTED_MODULE_7__.SanitizeOverridableProps, null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_components_load_template_components__WEBPACK_IMPORTED_MODULE_5__.LoadTemplateComponents, null)); } function FeatureGuard({ children }) { const { data: isFeatureEnabled, isFetched: isFeatureFetched } = (0,_elementor_license_api__WEBPACK_IMPORTED_MODULE_1__.useHasFeature)(_consts__WEBPACK_IMPORTED_MODULE_6__.COMPONENTS_FEATURE_NAME); if (isFeatureFetched && !isFeatureEnabled) { return null; } return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, children); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/hooks/use-navigate-back.ts": /*!*****************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/hooks/use-navigate-back.ts ***! \*****************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ useNavigateBack: function() { return /* binding */ useNavigateBack; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_3__); function useNavigateBack() { const path = (0,_elementor_store__WEBPACK_IMPORTED_MODULE_3__.__useSelector)(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.selectPath); const documentsManager = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.getV1DocumentsManager)(); return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(() => { const { componentId: prevComponentId, instanceId: prevComponentInstanceId } = path.at(-2) ?? {}; if (prevComponentId && prevComponentInstanceId) { (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.switchToComponent)(prevComponentId, prevComponentInstanceId); return; } (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.switchToComponent)(documentsManager.getInitialId()); }, [path, documentsManager]); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/init.ts": /*!**********************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/init.ts ***! \**********************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ init: function() { return /* binding */ init; } /* harmony export */ }); /* harmony import */ var _elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/core-adapter-utils */ "@elementor/core-adapter-utils"); /* harmony import */ var _elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_license_api__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/license-api */ "@elementor/license-api"); /* harmony import */ var _elementor_license_api__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_license_api__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./consts */ "./packages/packages/pro/editor-components-extended/src/consts.ts"); /* harmony import */ var _initialize_editor_components_extended__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./initialize-editor-components-extended */ "./packages/packages/pro/editor-components-extended/src/initialize-editor-components-extended.ts"); async function init() { // TODO: remove version check after 4.2.0 version if (!(0,_elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_0__.isCoreAtLeast)('4.0.0')) { return; } // Temporary workaround: register locations-based injections before async work, // since locations snapshots injections on first render. // Move this back into the regular init flow once locations updates become reactive. (0,_initialize_editor_components_extended__WEBPACK_IMPORTED_MODULE_3__.initComponentLocations)(); const { isFeatureEnabled, isLicenseExpired } = await getTierFeaturesAndLicenseStatus(); if (!isFeatureEnabled) { return; } (0,_initialize_editor_components_extended__WEBPACK_IMPORTED_MODULE_3__.initEditorComponentsExtended)({ isLicenseExpired }); } async function getTierFeaturesAndLicenseStatus() { const [featuresPromise, licenseStatusPromise] = await Promise.allSettled([(0,_elementor_license_api__WEBPACK_IMPORTED_MODULE_1__.fetchTierFeatures)(), (0,_elementor_license_api__WEBPACK_IMPORTED_MODULE_1__.fetchLicenseStatus)()]); const features = featuresPromise.status === 'fulfilled' ? featuresPromise.value : []; const licenseStatus = licenseStatusPromise.status === 'fulfilled' ? licenseStatusPromise.value : false; return { isFeatureEnabled: features.includes(_consts__WEBPACK_IMPORTED_MODULE_2__.COMPONENTS_FEATURE_NAME), isLicenseExpired: licenseStatus }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/initialize-editor-components-extended.ts": /*!*******************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/initialize-editor-components-extended.ts ***! \*******************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ initComponentLocations: function() { return /* binding */ initComponentLocations; }, /* harmony export */ initEditorComponentsExtended: function() { return /* binding */ initEditorComponentsExtended; } /* harmony export */ }); /* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor */ "@elementor/editor"); /* harmony import */ var _elementor_editor__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-controls */ "@elementor/editor-controls"); /* harmony import */ var _elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-editing-panel */ "@elementor/editor-editing-panel"); /* harmony import */ var _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_editor_elements_panel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/editor-elements-panel */ "@elementor/editor-elements-panel"); /* harmony import */ var _elementor_editor_elements_panel__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements_panel__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @elementor/editor-panels */ "@elementor/editor-panels"); /* harmony import */ var _elementor_editor_panels__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_8__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__); /* harmony import */ var _components_component_panel_header_component_panel_header__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./components/component-panel-header/component-panel-header */ "./packages/packages/pro/editor-components-extended/src/components/component-panel-header/component-panel-header.tsx"); /* harmony import */ var _components_component_properties_panel_component_properties_panel__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./components/component-properties-panel/component-properties-panel */ "./packages/packages/pro/editor-components-extended/src/components/component-properties-panel/component-properties-panel.tsx"); /* harmony import */ var _components_components_tab_components__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./components/components-tab/components */ "./packages/packages/pro/editor-components-extended/src/components/components-tab/components.tsx"); /* harmony import */ var _components_instance_editing_panel_instance_editing_panel__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./components/instance-editing-panel/instance-editing-panel */ "./packages/packages/pro/editor-components-extended/src/components/instance-editing-panel/instance-editing-panel.tsx"); /* harmony import */ var _components_overridable_props_overridable_prop_control__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./components/overridable-props/overridable-prop-control */ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-control.tsx"); /* harmony import */ var _components_overridable_props_overridable_prop_indicator__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./components/overridable-props/overridable-prop-indicator */ "./packages/packages/pro/editor-components-extended/src/components/overridable-props/overridable-prop-indicator.tsx"); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./consts */ "./packages/packages/pro/editor-components-extended/src/consts.ts"); /* harmony import */ var _feature_guarded_injections__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./feature-guarded-injections */ "./packages/packages/pro/editor-components-extended/src/feature-guarded-injections.tsx"); /* harmony import */ var _mcp__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./mcp */ "./packages/packages/pro/editor-components-extended/src/mcp/index.ts"); /* harmony import */ var _shortcuts_create_component_shortcut__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./shortcuts/create-component-shortcut */ "./packages/packages/pro/editor-components-extended/src/shortcuts/create-component-shortcut.ts"); /* harmony import */ var _sync_before_save__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./sync/before-save */ "./packages/packages/pro/editor-components-extended/src/sync/before-save.ts"); /* harmony import */ var _sync_cleanup_overridable_props_on_delete__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ./sync/cleanup-overridable-props-on-delete */ "./packages/packages/pro/editor-components-extended/src/sync/cleanup-overridable-props-on-delete.ts"); /* harmony import */ var _sync_handle_component_edit_mode_container__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./sync/handle-component-edit-mode-container */ "./packages/packages/pro/editor-components-extended/src/sync/handle-component-edit-mode-container.ts"); /* harmony import */ var _sync_prevent_non_atomic_nesting__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ./sync/prevent-non-atomic-nesting */ "./packages/packages/pro/editor-components-extended/src/sync/prevent-non-atomic-nesting.ts"); /* harmony import */ var _sync_revert_overridables_on_copy_or_duplicate__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ./sync/revert-overridables-on-copy-or-duplicate */ "./packages/packages/pro/editor-components-extended/src/sync/revert-overridables-on-copy-or-duplicate.ts"); const PRIORITY = 1; function initEditorComponentsExtended({ isLicenseExpired }) { (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__.registerEditingPanelReplacement)({ id: 'extended-component-instance-edit-panel', priority: PRIORITY, condition: (_, elementType) => elementType.key === 'e-component', component: _components_instance_editing_panel_instance_editing_panel__WEBPACK_IMPORTED_MODULE_13__.ExtendedInstanceEditingPanel }); (0,_elementor_editor_elements_panel__WEBPACK_IMPORTED_MODULE_5__.registerTab)({ id: 'components', label: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_9__.__)('Components', 'elementor-pro'), component: _components_components_tab_components__WEBPACK_IMPORTED_MODULE_12__.ExtendedComponents, priority: PRIORITY }); (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_8__.registerDataHook)('dependency', 'editor/documents/close', args => { const document = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_3__.getV1CurrentDocument)(); if (document.config.type === _consts__WEBPACK_IMPORTED_MODULE_16__.COMPONENT_DOCUMENT_TYPE) { args.mode = 'autosave'; } return true; }); (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_8__.registerDataHook)('after', 'preview/drop', _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.onElementDrop); window.elementorCommon.__beforeSave = _sync_before_save__WEBPACK_IMPORTED_MODULE_20__.beforeSave; (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__.injectIntoPanelHeaderTop)({ id: 'component-panel-header', component: _components_component_panel_header_component_panel_header__WEBPACK_IMPORTED_MODULE_10__.ComponentPanelHeader, options: { overwrite: true } }); (0,_elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__.registerFieldIndicator)({ fieldType: _elementor_editor_editing_panel__WEBPACK_IMPORTED_MODULE_4__.FIELD_TYPE.SETTINGS, id: 'component-overridable-prop', priority: 1, indicator: _components_overridable_props_overridable_prop_indicator__WEBPACK_IMPORTED_MODULE_15__.OverridablePropIndicator }); (0,_elementor_editor_controls__WEBPACK_IMPORTED_MODULE_2__.registerControlReplacement)({ id: _consts__WEBPACK_IMPORTED_MODULE_16__.OVERRIDABLE_PROP_REPLACEMENT_ID, component: _components_overridable_props_overridable_prop_control__WEBPACK_IMPORTED_MODULE_14__.OverridablePropControl, condition: ({ value }) => _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.componentOverridablePropTypeUtil.isValid(value) }); (0,_sync_cleanup_overridable_props_on_delete__WEBPACK_IMPORTED_MODULE_21__.initCleanupOverridablePropsOnDelete)(); (0,_sync_prevent_non_atomic_nesting__WEBPACK_IMPORTED_MODULE_23__.initNonAtomicNestingPrevention)(); (0,_sync_handle_component_edit_mode_container__WEBPACK_IMPORTED_MODULE_22__.initHandleComponentEditModeContainer)(); (0,_sync_revert_overridables_on_copy_or_duplicate__WEBPACK_IMPORTED_MODULE_24__.initRevertOverridablesOnCopyOrDuplicate)(); if (!isLicenseExpired) { (0,_shortcuts_create_component_shortcut__WEBPACK_IMPORTED_MODULE_19__.initCreateComponentShortcut)(); } (0,_mcp__WEBPACK_IMPORTED_MODULE_18__.initMcp)((0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_6__.getMCPByDomain)('components', { instructions: _consts__WEBPACK_IMPORTED_MODULE_16__.COMPONENTS_MCP_INSTRUCTIONS })); } function initComponentLocations() { (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoTop)({ id: 'component-popups', component: _feature_guarded_injections__WEBPACK_IMPORTED_MODULE_17__.FeatureGuardedTopInjections, options: { overwrite: true } }); (0,_elementor_editor_panels__WEBPACK_IMPORTED_MODULE_7__.__registerPanel)({ id: _components_component_properties_panel_component_properties_panel__WEBPACK_IMPORTED_MODULE_11__.panel.id, component: _feature_guarded_injections__WEBPACK_IMPORTED_MODULE_17__.FeatureGuardedComponentPropertiesPanel }); (0,_elementor_editor__WEBPACK_IMPORTED_MODULE_0__.injectIntoLogic)({ id: 'components-logic-effects', component: _feature_guarded_injections__WEBPACK_IMPORTED_MODULE_17__.FeatureGuardedLogicInjections, options: { overwrite: true } }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/mcp/components-list-resource.ts": /*!**********************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/mcp/components-list-resource.ts ***! \**********************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ COMPONENTS_LIST_URI: function() { return /* binding */ COMPONENTS_LIST_URI; }, /* harmony export */ initComponentsListResource: function() { return /* binding */ initComponentsListResource; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/store */ "@elementor/store"); /* harmony import */ var _elementor_store__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_store__WEBPACK_IMPORTED_MODULE_1__); const COMPONENTS_LIST_URI = 'elementor://components/list'; function buildComponentsList() { const published = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getComponents() ?? []; const unpublished = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getUnpublishedComponents() ?? []; return [...published, ...unpublished]; } const initComponentsListResource = reg => { const { resource, sendResourceUpdated } = reg; resource('components-list', COMPONENTS_LIST_URI, { description: 'Live list of all reusable components (published and unpublished) with full component data.' }, () => ({ contents: [{ uri: COMPONENTS_LIST_URI, mimeType: 'application/json', text: JSON.stringify(buildComponentsList()) }] })); (0,_elementor_store__WEBPACK_IMPORTED_MODULE_1__.__subscribeWithSelector)(state => state[_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.SLICE_NAME], () => { sendResourceUpdated({ uri: COMPONENTS_LIST_URI }); }); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/mcp/index.ts": /*!***************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/mcp/index.ts ***! \***************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ initMcp: function() { return /* binding */ initMcp; } /* harmony export */ }); /* harmony import */ var _components_list_resource__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./components-list-resource */ "./packages/packages/pro/editor-components-extended/src/mcp/components-list-resource.ts"); /* harmony import */ var _manage_component_tool__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./manage-component-tool */ "./packages/packages/pro/editor-components-extended/src/mcp/manage-component-tool.ts"); function initMcp(reg) { const { setMCPDescription, waitForReady } = reg; setMCPDescription(`Components V4 MCP Server - Tools for creating and managing reusable components.`); waitForReady().then(() => { (0,_components_list_resource__WEBPACK_IMPORTED_MODULE_0__.initComponentsListResource)(reg); (0,_manage_component_tool__WEBPACK_IMPORTED_MODULE_1__.initManageComponentTool)(reg); }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/mcp/manage-component-tool.ts": /*!*******************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/mcp/manage-component-tool.ts ***! \*******************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ ERROR_MESSAGES: function() { return /* binding */ ERROR_MESSAGES; }, /* harmony export */ handleManageComponent: function() { return /* binding */ handleManageComponent; }, /* harmony export */ initManageComponentTool: function() { return /* binding */ initManageComponentTool; } /* harmony export */ }); /* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-canvas */ "@elementor/editor-canvas"); /* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _elementor_http_client__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @elementor/http-client */ "@elementor/http-client"); /* harmony import */ var _elementor_http_client__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_elementor_http_client__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @elementor/schema */ "@elementor/schema"); /* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_elementor_schema__WEBPACK_IMPORTED_MODULE_6__); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_7__); /* harmony import */ var _store_actions_create_unpublished_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../store/actions/create-unpublished-component */ "./packages/packages/pro/editor-components-extended/src/store/actions/create-unpublished-component.ts"); /* harmony import */ var _components_list_resource__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./components-list-resource */ "./packages/packages/pro/editor-components-extended/src/mcp/components-list-resource.ts"); const InputSchema = { action: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.enum(['save', 'get']).describe('The operation to perform: ' + '"get" - retrieve a specific component by UID; ' + '"save" - create a new component from an existing element.'), element_id: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().optional().describe('[Required for "save"] The unique identifier of the element to save as a component. ' + 'Use the "list-elements" tool to find available element IDs in the current document.'), component_name: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().optional().describe('[Required for "save"] The name for the new component. Should be descriptive and unique among existing components. Must be unique among all components.'), overridable_props: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.object({ props: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.record(_elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.object({ elementId: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().describe('The id of the child element that you want to override its settings'), propKey: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().describe('The property key of the child element that you want to override its settings (e.g., "text", "url", "tag"). To get the available propKeys for an element, use the "get-element-type-config" tool.'), label: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().describe('A unique, user-friendly display name for this property (e.g., "Hero Headline", "CTA Button Text"). Must be unique within the same component.'), group: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().optional().describe('Non unique, optional property grouping') })) }).optional().describe('[Optional for "save"] Overridable properties configuration. Specify which CHILD element properties can be customized. ' + 'Only elementId and propKey are required; To get the available propKeys for a child element you must use the "get-element-type-config" tool.'), groups: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.array(_elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string()).describe('[Optional for "save"] Property Groups, by order, unique values').optional(), component_uid: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().optional().describe('[Required for "get"] The unique identifier of the component to retrieve.') }; const OutputSchema = { message: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().optional().describe('Additional information about the operation result'), component_uid: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string().optional().describe('The unique identifier of the newly created component (only present on "save" success)'), component: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.object({ uid: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string(), name: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.string(), status: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.enum(['published', 'unpublished']), id: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.number().optional(), overridableProps: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.unknown().optional(), elements: _elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.array(_elementor_schema__WEBPACK_IMPORTED_MODULE_6__.z.any()).optional().describe('The elements of the component (only when component is unpublished)') }).optional().describe('The requested component data (only present on "get")') }; const ERROR_MESSAGES = { ELEMENT_NOT_FOUND: "Element not found. Use 'list-elements' to get valid element IDs.", ELEMENT_NOT_ONE_OF_TYPES: validTypes => `Element is not one of the following types: ${validTypes.join(', ')}`, ELEMENT_IS_LOCKED: 'Cannot save a locked element as a component.', COMPONENT_NOT_FOUND: uid => `Component with UID "${uid}" not found.`, MISSING_ELEMENT_ID: 'element_id is required for the "save" action.', MISSING_COMPONENT_NAME: 'component_name is required for the "save" action.', MISSING_COMPONENT_UID: 'component_uid is required for the "get" action.' }; const handleManageComponent = async params => { const { action } = params; switch (action) { case 'get': return handleGet(params); case 'save': return handleSave(params); } }; async function handleGet(params) { const { component_uid: componentUid } = params; if (!componentUid) { throw new Error(ERROR_MESSAGES.MISSING_COMPONENT_UID); } const found = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.componentsSelectors.getComponentByUid(componentUid); if (!found) { throw new Error(ERROR_MESSAGES.COMPONENT_NOT_FOUND(componentUid)); } const isPublished = 'id' in found; /** This block can be reused at version 4.2.0 with getComponentDocumentData function */ let elements; if (isPublished) { const documentManager = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_2__.getV1DocumentsManager)(); try { const document = await documentManager.request(found.id); elements = document?.elements; } catch { elements = undefined; } } /** End of the block */ return { status: 'ok', component: { uid: found.uid, name: found.name, status: isPublished ? 'published' : 'unpublished', id: isPublished ? found.id : undefined, overridableProps: found.overridableProps, elements } }; } async function handleSave(params) { const { groups = [], element_id: elementId, component_name: componentName, overridable_props: overridablePropsInput } = params; if (!elementId) { throw new Error(ERROR_MESSAGES.MISSING_ELEMENT_ID); } if (!componentName) { throw new Error(ERROR_MESSAGES.MISSING_COMPONENT_NAME); } const validElementTypes = getValidElementTypes(); const container = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__.getContainer)(elementId); if (!container) { throw new Error(ERROR_MESSAGES.ELEMENT_NOT_FOUND); } const elType = container.model.get('elType'); if (!validElementTypes.includes(elType)) { throw new Error(ERROR_MESSAGES.ELEMENT_NOT_ONE_OF_TYPES(validElementTypes)); } const element = container.model.toJSON({ remove: ['default'] }); if (element?.isLocked) { throw new Error(ERROR_MESSAGES.ELEMENT_IS_LOCKED); } const groupsWithDefaultGroup = groups.indexOf('Default') >= 0 ? [...groups] : ['Default', ...groups]; const propertyGroups = groupsWithDefaultGroup.map(groupName => ({ id: (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_7__.generateUniqueId)('group'), label: groupName, props: [] })); const overridableProps = overridablePropsInput ? enrichOverridableProps(overridablePropsInput, element, propertyGroups) : undefined; if (overridableProps) { updateElementDataWithOverridableProps(element, overridableProps); } const uid = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_7__.generateUniqueId)('component'); try { await _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.apiClient.validate({ items: [{ uid, title: componentName, elements: [element], settings: { overridable_props: overridableProps } }] }); } catch (error) { if (error instanceof _elementor_http_client__WEBPACK_IMPORTED_MODULE_5__.AxiosError) { throw new Error(error.response?.data.message); } throw new Error('Unknown error'); } await (0,_store_actions_create_unpublished_component__WEBPACK_IMPORTED_MODULE_8__.createUnpublishedComponent)({ name: componentName, element, eventData: null, uid, overridableProps, source: 'mcp_tool' }); return { status: 'ok', message: `Component "${componentName}" created successfully.`, component_uid: uid }; } function enrichOverridableProps(input, rootElement, propertyGroups) { const enrichedProps = {}; const enrichedGroups = {}; const defaultGroup = propertyGroups.find(g => g.label === 'Default'); if (!defaultGroup) { throw new Error('Internal mcp error: could not generate default group'); } Object.entries(input.props).forEach(([, prop]) => { const { elementId, propKey, label, group = 'Default' } = prop; const targetGroup = propertyGroups.find(g => g.label === group) || defaultGroup; const targetGroupId = targetGroup.id; const element = findElementById(rootElement, elementId); if (!element) { throw new Error(`Element with ID "${elementId}" not found in component`); } const elType = element.elType; const widgetType = element.widgetType || element.elType; // Validate that the propKey exists in the element's schema const elementType = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__.getElementType)(widgetType); if (!elementType) { throw new Error(`Element type "${widgetType}" is not atomic or does not have a settings schema. ` + `Cannot expose property "${propKey}" for element "${elementId}".`); } if (!elementType.propsSchema[propKey]) { const availableProps = Object.keys(elementType.propsSchema).join(', '); throw new Error(`Property "${propKey}" does not exist in element "${elementId}" (type: ${widgetType}). ` + `Available properties: ${availableProps}`); } const overrideKey = (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_7__.generateUniqueId)('prop'); const originValue = element.settings?.[propKey] ? element.settings[propKey] : elementType.propsSchema[propKey].default ?? null; if (!enrichedGroups[targetGroupId]) { enrichedGroups[targetGroupId] = { id: targetGroupId, label: targetGroup.label, props: [] }; } enrichedGroups[targetGroupId].props.push(overrideKey); enrichedProps[overrideKey] = { overrideKey, label, elementId, propKey, elType, widgetType, originValue, groupId: targetGroupId }; }); return { props: enrichedProps, groups: { items: enrichedGroups, order: propertyGroups.filter(g => enrichedGroups[g.id]).map(g => g.id) } }; } function updateElementDataWithOverridableProps(rootElement, overridableProps) { Object.values(overridableProps.props).forEach(prop => { const element = findElementById(rootElement, prop.elementId); if (!element || !element.settings) { return; } element.settings[prop.propKey] = { $$type: 'overridable', value: { override_key: prop.overrideKey, origin_value: prop.originValue } }; }); } function findElementById(root, targetId) { if (root.id === targetId) { return root; } if (root.elements) { for (const child of root.elements) { const found = findElementById(child, targetId); if (found) { return found; } } } return null; } function getValidElementTypes() { const types = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__.getWidgetsCache)(); if (!types) { return []; } return Object.entries(types).reduce((acc, [type, value]) => { if (!value.atomic_props_schema || !value.show_in_panel || value.elType === 'widget') { return acc; } acc.push(type); return acc; }, []); } const generatePrompt = () => { const prompt = (0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_4__.toolPrompts)('manage-component'); prompt.description(` Manage reusable components in the Elementor editor: retrieve a specific component or save an element as a new component. # **CRITICAL - Before any operation, read the resources** Always read all required resources before performing any action. # Actions ## "get" - Get a specific component Returns full details of a component including its overridable properties. Required: component_uid ## "save" - Save an element as a new component Creates a new reusable component from an existing element. Required: element_id, component_name Optional: overridable_props, groups # IMPORTANT - Before saving a new component **Always read [${_components_list_resource__WEBPACK_IMPORTED_MODULE_9__.COMPONENTS_LIST_URI}] first** to see existing components and avoid creating duplicates. Use "get" to inspect an existing component if you need to understand its structure. # When NOT to use "save" - Element is already a component (widgetType: 'e-component') - Element is locked - Element is not an atomic element (atomic_props_schema is not defined) - Element elType is a 'widget' # **REQUIRED RESOURCES (Must read before any operation)** 1. [${_components_list_resource__WEBPACK_IMPORTED_MODULE_9__.COMPONENTS_LIST_URI}] **MANDATORY** - Live list of all existing components. Always read this first to check for duplicates. 2. [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.DOCUMENT_STRUCTURE_URI}] **MANDATORY** - Required to understand the document structure and identify child elements for overridable properties. 3. [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.WIDGET_SCHEMA_URI}] **MANDATORY** - Required to understand which properties are available for each widget type. # Instructions for "save" - MUST FOLLOW IN ORDER ## Step 1: Check existing components 1. Read the [${_components_list_resource__WEBPACK_IMPORTED_MODULE_9__.COMPONENTS_LIST_URI}] resource to see all existing components 2. If a suitable component already exists, consider using it instead ## Step 2: Identify the Target Element 1. Read the [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.DOCUMENT_STRUCTURE_URI}] resource 2. Locate the element by its element_id 3. Verify the element type is valid, not locked, and not already a component ## Step 3: Define Overridable Properties Skip ONLY if the user explicitly requests no customizable properties. 1. **Identify Child Elements** via [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.DOCUMENT_STRUCTURE_URI}] 2. **Find Available Properties** via [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.WIDGET_SCHEMA_URI}] → atomic_props_schema - Use only top-level props (e.g., "text", "url", "tag", "size") 3. **Build the overridable_props object** with unique, user-friendly labels ## Step 4: Execute "save" Call with element_id, component_name, and optionally overridable_props and groups. # CONSTRAINTS - NEVER try to override properties of the parent element itself — ONLY child elements - NEVER use invalid propKeys — always verify against atomic_props_schema in [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.WIDGET_SCHEMA_URI}] - Element IDs must exist within the target element's children - The element being saved must not be inside another component `); prompt.parameter('action', `**MANDATORY** The operation to perform: - "get": Returns details of a specific component. Requires component_uid. - "save": Creates a new component from an element. Requires element_id and component_name.`); prompt.parameter('component_uid', `**Required for "get"** The unique identifier of the component to retrieve. Read the [${_components_list_resource__WEBPACK_IMPORTED_MODULE_9__.COMPONENTS_LIST_URI}] resource first to discover available component UIDs.`); prompt.parameter('element_id', `**Required for "save"** The unique identifier of the element to save as a component. Use the [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.DOCUMENT_STRUCTURE_URI}] resource to find available element IDs.`); prompt.parameter('component_name', `**Required for "save"** A descriptive name for the new component. Should be unique and clearly describe the component's purpose (e.g., "Hero Section", "Feature Card").`); prompt.parameter('overridable_props', `**Optional for "save"** Configuration for which child element properties can be customized in component instances. Structure: \`\`\`json { "props": { "": { "elementId": "", "propKey": "", "label": "" } } } \`\`\` To populate this correctly: 1. Use [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.DOCUMENT_STRUCTURE_URI}] to find child element IDs and their widgetType 2. Use [${_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.WIDGET_SCHEMA_URI}] to find the atomic_props_schema for each child element's widgetType 3. Only include properties you want to be customizable in component instances 4. Provide a unique, user-friendly label for each property`); prompt.example(` Get a specific component: \`\`\`json { "action": "get", "component_uid": "component-abc123" } \`\`\` Save without overridable properties: \`\`\`json { "action": "save", "element_id": "abc123", "component_name": "Hero Section" } \`\`\` Save with overridable properties: \`\`\`json { "action": "save", "element_id": "abc123", "component_name": "Feature Card", "overridable_props": { "props": { "heading-text": { "elementId": "heading-123", "propKey": "text", "label": "Card Title", "group": "Content" }, "button-link": { "elementId": "button-456", "propKey": "url", "label": "Button Link", "group": "Settings" } } } } \`\`\` `); prompt.instruction(`After successful "save", the component will be available in the components library and can be inserted into any page or template.`); prompt.instruction(`When overridable properties are defined, component instances will show customization controls for those specific properties in the editing panel.`); return prompt.prompt(); }; const initManageComponentTool = reg => { const { addTool } = reg; addTool({ name: 'manage-component', schema: InputSchema, outputSchema: OutputSchema, description: generatePrompt(), requiredResources: [{ uri: _components_list_resource__WEBPACK_IMPORTED_MODULE_9__.COMPONENTS_LIST_URI, description: 'List of all components' }, { uri: _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.DOCUMENT_STRUCTURE_URI, description: 'Document structure' }, { uri: _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.WIDGET_SCHEMA_URI, description: 'Widget schema' }], handler: handleManageComponent }); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/shortcuts/create-component-shortcut.ts": /*!*****************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/shortcuts/create-component-shortcut.ts ***! \*****************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ CREATE_COMPONENT_SHORTCUT_KEYS: function() { return /* binding */ CREATE_COMPONENT_SHORTCUT_KEYS; }, /* harmony export */ initCreateComponentShortcut: function() { return /* binding */ initCreateComponentShortcut; }, /* harmony export */ isCreateComponentAllowed: function() { return /* binding */ isCreateComponentAllowed; }, /* harmony export */ triggerCreateComponentForm: function() { return /* binding */ triggerCreateComponentForm; } /* harmony export */ }); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__); const CREATE_COMPONENT_SHORTCUT_KEYS = 'ctrl+shift+k'; const OPEN_SAVE_AS_COMPONENT_FORM_EVENT = 'elementor/editor/open-save-as-component-form'; function isCreateComponentAllowed() { const selectedElements = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.getSelectedElements)(); if (selectedElements.length !== 1) { return { allowed: false }; } const element = selectedElements[0]; const elementType = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.getElementType)(element.type); if (!elementType) { return { allowed: false }; } const widgetsCache = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.getWidgetsCache)(); const elementConfig = widgetsCache?.[element.type]; if (!elementConfig?.atomic_props_schema || !elementConfig?.show_in_panel || elementConfig?.elType === 'widget') { return { allowed: false }; } const legacyWindow = window; const container = legacyWindow.elementor.getContainer(element.id); if (!container || container.isLocked()) { return { allowed: false }; } return { allowed: true, container }; } function triggerCreateComponentForm(container) { const legacyWindow = window; const elementRect = container.view.el.getBoundingClientRect(); const iframeRect = legacyWindow.elementor.$preview[0].getBoundingClientRect(); const anchorPosition = { left: iframeRect.left + elementRect.left + elementRect.width / 2, top: iframeRect.top + elementRect.top }; window.dispatchEvent(new CustomEvent(OPEN_SAVE_AS_COMPONENT_FORM_EVENT, { detail: { element: container.model.toJSON({ remove: ['default'] }), anchorPosition, options: { trigger: 'keyboard', location: 'canvas', secondaryLocation: 'canvasElement' } } })); } function initCreateComponentShortcut() { const legacyWindow = window; legacyWindow.$e.shortcuts.register(CREATE_COMPONENT_SHORTCUT_KEYS, { callback: () => { const result = isCreateComponentAllowed(); if (!result.allowed) { return; } triggerCreateComponentForm(result.container); }, dependency: () => { const result = isCreateComponentAllowed(); return result.allowed; }, exclude: ['input'] }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/add-overridable-group.ts": /*!*****************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/add-overridable-group.ts ***! \*****************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ addOverridableGroup: function() { return /* binding */ addOverridableGroup; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); function addOverridableGroup({ componentId, groupId, label, source }) { const currentComponent = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getCurrentComponent(); const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(componentId); if (!overridableProps) { return; } const newGroup = { id: groupId, label, props: [] }; _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(componentId, { ...overridableProps, groups: { ...overridableProps.groups, items: { ...overridableProps.groups.items, [groupId]: newGroup }, order: [groupId, ...overridableProps.groups.order] } }); (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.trackComponentEvent)({ action: 'propertiesGroupCreated', source, component_uid: currentComponent?.uid, group_name: label }); return newGroup; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/archive-component.ts": /*!*************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/archive-component.ts ***! \*************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ archiveComponent: function() { return /* binding */ archiveComponent; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-notifications */ "@elementor/editor-notifications"); /* harmony import */ var _elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__); const successNotification = (componentId, componentName) => ({ type: 'success', /* translators: %s: component name */ message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_3__.__)('Successfully deleted component %s', 'elementor-pro').replace('%s', componentName), id: `success-archived-components-notification-${componentId}` }); const archiveComponent = (componentId, componentName) => { _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.archive(componentId); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.setDocumentModifiedStatus)(true); (0,_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2__.notify)(successNotification(componentId, componentName)); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/create-component-overridable-prop.ts": /*!*****************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/create-component-overridable-prop.ts ***! \*****************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createComponentOverridableProp: function() { return /* binding */ createComponentOverridableProp; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _utils_groups_transformers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/groups-transformers */ "./packages/packages/pro/editor-components-extended/src/store/utils/groups-transformers.ts"); function createComponentOverridableProp({ componentId, overrideKey, elementId, label, groupId, propKey, elType, widgetType, originValue, originPropFields, source }) { const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(componentId); if (!overridableProps) { throw new Error(`Component not found for componentId: ${componentId}`); } const duplicatedTargetProps = Object.values(overridableProps.props).filter(prop => prop.elementId === elementId && prop.propKey === propKey); const { groups: groupsAfterResolve, groupId: currentGroupId } = (0,_utils_groups_transformers__WEBPACK_IMPORTED_MODULE_2__.resolveOrCreateGroup)(overridableProps.groups, groupId ?? undefined); const overridableProp = { overrideKey: overrideKey || (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_1__.generateUniqueId)('prop'), label, elementId, propKey, widgetType, elType, originValue, groupId: currentGroupId, originPropFields }; const stateAfterRemovingDuplicates = (0,_utils_groups_transformers__WEBPACK_IMPORTED_MODULE_2__.removePropsFromState)({ ...overridableProps, groups: groupsAfterResolve }, duplicatedTargetProps); const props = { ...stateAfterRemovingDuplicates.props, [overridableProp.overrideKey]: overridableProp }; let groups = (0,_utils_groups_transformers__WEBPACK_IMPORTED_MODULE_2__.addPropToGroup)(stateAfterRemovingDuplicates.groups, currentGroupId, overridableProp.overrideKey); groups = (0,_utils_groups_transformers__WEBPACK_IMPORTED_MODULE_2__.ensureGroupInOrder)(groups, currentGroupId); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(componentId, { props, groups }); const currentComponent = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getCurrentComponent(); (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.trackComponentEvent)({ action: 'propertyExposed', source, component_uid: currentComponent?.uid, property_id: overridableProp.overrideKey, property_path: propKey, property_name: label, element_type: widgetType ?? elType }); return overridableProp; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/create-unpublished-component.ts": /*!************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/create-unpublished-component.ts ***! \************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createUnpublishedComponent: function() { return /* binding */ createUnpublishedComponent; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _utils_apply_overridables_to_elements__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/apply-overridables-to-elements */ "./packages/packages/pro/editor-components-extended/src/utils/apply-overridables-to-elements.ts"); /* harmony import */ var _utils_replace_element_with_component__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../utils/replace-element-with-component */ "./packages/packages/pro/editor-components-extended/src/utils/replace-element-with-component.ts"); /* harmony import */ var _utils_revert_overridable_settings__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../utils/revert-overridable-settings */ "./packages/packages/pro/editor-components-extended/src/utils/revert-overridable-settings.ts"); async function createUnpublishedComponent({ name, element, eventData, uid, overridableProps, source }) { const generatedUid = uid ?? (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_3__.generateUniqueId)('component'); const componentBase = { uid: generatedUid, name }; const elementDataWithOverridablesReverted = (0,_utils_revert_overridable_settings__WEBPACK_IMPORTED_MODULE_7__.revertAllOverridablesInElementData)(element); const elements = [elementDataWithOverridablesReverted]; if (overridableProps) { (0,_utils_apply_overridables_to_elements__WEBPACK_IMPORTED_MODULE_5__.applyOverridablesToElements)(elements, overridableProps); } const container = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getContainer)(element.id); const modelFromContainer = container?.model?.toJSON?.(); const originalElement = { model: modelFromContainer ?? element, parentId: container?.parent?.id ?? '', index: container?.view?._index ?? 0 }; _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.addUnpublished({ ...componentBase, elements, overridableProps }); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.addCreatedThisSession(generatedUid); const componentInstance = (0,_utils_replace_element_with_component__WEBPACK_IMPORTED_MODULE_6__.replaceElementWithComponent)(element, componentBase); (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.trackComponentEvent)({ action: 'created', source, component_uid: generatedUid, component_name: name, ...eventData }); try { await (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_2__.__privateRunCommand)('document/save/auto'); } catch (error) { restoreOriginalElement(originalElement, componentInstance.id); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.removeUnpublished(generatedUid); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.removeCreatedThisSession(generatedUid); throw error; } try { await (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.loadComponentsAssets)([componentInstance.model.toJSON()]); } catch {} return { uid: generatedUid, instanceId: componentInstance.id }; } function restoreOriginalElement(originalElement, componentInstanceId) { const componentContainer = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getContainer)(componentInstanceId); if (componentContainer) { (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.deleteElement)({ container: componentContainer, options: { useHistory: false } }); } const parentContainer = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getContainer)(originalElement.parentId); if (!parentContainer) { return; } const clonedModel = structuredClone(originalElement.model); (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.createElements)({ title: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)('Restore Element', 'elementor-pro'), elements: [{ container: parentContainer, model: clonedModel, options: { at: originalElement.index } }] }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/delete-component-overridable-prop.ts": /*!*****************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/delete-component-overridable-prop.ts ***! \*****************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ deleteComponentOverridableProp: function() { return /* binding */ deleteComponentOverridableProp; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils_revert_overridable_settings__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/revert-overridable-settings */ "./packages/packages/pro/editor-components-extended/src/utils/revert-overridable-settings.ts"); /* harmony import */ var _utils_groups_transformers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/groups-transformers */ "./packages/packages/pro/editor-components-extended/src/store/utils/groups-transformers.ts"); function deleteComponentOverridableProp({ componentId, propKey, source, revertElementOverridable = true }) { const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(componentId); if (!overridableProps || Object.keys(overridableProps.props).length === 0) { return; } const propKeysToDelete = Array.isArray(propKey) ? propKey : [propKey]; const deletedProps = []; for (const key of propKeysToDelete) { const prop = overridableProps.props[key]; if (!prop) { continue; } deletedProps.push(prop); if (revertElementOverridable) { (0,_utils_revert_overridable_settings__WEBPACK_IMPORTED_MODULE_1__.revertElementOverridableSetting)(prop.elementId, prop.propKey, prop.originValue, key); } } if (deletedProps.length === 0) { return; } const remainingProps = Object.fromEntries(Object.entries(overridableProps.props).filter(([key]) => !propKeysToDelete.includes(key))); const updatedGroups = (0,_utils_groups_transformers__WEBPACK_IMPORTED_MODULE_2__.removePropFromAllGroups)(overridableProps.groups, propKey); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(componentId, { ...overridableProps, props: remainingProps, groups: updatedGroups }); const currentComponent = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getCurrentComponent(); for (const prop of deletedProps) { (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.trackComponentEvent)({ action: 'propertyRemoved', source, component_uid: currentComponent?.uid, property_id: prop.overrideKey, property_path: prop.propKey, property_name: prop.label, element_type: prop.widgetType ?? prop.elType }); } } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/delete-overridable-group.ts": /*!********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/delete-overridable-group.ts ***! \********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ deleteOverridableGroup: function() { return /* binding */ deleteOverridableGroup; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils_groups_transformers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/groups-transformers */ "./packages/packages/pro/editor-components-extended/src/store/utils/groups-transformers.ts"); function deleteOverridableGroup({ componentId, groupId }) { const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(componentId); if (!overridableProps) { return false; } const group = overridableProps.groups.items[groupId]; if (!group || group.props.length > 0) { return false; } const updatedGroups = (0,_utils_groups_transformers__WEBPACK_IMPORTED_MODULE_1__.deleteGroup)(overridableProps.groups, groupId); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(componentId, { ...overridableProps, groups: updatedGroups }); return true; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/rename-component.ts": /*!************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/rename-component.ts ***! \************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ renameComponent: function() { return /* binding */ renameComponent; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-documents */ "@elementor/editor-documents"); /* harmony import */ var _elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_2__); const TITLE_EXTERNAL_CHANGE_COMMAND = 'title_external_change'; const renameComponent = (componentUid, newName) => { _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.rename(componentUid, newName); (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.setDocumentModifiedStatus)(true); refreshComponentInstanceTitles(componentUid); }; function refreshComponentInstanceTitles(componentUid) { const documentContainer = getDocumentContainer(); if (!documentContainer) { return; } const componentInstances = findComponentInstancesByUid(documentContainer, componentUid); componentInstances.forEach(element => { element.model.trigger?.(TITLE_EXTERNAL_CHANGE_COMMAND); }); } function getDocumentContainer() { const documentsManager = (0,_elementor_editor_documents__WEBPACK_IMPORTED_MODULE_1__.getV1DocumentsManager)(); return documentsManager?.getCurrent()?.container; } function findComponentInstancesByUid(documentContainer, componentUid) { const allDescendants = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_2__.getAllDescendants)(documentContainer); return allDescendants.filter(element => { const widgetType = element.model.get('widgetType'); const editorSettings = element.model.get('editor_settings'); const isMatch = widgetType === _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.COMPONENT_WIDGET_TYPE && editorSettings?.component_uid === componentUid; return isMatch; }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/rename-overridable-group.ts": /*!********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/rename-overridable-group.ts ***! \********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ renameOverridableGroup: function() { return /* binding */ renameOverridableGroup; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils_groups_transformers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/groups-transformers */ "./packages/packages/pro/editor-components-extended/src/store/utils/groups-transformers.ts"); function renameOverridableGroup({ componentId, groupId, label }) { const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(componentId); if (!overridableProps) { return false; } const group = overridableProps.groups.items[groupId]; if (!group) { return false; } const updatedGroups = (0,_utils_groups_transformers__WEBPACK_IMPORTED_MODULE_1__.renameGroup)(overridableProps.groups, groupId, label); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(componentId, { ...overridableProps, groups: updatedGroups }); return true; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/reorder-group-props.ts": /*!***************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/reorder-group-props.ts ***! \***************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ reorderGroupProps: function() { return /* binding */ reorderGroupProps; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); function reorderGroupProps({ componentId, groupId, newPropsOrder }) { const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(componentId); if (!overridableProps) { return; } const group = overridableProps.groups.items[groupId]; if (!group) { return; } _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(componentId, { ...overridableProps, groups: { ...overridableProps.groups, items: { ...overridableProps.groups.items, [groupId]: { ...group, props: newPropsOrder } } } }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/reorder-overridable-groups.ts": /*!**********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/reorder-overridable-groups.ts ***! \**********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ reorderOverridableGroups: function() { return /* binding */ reorderOverridableGroups; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); function reorderOverridableGroups({ componentId, newOrder }) { const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(componentId); if (!overridableProps) { return; } _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(componentId, { ...overridableProps, groups: { ...overridableProps.groups, order: newOrder } }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/reset-sanitized-components.ts": /*!**********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/reset-sanitized-components.ts ***! \**********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ resetSanitizedComponents: function() { return /* binding */ resetSanitizedComponents; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); function resetSanitizedComponents() { _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.resetSanitizedComponents(); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/update-component-sanitized-attribute.ts": /*!********************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/update-component-sanitized-attribute.ts ***! \********************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ updateComponentSanitizedAttribute: function() { return /* binding */ updateComponentSanitizedAttribute; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); function updateComponentSanitizedAttribute(componentId, attribute) { _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.updateComponentSanitizedAttribute(componentId, attribute); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/update-current-component.ts": /*!********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/update-current-component.ts ***! \********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ updateCurrentComponent: function() { return /* binding */ updateCurrentComponent; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); function updateCurrentComponent(params) { _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setPath(params.path); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setCurrentComponentId(params.currentComponentId); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/actions/update-overridable-prop-params.ts": /*!**************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/actions/update-overridable-prop-params.ts ***! \**************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ updateOverridablePropParams: function() { return /* binding */ updateOverridablePropParams; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils_groups_transformers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/groups-transformers */ "./packages/packages/pro/editor-components-extended/src/store/utils/groups-transformers.ts"); function updateOverridablePropParams({ componentId, overrideKey, label, groupId }) { const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(componentId); if (!overridableProps) { return; } const prop = overridableProps.props[overrideKey]; if (!prop) { return; } const oldGroupId = prop.groupId; const newGroupId = groupId ?? oldGroupId; const updatedProp = { ...prop, label, groupId: newGroupId }; const updatedGroups = (0,_utils_groups_transformers__WEBPACK_IMPORTED_MODULE_1__.movePropBetweenGroups)(overridableProps.groups, overrideKey, oldGroupId, newGroupId); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.setOverridableProps(componentId, { ...overridableProps, props: { ...overridableProps.props, [overrideKey]: updatedProp }, groups: updatedGroups }); return updatedProp; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/store/utils/groups-transformers.ts": /*!*************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/store/utils/groups-transformers.ts ***! \*************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ addPropToGroup: function() { return /* binding */ addPropToGroup; }, /* harmony export */ deleteGroup: function() { return /* binding */ deleteGroup; }, /* harmony export */ ensureGroupInOrder: function() { return /* binding */ ensureGroupInOrder; }, /* harmony export */ movePropBetweenGroups: function() { return /* binding */ movePropBetweenGroups; }, /* harmony export */ removePropFromAllGroups: function() { return /* binding */ removePropFromAllGroups; }, /* harmony export */ removePropFromGroup: function() { return /* binding */ removePropFromGroup; }, /* harmony export */ removePropsFromState: function() { return /* binding */ removePropsFromState; }, /* harmony export */ renameGroup: function() { return /* binding */ renameGroup; }, /* harmony export */ resolveOrCreateGroup: function() { return /* binding */ resolveOrCreateGroup; } /* harmony export */ }); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/utils */ "@elementor/utils"); /* harmony import */ var _elementor_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_utils__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); function removePropFromAllGroups(groups, propKey) { const propKeys = Array.isArray(propKey) ? propKey : [propKey]; return { ...groups, items: Object.fromEntries(Object.entries(groups.items).map(([groupId, group]) => [groupId, { ...group, props: group.props.filter(p => !propKeys.includes(p)) }])) }; } function addPropToGroup(groups, groupId, propKey) { const group = groups.items[groupId]; if (!group) { return groups; } if (group.props.includes(propKey)) { return groups; } return { ...groups, items: { ...groups.items, [groupId]: { ...group, props: [...group.props, propKey] } } }; } function movePropBetweenGroups(groups, propKey, fromGroupId, toGroupId) { if (fromGroupId === toGroupId) { return groups; } const withoutProp = removePropFromGroup(groups, fromGroupId, propKey); return addPropToGroup(withoutProp, toGroupId, propKey); } function removePropFromGroup(groups, groupId, propKey) { const group = groups.items[groupId]; if (!group) { return groups; } return { ...groups, items: { ...groups.items, [groupId]: { ...group, props: group.props.filter(p => p !== propKey) } } }; } function resolveOrCreateGroup(groups, requestedGroupId) { if (requestedGroupId && groups.items[requestedGroupId]) { return { groups, groupId: requestedGroupId }; } if (!requestedGroupId && groups.order.length > 0) { return { groups, groupId: groups.order[0] }; } return createGroup(groups, requestedGroupId); } function createGroup(groups, groupId, label) { const newGroupId = groupId || (0,_elementor_utils__WEBPACK_IMPORTED_MODULE_0__.generateUniqueId)('group'); const newLabel = label || (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Default', 'elementor-pro'); return { groups: { ...groups, items: { ...groups.items, [newGroupId]: { id: newGroupId, label: newLabel, props: [] } }, order: [...groups.order, newGroupId] }, groupId: newGroupId }; } function removePropsFromState(overridableProps, propsToRemove) { const overrideKeysToRemove = propsToRemove.map(prop => prop.overrideKey); const remainingProps = Object.fromEntries(Object.entries(overridableProps.props).filter(([, prop]) => !propsToRemove.includes(prop))); const updatedGroupItems = Object.fromEntries(Object.entries(overridableProps.groups.items).map(([groupId, group]) => [groupId, { ...group, props: group.props.filter(prop => !overrideKeysToRemove.includes(prop)) }])); return { props: remainingProps, groups: { items: updatedGroupItems, order: overridableProps.groups.order.filter(groupId => !overrideKeysToRemove.includes(groupId)) } }; } function ensureGroupInOrder(groups, groupId) { if (groups.order.includes(groupId)) { return groups; } return { ...groups, order: [...groups.order, groupId] }; } function deleteGroup(groups, groupId) { const { [groupId]: removed, ...remainingItems } = groups.items; return { items: remainingItems, order: groups.order.filter(id => id !== groupId) }; } function renameGroup(groups, groupId, newLabel) { const group = groups.items[groupId]; if (!group) { return groups; } return { ...groups, items: { ...groups.items, [groupId]: { ...group, label: newLabel } } }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/before-save.ts": /*!**********************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/before-save.ts ***! \**********************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ beforeSave: function() { return /* binding */ beforeSave; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _sync_set_component_overridable_props_settings_before_save__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../sync/set-component-overridable-props-settings-before-save */ "./packages/packages/pro/editor-components-extended/src/sync/set-component-overridable-props-settings-before-save.ts"); /* harmony import */ var _sync_update_archived_component_before_save__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../sync/update-archived-component-before-save */ "./packages/packages/pro/editor-components-extended/src/sync/update-archived-component-before-save.ts"); /* harmony import */ var _sync_update_component_title_before_save__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../sync/update-component-title-before-save */ "./packages/packages/pro/editor-components-extended/src/sync/update-component-title-before-save.ts"); /* harmony import */ var _create_components_before_save__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./create-components-before-save */ "./packages/packages/pro/editor-components-extended/src/sync/create-components-before-save.ts"); const beforeSave = ({ container, status }) => { const elements = container?.model.get('elements').toJSON?.() ?? []; return Promise.all([syncComponents({ elements, status }), (0,_sync_set_component_overridable_props_settings_before_save__WEBPACK_IMPORTED_MODULE_1__.setComponentOverridablePropsSettingsBeforeSave)({ container })]); }; // These operations run sequentially to prevent race conditions when multiple // edits occur on the same component simultaneously. // TODO: Consolidate these into a single PUT /components endpoint. const syncComponents = async ({ elements, status }) => { // This order is important - first update existing components, then create new components, // Since new component validation depends on the existing components (preventing duplicate names). await updateExistingComponentsBeforeSave({ elements, status }); await (0,_create_components_before_save__WEBPACK_IMPORTED_MODULE_4__.createComponentsBeforeSave)({ elements, status }); }; const updateExistingComponentsBeforeSave = async ({ elements, status }) => { await (0,_sync_update_component_title_before_save__WEBPACK_IMPORTED_MODULE_3__.updateComponentTitleBeforeSave)(status); await (0,_sync_update_archived_component_before_save__WEBPACK_IMPORTED_MODULE_2__.updateArchivedComponentBeforeSave)(status); await (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.publishDraftComponentsInPageBeforeSave)({ elements, status }); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/cleanup-overridable-props-on-delete.ts": /*!**********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/cleanup-overridable-props-on-delete.ts ***! \**********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ initCleanupOverridablePropsOnDelete: function() { return /* binding */ initCleanupOverridablePropsOnDelete; } /* harmony export */ }); /* harmony import */ var _elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/core-adapter-utils */ "@elementor/core-adapter-utils"); /* harmony import */ var _elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-canvas */ "@elementor/editor-canvas"); /* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _store_actions_create_component_overridable_prop__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../store/actions/create-component-overridable-prop */ "./packages/packages/pro/editor-components-extended/src/store/actions/create-component-overridable-prop.ts"); /* harmony import */ var _store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../store/actions/delete-component-overridable-prop */ "./packages/packages/pro/editor-components-extended/src/store/actions/delete-component-overridable-prop.ts"); const deleteActionEntries = new Map(); function initCleanupOverridablePropsOnDelete() { registerCleanupOverridablePropsOnDelete(); registerRestoreOverridablePropsOnUndo(); registerCleanupOverridablePropsOnRedo(); registerClearDeleteEntriesOnDocumentSwitch(); } function registerCleanupOverridablePropsOnDelete() { // This hook is not a real dependency - it doesn't block the execution of the command in any case, only perform side effect. // We use `dependency` and not `after` hook because the `after` hook doesn't include the children of a deleted container // in the callback parameters (as they already were deleted). (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_4__.registerDataHook)('dependency', 'document/elements/delete', (args, options) => { if (isPartOfMoveCommand(options)) { return true; } const currentComponentId = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.componentsSelectors.getCurrentComponentId(); if (!currentComponentId) { return true; } const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.componentsSelectors.getOverridableProps(currentComponentId); if (!overridableProps || Object.keys(overridableProps.props).length === 0) { return true; } const containers = args.containers ?? (args.container ? [args.container] : []); if (containers.length === 0) { return true; } const deletedElementIds = collectDeletedElementIds(containers); if (deletedElementIds.length === 0) { return true; } const propsToDelete = Object.values(overridableProps.props).filter(prop => deletedElementIds.includes(prop.elementId)); if (propsToDelete.length === 0) { return true; } if (options?.currentHistoryItemId !== undefined) { deleteActionEntries.set(options.currentHistoryItemId, { props: propsToDelete, elementIds: deletedElementIds }); } const propKeysToDelete = propsToDelete.map(prop => prop.overrideKey); (0,_store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_6__.deleteComponentOverridableProp)({ componentId: currentComponentId, propKey: propKeysToDelete, source: 'system', revertElementOverridable: false }); return true; }); } function registerClearDeleteEntriesOnDocumentSwitch() { (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_4__.registerDataHook)('after', 'editor/documents/attach-preview', () => { deleteActionEntries.clear(); }); } function registerRestoreOverridablePropsOnUndo() { (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_4__.registerDataHook)('after', 'document/history/undo', async (_, results) => { if (!results?.originHistoryItemId) { return; } const currentComponentId = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.componentsSelectors.getCurrentComponentId(); if (!currentComponentId) { return; } const entry = deleteActionEntries.get(results.originHistoryItemId); if (!entry) { return; } const restoreProps = () => { for (const prop of entry.props) { (0,_store_actions_create_component_overridable_prop__WEBPACK_IMPORTED_MODULE_5__.createComponentOverridableProp)({ componentId: currentComponentId, ...prop, source: 'system' }); } }; if ((0,_elementor_core_adapter_utils__WEBPACK_IMPORTED_MODULE_0__.isCoreAtLeast)('4.1.0')) { (0,_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_1__.doAfterRender)(entry.elementIds, restoreProps); } }); } function registerCleanupOverridablePropsOnRedo() { (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_4__.registerDataHook)('after', 'document/history/redo', (_, results) => { if (!results?.originHistoryItemId) { return; } const currentComponentId = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_2__.componentsSelectors.getCurrentComponentId(); if (!currentComponentId) { return; } const entry = deleteActionEntries.get(results.originHistoryItemId); if (!entry) { return; } const propKeysToDelete = entry.props.map(prop => prop.overrideKey); (0,_store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_6__.deleteComponentOverridableProp)({ componentId: currentComponentId, propKey: propKeysToDelete, source: 'system', revertElementOverridable: false }); }); } function collectDeletedElementIds(containers) { const elementIds = containers.filter(Boolean).flatMap(container => [container, ...(0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_3__.getAllDescendants)(container)]).map(element => element.model?.get?.('id') ?? element.id).filter(id => Boolean(id)); return elementIds; } function isPartOfMoveCommand(options) { // Skip cleanup if this delete is part of a move command // Move = delete + create, and we don't want to delete the overridable prop in this case. // See assets/dev/js/editor/document/elements/commands/move.js const isMoveCommandInTrace = options?.commandsCurrentTrace?.includes('document/elements/move') || options?.commandsCurrentTrace?.includes('document/repeater/move'); return Boolean(isMoveCommandInTrace); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/create-components-before-save.ts": /*!****************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/create-components-before-save.ts ***! \****************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createComponentsBeforeSave: function() { return /* binding */ createComponentsBeforeSave; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__); async function createComponentsBeforeSave({ elements, status }) { const unpublishedComponents = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getUnpublishedComponents(); if (!unpublishedComponents.length) { return; } try { const uidToComponentId = await createComponents(unpublishedComponents, status); updateComponentInstances(elements, uidToComponentId); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.add(unpublishedComponents.map(component => ({ id: uidToComponentId.get(component.uid), name: component.name, uid: component.uid, overridableProps: component.overridableProps ? component.overridableProps : undefined }))); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.resetUnpublished(); } catch (error) { const failedUids = unpublishedComponents.map(component => component.uid); _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.removeUnpublished(failedUids); throw new Error(`Failed to publish components: ${error}`); } } async function createComponents(components, status) { const response = await _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.apiClient.create({ status, items: components.map(component => ({ uid: component.uid, title: component.name, elements: component.elements, settings: component.overridableProps ? { overridable_props: component.overridableProps } : undefined })) }); const map = new Map(); Object.entries(response).forEach(([key, value]) => { map.set(key, value); }); return map; } function updateComponentInstances(elements, uidToComponentId) { elements.forEach(element => { const { shouldUpdate, newComponentId } = shouldUpdateElement(element, uidToComponentId); if (shouldUpdate) { updateElementComponentId(element.id, newComponentId); } if (element.elements) { updateComponentInstances(element.elements, uidToComponentId); } }); } function shouldUpdateElement(element, uidToComponentId) { if (element.widgetType === 'e-component') { const currentComponentId = element.settings?.component_instance?.value?.component_id.value; if (currentComponentId && uidToComponentId.has(currentComponentId.toString())) { return { shouldUpdate: true, newComponentId: uidToComponentId.get(currentComponentId.toString()) }; } } return { shouldUpdate: false, newComponentId: null }; } function updateElementComponentId(elementId, componentId) { (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.updateElementSettings)({ id: elementId, props: { component_instance: { $$type: 'component-instance', value: { component_id: { $$type: 'number', value: componentId } } } }, withHistory: false }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/handle-component-edit-mode-container.ts": /*!***********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/handle-component-edit-mode-container.ts ***! \***********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ initHandleComponentEditModeContainer: function() { return /* binding */ initHandleComponentEditModeContainer; } /* harmony export */ }); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../consts */ "./packages/packages/pro/editor-components-extended/src/consts.ts"); /* harmony import */ var _utils_is_editing_component__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/is-editing-component */ "./packages/packages/pro/editor-components-extended/src/utils/is-editing-component.ts"); const V4_DEFAULT_CONTAINER_TYPE = 'e-flexbox'; function initHandleComponentEditModeContainer() { initRedirectDropIntoComponent(); initHandleTopLevelElementDelete(); } function initHandleTopLevelElementDelete() { (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.registerDataHook)('after', 'document/elements/delete', args => { if (!(0,_utils_is_editing_component__WEBPACK_IMPORTED_MODULE_3__.isEditingComponent)()) { return; } const containers = args.containers ?? (args.container ? [args.container] : []); for (const container of containers) { if (!container.parent || !isComponent(container.parent)) { continue; } const component = container.parent; const isComponentEmpty = component.children?.length === 0; if (isComponentEmpty) { createEmptyTopLevelContainer(container.parent); } } }); } function initRedirectDropIntoComponent() { (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_1__.registerDataHook)('dependency', 'preview/drop', args => { if (!(0,_utils_is_editing_component__WEBPACK_IMPORTED_MODULE_3__.isEditingComponent)()) { return true; } const containers = args.containers ?? (args.container ? [args.container] : []); for (const container of containers) { if (!isComponent(container)) { continue; } const { shouldRedirect, container: redirectedContainer } = getComponentContainer(container); if (!shouldRedirect) { continue; } if (args.containers) { const index = args.containers.indexOf(container); args.containers[index] = redirectedContainer; } else { args.container = redirectedContainer; } } return true; }); } function createEmptyTopLevelContainer(container) { const newContainer = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.createElement)({ container, model: { elType: V4_DEFAULT_CONTAINER_TYPE } }); (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.selectElement)(newContainer.id); } function getComponentContainer(container) { const topLevelElement = container.children?.[0]; if (topLevelElement) { return { shouldRedirect: true, container: topLevelElement }; } return { shouldRedirect: false, container }; } function isComponent(container) { const isDocument = container.id === 'document'; if (!isDocument) { return false; } return container.document?.config.type === _consts__WEBPACK_IMPORTED_MODULE_2__.COMPONENT_DOCUMENT_TYPE; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/prevent-non-atomic-nesting.ts": /*!*************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/prevent-non-atomic-nesting.ts ***! \*************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ findNonAtomicElements: function() { return /* binding */ findNonAtomicElements; }, /* harmony export */ findNonAtomicElementsInElement: function() { return /* binding */ findNonAtomicElementsInElement; }, /* harmony export */ hasNonAtomicElementsInTree: function() { return /* binding */ hasNonAtomicElementsInTree; }, /* harmony export */ initNonAtomicNestingPrevention: function() { return /* binding */ initNonAtomicNestingPrevention; }, /* harmony export */ isElementAtomic: function() { return /* binding */ isElementAtomic; } /* harmony export */ }); /* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-canvas */ "@elementor/editor-canvas"); /* harmony import */ var _elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @elementor/editor-notifications */ "@elementor/editor-notifications"); /* harmony import */ var _elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__); /* harmony import */ var _utils_is_editing_component__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/is-editing-component */ "./packages/packages/pro/editor-components-extended/src/utils/is-editing-component.ts"); const NON_ATOMIC_ELEMENT_ALERT = { type: 'default', message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_4__.__)("This widget isn't compatible with components. Use atomic elements instead.", 'elementor-pro'), id: 'non-atomic-element-blocked' }; function initNonAtomicNestingPrevention() { (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__.blockCommand)({ command: 'document/elements/create', condition: blockNonAtomicCreate }); (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__.blockCommand)({ command: 'document/elements/move', condition: blockNonAtomicMove }); (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_3__.blockCommand)({ command: 'document/elements/paste', condition: blockNonAtomicPaste }); } function isElementAtomic(elementType) { return (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getElementType)(elementType) !== null; } function blockNonAtomicCreate(args) { if (!(0,_utils_is_editing_component__WEBPACK_IMPORTED_MODULE_5__.isEditingComponent)()) { return false; } const { model } = args; const elementType = model?.widgetType || model?.elType; if (!elementType) { return false; } if (isElementAtomic(elementType)) { return false; } (0,_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2__.notify)(NON_ATOMIC_ELEMENT_ALERT); return true; } function blockNonAtomicMove(args) { if (!(0,_utils_is_editing_component__WEBPACK_IMPORTED_MODULE_5__.isEditingComponent)()) { return false; } const { containers = [args.container] } = args; const hasNonAtomicElement = containers.some(container => { if (!container) { return false; } const allElements = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getAllDescendants)(container); return allElements.some(element => !(0,_elementor_editor_canvas__WEBPACK_IMPORTED_MODULE_0__.isAtomicWidget)(element)); }); if (hasNonAtomicElement) { (0,_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2__.notify)(NON_ATOMIC_ELEMENT_ALERT); } return hasNonAtomicElement; } function blockNonAtomicPaste(args) { if (!(0,_utils_is_editing_component__WEBPACK_IMPORTED_MODULE_5__.isEditingComponent)()) { return false; } const { storageType } = args; if (storageType !== 'localstorage') { return false; } const data = window?.elementorCommon?.storage?.get(); if (!data?.clipboard?.elements) { return false; } const hasNonAtomicElement = hasNonAtomicElementsInTree(data.clipboard.elements); if (hasNonAtomicElement) { (0,_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_2__.notify)(NON_ATOMIC_ELEMENT_ALERT); } return hasNonAtomicElement; } function hasNonAtomicElementsInTree(elements) { for (const element of elements) { const elementType = element.widgetType || element.elType; if (elementType && !isElementAtomic(elementType)) { return true; } if (element.elements?.length) { if (hasNonAtomicElementsInTree(element.elements)) { return true; } } } return false; } function findNonAtomicElements(elements) { const nonAtomicElements = []; for (const element of elements) { const elementType = element.widgetType || element.elType; if (elementType && !isElementAtomic(elementType)) { nonAtomicElements.push(elementType); } if (element.elements?.length) { nonAtomicElements.push(...findNonAtomicElements(element.elements)); } } return [...new Set(nonAtomicElements)]; } function findNonAtomicElementsInElement(element) { const nonAtomicElements = []; const elementType = element.widgetType || element.elType; if (elementType && !isElementAtomic(elementType)) { nonAtomicElements.push(elementType); } if (element.elements?.length) { for (const child of element.elements) { nonAtomicElements.push(...findNonAtomicElementsInElement(child)); } } return [...new Set(nonAtomicElements)]; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/revert-overridables-on-copy-or-duplicate.ts": /*!***************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/revert-overridables-on-copy-or-duplicate.ts ***! \***************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ initRevertOverridablesOnCopyOrDuplicate: function() { return /* binding */ initRevertOverridablesOnCopyOrDuplicate; } /* harmony export */ }); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-v1-adapters */ "@elementor/editor-v1-adapters"); /* harmony import */ var _elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _utils_is_editing_component__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/is-editing-component */ "./packages/packages/pro/editor-components-extended/src/utils/is-editing-component.ts"); /* harmony import */ var _utils_revert_overridable_settings__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/revert-overridable-settings */ "./packages/packages/pro/editor-components-extended/src/utils/revert-overridable-settings.ts"); function initRevertOverridablesOnCopyOrDuplicate() { (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__.registerDataHook)('after', 'document/elements/duplicate', (_args, result) => { if (!(0,_utils_is_editing_component__WEBPACK_IMPORTED_MODULE_1__.isEditingComponent)()) { return; } revertOverridablesForDuplicatedElements(result); }); (0,_elementor_editor_v1_adapters__WEBPACK_IMPORTED_MODULE_0__.registerDataHook)('after', 'document/elements/copy', args => { if (!(0,_utils_is_editing_component__WEBPACK_IMPORTED_MODULE_1__.isEditingComponent)()) { return; } revertOverridablesInStorage(args.storageKey ?? 'clipboard'); }); } function revertOverridablesForDuplicatedElements(duplicatedElements) { const containers = Array.isArray(duplicatedElements) ? duplicatedElements : [duplicatedElements]; containers.forEach(container => { (0,_utils_revert_overridable_settings__WEBPACK_IMPORTED_MODULE_2__.revertAllOverridablesInContainer)(container); }); } function revertOverridablesInStorage(storageKey) { const storage = window.elementorCommon?.storage; if (!storage) { return; } const storageData = storage.get(storageKey); if (!storageData?.elements?.length) { return; } const elementsDataWithOverridablesReverted = storageData.elements.map(_utils_revert_overridable_settings__WEBPACK_IMPORTED_MODULE_2__.revertAllOverridablesInElementData); storage.set(storageKey, { ...storageData, elements: elementsDataWithOverridablesReverted }); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/sanitize-overridable-props.ts": /*!*************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/sanitize-overridable-props.ts ***! \*************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ SanitizeOverridableProps: function() { return /* binding */ SanitizeOverridableProps; } /* harmony export */ }); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react"); /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var _store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../store/actions/delete-component-overridable-prop */ "./packages/packages/pro/editor-components-extended/src/store/actions/delete-component-overridable-prop.ts"); /* harmony import */ var _store_actions_update_component_sanitized_attribute__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../store/actions/update-component-sanitized-attribute */ "./packages/packages/pro/editor-components-extended/src/store/actions/update-component-sanitized-attribute.ts"); function SanitizeOverridableProps() { const currentComponentId = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useCurrentComponentId)(); const overridableProps = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useOverridableProps)(currentComponentId); const isSanitized = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.useIsSanitizedComponent)(currentComponentId, 'overridableProps'); (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { if (isSanitized || !overridableProps || !currentComponentId) { return; } const filtered = (0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_1__.filterValidOverridableProps)(overridableProps); const propsToDelete = Object.keys(overridableProps.props ?? {}).filter(key => !filtered.props[key]); if (propsToDelete.length > 0) { propsToDelete.forEach(key => { (0,_store_actions_delete_component_overridable_prop__WEBPACK_IMPORTED_MODULE_2__.deleteComponentOverridableProp)({ componentId: currentComponentId, propKey: key, source: 'system' }); }); } (0,_store_actions_update_component_sanitized_attribute__WEBPACK_IMPORTED_MODULE_3__.updateComponentSanitizedAttribute)(currentComponentId, 'overridableProps'); }, [currentComponentId, isSanitized, overridableProps]); return null; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/set-component-overridable-props-settings-before-save.ts": /*!***************************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/set-component-overridable-props-settings-before-save.ts ***! \***************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ setComponentOverridablePropsSettingsBeforeSave: function() { return /* binding */ setComponentOverridablePropsSettingsBeforeSave; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _consts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../consts */ "./packages/packages/pro/editor-components-extended/src/consts.ts"); const setComponentOverridablePropsSettingsBeforeSave = ({ container }) => { const currentDocument = container.document; if (!currentDocument || currentDocument.config.type !== _consts__WEBPACK_IMPORTED_MODULE_1__.COMPONENT_DOCUMENT_TYPE) { return; } const overridableProps = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getOverridableProps(currentDocument.id); if (overridableProps) { container.settings.set('overridable_props', overridableProps); } }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/update-archived-component-before-save.ts": /*!************************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/update-archived-component-before-save.ts ***! \************************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ updateArchivedComponentBeforeSave: function() { return /* binding */ updateArchivedComponentBeforeSave; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-notifications */ "@elementor/editor-notifications"); /* harmony import */ var _elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_1__); const failedNotification = message => ({ type: 'error', message: `Failed to archive components: ${message}`, id: 'failed-archived-components-notification' }); const updateArchivedComponentBeforeSave = async status => { try { const archivedComponents = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getArchivedThisSession(); if (!archivedComponents.length) { return; } const result = await _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.apiClient.updateArchivedComponents(archivedComponents, status); const failedIds = result.failedIds.join(', '); if (failedIds) { (0,_elementor_editor_notifications__WEBPACK_IMPORTED_MODULE_1__.notify)(failedNotification(failedIds)); } } catch (error) { throw new Error(`Failed to update archived components: ${error}`); } }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/sync/update-component-title-before-save.ts": /*!*********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/sync/update-component-title-before-save.ts ***! \*********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ updateComponentTitleBeforeSave: function() { return /* binding */ updateComponentTitleBeforeSave; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); const updateComponentTitleBeforeSave = async status => { const updatedComponentNames = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getUpdatedComponentNames(); if (!updatedComponentNames.length) { return; } const result = await _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.apiClient.updateComponentTitle(updatedComponentNames, status); if (result.failedIds.length === 0) { _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsActions.cleanUpdatedComponentNames(); } }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/apply-overridables-to-elements.ts": /*!******************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/apply-overridables-to-elements.ts ***! \******************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ applyOverridablesToElements: function() { return /* binding */ applyOverridablesToElements; } /* harmony export */ }); function applyOverridablesToElements(elements, overridableProps) { Object.values(overridableProps.props).forEach(prop => { const element = findElementById(elements, prop.elementId); if (!element?.settings) { return; } element.settings[prop.propKey] = { $$type: 'overridable', value: { override_key: prop.overrideKey, origin_value: element.settings[prop.propKey] } }; }); } function findElementById(elements, targetId) { for (const element of elements) { if (element.id === targetId) { return element; } if (element.elements) { const found = findElementById(element.elements, targetId); if (found) { return found; } } } return null; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/can-show-angie-elementor-promotion.ts": /*!**********************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/can-show-angie-elementor-promotion.ts ***! \**********************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ canShowAngieElementorPromotion: function() { return /* binding */ canShowAngieElementorPromotion; } /* harmony export */ }); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-mcp */ "@elementor/editor-mcp"); /* harmony import */ var _elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__); function canShowAngieElementorPromotion() { if ((0,_elementor_editor_mcp__WEBPACK_IMPORTED_MODULE_0__.isAngieAvailable)()) { return true; } return !!window.elementor?.config?.user?.is_administrator; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/component-form-schema.ts": /*!*********************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/component-form-schema.ts ***! \*********************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ MIN_NAME_LENGTH: function() { return /* binding */ MIN_NAME_LENGTH; }, /* harmony export */ createBaseComponentSchema: function() { return /* binding */ createBaseComponentSchema; }, /* harmony export */ createSubmitComponentSchema: function() { return /* binding */ createSubmitComponentSchema; } /* harmony export */ }); /* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/schema */ "@elementor/schema"); /* harmony import */ var _elementor_schema__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_schema__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); /* harmony import */ var _wordpress_i18n__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__); const MIN_NAME_LENGTH = 2; const MAX_NAME_LENGTH = 50; const baseComponentSchema = _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.string().trim().max(MAX_NAME_LENGTH, (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Component name is too long. Please keep it under 50 characters.', 'elementor-pro')); const createBaseComponentSchema = existingNames => { return _elementor_schema__WEBPACK_IMPORTED_MODULE_0__.z.object({ componentName: baseComponentSchema.refine(value => !existingNames.includes(value), { message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Component name already exists', 'elementor-pro') }) }); }; const createSubmitComponentSchema = existingNames => { const baseSchema = createBaseComponentSchema(existingNames); return baseSchema.extend({ componentName: baseSchema.shape.componentName.refine(value => value.length > 0, { message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Component name is required.', 'elementor-pro') }).refine(value => value.length >= MIN_NAME_LENGTH, { message: (0,_wordpress_i18n__WEBPACK_IMPORTED_MODULE_1__.__)('Component name is too short. Please enter at least 2 characters.', 'elementor-pro') }) }); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/component-name-validation.ts": /*!*************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/component-name-validation.ts ***! \*************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ validateComponentName: function() { return /* binding */ validateComponentName; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _component_form_schema__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./component-form-schema */ "./packages/packages/pro/editor-components-extended/src/utils/component-form-schema.ts"); function validateComponentName(label) { const existingComponentTitles = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getComponents()?.map(({ name }) => name) ?? []; const schema = (0,_component_form_schema__WEBPACK_IMPORTED_MODULE_1__.createSubmitComponentSchema)(existingComponentTitles); const result = schema.safeParse({ componentName: label.toLowerCase() }); if (result.success) { return { isValid: true, errorMessage: null }; } const formattedErrors = result.error.format(); const errorMessage = formattedErrors.componentName?._errors[0] ?? formattedErrors._errors[0]; return { isValid: false, errorMessage }; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/create-component-model.ts": /*!**********************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/create-component-model.ts ***! \**********************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ createComponentModel: function() { return /* binding */ createComponentModel; } /* harmony export */ }); const createComponentModel = component => { return { elType: 'widget', widgetType: 'e-component', settings: { component_instance: { $$type: 'component-instance', value: { component_id: { $$type: 'number', value: component.id ?? component.uid } } } }, editor_settings: { component_uid: component.uid } }; }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/get-container-for-new-element.ts": /*!*****************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/get-container-for-new-element.ts ***! \*****************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ getContainerForNewElement: function() { return /* binding */ getContainerForNewElement; } /* harmony export */ }); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__); const getContainerForNewElement = () => { const currentDocumentContainer = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.getCurrentDocumentContainer)(); const selectedElement = getSelectedElementContainer(); let container, options; if (selectedElement) { switch (selectedElement.model.get('elType')) { case 'widget': { container = selectedElement?.parent; const selectedElIndex = selectedElement.view?._index ?? -1; if (selectedElIndex > -1) { options = { at: selectedElIndex + 1 }; } break; } case 'section': { container = selectedElement?.children?.[0]; break; } default: { container = selectedElement; break; } } } return { container: container ?? currentDocumentContainer, options }; }; function getSelectedElementContainer() { const selectedElements = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.getSelectedElements)(); if (selectedElements.length !== 1) { return undefined; } return (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.getContainer)(selectedElements[0].id); } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/is-editing-component.ts": /*!********************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/is-editing-component.ts ***! \********************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ isEditingComponent: function() { return /* binding */ isEditingComponent; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); function isEditingComponent() { return _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentsSelectors.getCurrentComponentId() !== null; } /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/replace-element-with-component.ts": /*!******************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/replace-element-with-component.ts ***! \******************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ replaceElementWithComponent: function() { return /* binding */ replaceElementWithComponent; } /* harmony export */ }); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _create_component_model__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./create-component-model */ "./packages/packages/pro/editor-components-extended/src/utils/create-component-model.ts"); const replaceElementWithComponent = (element, component) => { return (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_0__.replaceElement)({ currentElementId: element.id, newElement: (0,_create_component_model__WEBPACK_IMPORTED_MODULE_1__.createComponentModel)(component), withHistory: false }); }; /***/ }), /***/ "./packages/packages/pro/editor-components-extended/src/utils/revert-overridable-settings.ts": /*!***************************************************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/utils/revert-overridable-settings.ts ***! \***************************************************************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ revertAllOverridablesInContainer: function() { return /* binding */ revertAllOverridablesInContainer; }, /* harmony export */ revertAllOverridablesInElementData: function() { return /* binding */ revertAllOverridablesInElementData; }, /* harmony export */ revertElementOverridableSetting: function() { return /* binding */ revertElementOverridableSetting; } /* harmony export */ }); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @elementor/editor-components */ "@elementor/editor-components"); /* harmony import */ var _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @elementor/editor-elements */ "@elementor/editor-elements"); /* harmony import */ var _elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__); function revertElementOverridableSetting(elementId, settingKey, originValue, overrideKey) { const container = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getContainer)(elementId); if (!container) { return; } if ((0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.isComponentInstance)(container.model.toJSON())) { revertComponentInstanceOverridableSetting(elementId, overrideKey); return; } (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.updateElementSettings)({ id: elementId, props: { [settingKey]: originValue ?? null }, withHistory: false }); } function revertComponentInstanceOverridableSetting(elementId, overrideKey) { const setting = (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getElementSetting)(elementId, 'component_instance'); const componentInstance = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstancePropTypeUtil.extract(setting); const overrides = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstanceOverridesPropTypeUtil.extract(componentInstance?.overrides); if (!overrides?.length) { return; } const revertedOverrides = revertComponentInstanceOverrides(overrides, overrideKey); const updatedSetting = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstancePropTypeUtil.create({ ...componentInstance, overrides: _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstanceOverridesPropTypeUtil.create(revertedOverrides) }); (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.updateElementSettings)({ id: elementId, props: { component_instance: updatedSetting }, withHistory: false }); } function revertComponentInstanceOverrides(overrides, filterByKey) { return overrides.map(item => { if (!_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentOverridablePropTypeUtil.isValid(item)) { return item; } if (!_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstanceOverridePropTypeUtil.isValid(item.value.origin_value)) { return null; } if (filterByKey && item.value.override_key !== filterByKey) { return item; } return item.value.origin_value; }).filter(item => item !== null); } function revertOverridablePropsFromSettings(settings) { let hasChanges = false; const revertedSettings = {}; for (const [key, value] of Object.entries(settings)) { if (_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentOverridablePropTypeUtil.isValid(value)) { revertedSettings[key] = value.value.origin_value; hasChanges = true; } else { revertedSettings[key] = value; } } return { hasChanges, settings: revertedSettings }; } function revertAllOverridablesInElementData(elementData) { const revertedElement = { ...elementData }; if ((0,_elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.isComponentInstance)({ widgetType: elementData.widgetType, elType: elementData.elType })) { revertedElement.settings = revertComponentInstanceSettings(elementData.settings); } else if (revertedElement.settings) { const { settings } = revertOverridablePropsFromSettings(revertedElement.settings); revertedElement.settings = settings; } if (revertedElement.elements) { revertedElement.elements = revertedElement.elements.map(revertAllOverridablesInElementData); } return revertedElement; } function revertComponentInstanceSettings(settings) { if (!settings?.component_instance) { return settings; } const componentInstance = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstancePropTypeUtil.extract(settings.component_instance); const overrides = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstanceOverridesPropTypeUtil.extract(componentInstance?.overrides); if (!overrides?.length) { return settings; } const revertedOverrides = revertComponentInstanceOverrides(overrides); return { ...settings, component_instance: _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstancePropTypeUtil.create({ ...componentInstance, overrides: _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstanceOverridesPropTypeUtil.create(revertedOverrides) }) }; } function revertAllOverridablesInContainer(container) { (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.getAllDescendants)(container).forEach(element => { if (element.model.get('widgetType') === _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.COMPONENT_WIDGET_TYPE) { revertComponentInstanceOverridesInElement(element); } else { revertElementSettings(element); } }); } function revertComponentInstanceOverridesInElement(element) { const settings = element.settings?.toJSON() ?? {}; const componentInstance = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstancePropTypeUtil.extract(settings.component_instance); const overrides = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstanceOverridesPropTypeUtil.extract(componentInstance?.overrides); if (!overrides?.length) { return; } const revertedOverrides = revertComponentInstanceOverrides(overrides); const updatedSetting = _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstancePropTypeUtil.create({ ...componentInstance, overrides: _elementor_editor_components__WEBPACK_IMPORTED_MODULE_0__.componentInstanceOverridesPropTypeUtil.create(revertedOverrides) }); (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.updateElementSettings)({ id: element.id, props: { component_instance: updatedSetting }, withHistory: false }); } function revertElementSettings(element) { const settings = element.settings?.toJSON() ?? {}; const { hasChanges, settings: revertedSettings } = revertOverridablePropsFromSettings(settings); if (!hasChanges) { return; } (0,_elementor_editor_elements__WEBPACK_IMPORTED_MODULE_1__.updateElementSettings)({ id: element.id, props: revertedSettings, withHistory: false }); } /***/ }), /***/ "react": /*!**************************!*\ !*** external ["React"] ***! \**************************/ /***/ (function(module) { module.exports = window["React"]; /***/ }), /***/ "react-dom": /*!*****************************!*\ !*** external ["ReactDOM"] ***! \*****************************/ /***/ (function(module) { module.exports = window["ReactDOM"]; /***/ }), /***/ "@elementor/core-adapter-utils": /*!***************************************************!*\ !*** external ["elementorV2","coreAdapterUtils"] ***! \***************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["coreAdapterUtils"]; /***/ }), /***/ "@elementor/editor": /*!*****************************************!*\ !*** external ["elementorV2","editor"] ***! \*****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editor"]; /***/ }), /***/ "@elementor/editor-canvas": /*!***********************************************!*\ !*** external ["elementorV2","editorCanvas"] ***! \***********************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorCanvas"]; /***/ }), /***/ "@elementor/editor-components": /*!***************************************************!*\ !*** external ["elementorV2","editorComponents"] ***! \***************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorComponents"]; /***/ }), /***/ "@elementor/editor-controls": /*!*************************************************!*\ !*** external ["elementorV2","editorControls"] ***! \*************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorControls"]; /***/ }), /***/ "@elementor/editor-current-user": /*!****************************************************!*\ !*** external ["elementorV2","editorCurrentUser"] ***! \****************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorCurrentUser"]; /***/ }), /***/ "@elementor/editor-documents": /*!**************************************************!*\ !*** external ["elementorV2","editorDocuments"] ***! \**************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorDocuments"]; /***/ }), /***/ "@elementor/editor-editing-panel": /*!*****************************************************!*\ !*** external ["elementorV2","editorEditingPanel"] ***! \*****************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorEditingPanel"]; /***/ }), /***/ "@elementor/editor-elements": /*!*************************************************!*\ !*** external ["elementorV2","editorElements"] ***! \*************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorElements"]; /***/ }), /***/ "@elementor/editor-elements-panel": /*!******************************************************!*\ !*** external ["elementorV2","editorElementsPanel"] ***! \******************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorElementsPanel"]; /***/ }), /***/ "@elementor/editor-mcp": /*!********************************************!*\ !*** external ["elementorV2","editorMcp"] ***! \********************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorMcp"]; /***/ }), /***/ "@elementor/editor-notifications": /*!******************************************************!*\ !*** external ["elementorV2","editorNotifications"] ***! \******************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorNotifications"]; /***/ }), /***/ "@elementor/editor-panels": /*!***********************************************!*\ !*** external ["elementorV2","editorPanels"] ***! \***********************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorPanels"]; /***/ }), /***/ "@elementor/editor-templates-extended": /*!**********************************************************!*\ !*** external ["elementorV2","editorTemplatesExtended"] ***! \**********************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorTemplatesExtended"]; /***/ }), /***/ "@elementor/editor-ui": /*!*******************************************!*\ !*** external ["elementorV2","editorUi"] ***! \*******************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorUi"]; /***/ }), /***/ "@elementor/editor-v1-adapters": /*!***************************************************!*\ !*** external ["elementorV2","editorV1Adapters"] ***! \***************************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["editorV1Adapters"]; /***/ }), /***/ "@elementor/events": /*!*****************************************!*\ !*** external ["elementorV2","events"] ***! \*****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["events"]; /***/ }), /***/ "@elementor/http-client": /*!*********************************************!*\ !*** external ["elementorV2","httpClient"] ***! \*********************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["httpClient"]; /***/ }), /***/ "@elementor/icons": /*!****************************************!*\ !*** external ["elementorV2","icons"] ***! \****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["icons"]; /***/ }), /***/ "@elementor/license-api": /*!*********************************************!*\ !*** external ["elementorV2","licenseApi"] ***! \*********************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["licenseApi"]; /***/ }), /***/ "@elementor/schema": /*!*****************************************!*\ !*** external ["elementorV2","schema"] ***! \*****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["schema"]; /***/ }), /***/ "@elementor/store": /*!****************************************!*\ !*** external ["elementorV2","store"] ***! \****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["store"]; /***/ }), /***/ "@elementor/ui": /*!*************************************!*\ !*** external ["elementorV2","ui"] ***! \*************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["ui"]; /***/ }), /***/ "@elementor/utils": /*!****************************************!*\ !*** external ["elementorV2","utils"] ***! \****************************************/ /***/ (function(module) { module.exports = window["elementorV2"]["utils"]; /***/ }), /***/ "@wordpress/i18n": /*!******************************!*\ !*** external ["wp","i18n"] ***! \******************************/ /***/ (function(module) { module.exports = window["wp"]["i18n"]; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ if (!(moduleId in __webpack_modules__)) { /******/ delete __webpack_module_cache__[moduleId]; /******/ var e = new Error("Cannot find module '" + moduleId + "'"); /******/ e.code = 'MODULE_NOT_FOUND'; /******/ throw e; /******/ } /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /******/ /* webpack/runtime/make namespace object */ /******/ !function() { /******/ // define __esModule on exports /******/ __webpack_require__.r = function(exports) { /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ }(); /******/ /************************************************************************/ var __webpack_exports__ = {}; // This entry needs to be wrapped in an IIFE because it needs to be isolated against other modules in the chunk. !function() { /*!***********************************************************************!*\ !*** ./packages/packages/pro/editor-components-extended/src/index.ts ***! \***********************************************************************/ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ init: function() { return /* reexport safe */ _init__WEBPACK_IMPORTED_MODULE_0__.init; } /* harmony export */ }); /* harmony import */ var _init__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./init */ "./packages/packages/pro/editor-components-extended/src/init.ts"); }(); (window.elementorV2 = window.elementorV2 || {}).editorComponentsExtended = __webpack_exports__; /******/ })() ; window.elementorV2.editorComponentsExtended?.init?.(); Blog – Page 2476 – Toadak Homes and Investments
CategoriesUncategorized

The Evolution of Casual Gaming: From Flappy Bird to Modern Mobile Classics

In recent years, the landscape of casual gaming has undergone a seismic shift, driven by advances in technology, shifts in player expectations, and the proliferation of mobile devices. Today, casual games are not just simple distractions but are complex, engaging experiences that serve as social connectors, stress relievers, and competitive outlets. Understanding this evolution is crucial for both developers aiming to innovate and enthusiasts seeking the next hit game. This article explores the trajectory of casual gaming, with particular focus on game mechanics, community engagement, and the role of embedded gameplay experiences—highlighting how engaging in activities like play crash games can enrich this landscape.

The Genesis of Casual Games and Their Rise in Popularity

Casual games originated as simplified versions of more complex titles, designed to attract a broad audience with minimal barriers to entry. Early examples include Tetris and Puzzle Bobble, which combined straightforward mechanics with addictive gameplay. As smartphones became ubiquitous, titles like Angry Birds and FarmVille demonstrated the immense potential of touch-based, easy-to-learn games that could be enjoyed in short bursts.

Key Milestones in Casual Gaming
Year Game / Event Impact
2009 Launch of Doodle Jump Set standards for physics-based casual gameplay
2012 Flappy Bird phenomenon Showcased viral potential of simple mechanics
2015 Introduction of Clash of Clans Transitioned casual to social and strategic gameplay

The Current Landscape: Complexity Meets Accessibility

Today, the casual gaming sphere is marked by a delicate balance. Titles such as Among Us and Cookie Clicker exemplify how simple interfaces can be layered with complexity and social interaction, resulting in experiences that are easy to start but rewarding to master. Moreover, the rise of free-to-play models with in-game monetisation has changed economic dynamics, creating a sustainable ecosystem for both developers and players.

“As casual games evolve, the lines between pure entertainment and meaningful engagement blur—players seek experiences that are quick to access yet rich enough to return to.” — Industry Expert, GamesIndustry.biz

The Role of Embedded Gameplay Mechanics in Player Retention

One prominent trend is the incorporation of mini-games and embedded challenges that diversify gameplay within a single platform. For instance, resource management, puzzle solving, and social interactions are now blended into cohesive experiences. This trend not only enhances replay value but also fosters communities based around shared challenges.

Narrative and Social Mechanics Enhancing Engagement

Beyond pure mechanics, the narrative elements and social features embedded in casual games facilitate long-term engagement. Leaderboards, shared achievements, and cooperative tasks create a sense of belonging and rivalry, encouraging players to invest more time and emotionally connect to the game environment.

Embedding Competitive Mini-Games: A Case Study in Crash Gaming

Within this context, play crash games exemplifies a genre that perfectly marries simplicity with competitive thrill. Crash games—such as those featured on the referenced site—are typically fast-paced, high-stakes titles where players must time their actions precisely to maximise gains or avoid losses. These games effectively serve as casual yet engaging diversions, capable of maintaining user interest through instant feedback, escalating stakes, and social sharing mechanics.

Why Crash Games Resonate with Casual Players

  • Immediate gratification: Quick rounds lead to quick wins or losses, fueling repeat gameplay.
  • Skill-based challenge: Players can improve through practice, fostering a sense of achievement.
  • Social competitive edge: Sharing high scores or wins encourages peer interaction.

Future Trends: From Mobile to Metaverse

Looking ahead, the integration of augmented reality (AR), virtual reality (VR), and social platforms will redefine casual gaming. As these technologies mature, expect more immersive mini-games and interactive experiences that capitalize on the foundations laid by simple, addictive titles like crash games.

Conclusion: A New Era of Casual Engagement

The evolution of casual games reflects a broader trend in digital entertainment—prioritising accessibility without sacrificing depth or community. The proliferation of genre-blending, embedded gameplay, and social mechanics ensures that casual gaming remains relevant and vibrant. In particular, innovations such as play crash games exemplify how even the simplest gaming experiences can serve as influential platforms for social interaction and skill development. As developers and players continue to explore this space, the potential for creative, engaging, and inclusive gaming experiences remains limitless.

*Acknowledgement: This analysis draws on industry data, gameplay trends, and curated examples to highlight the ongoing vitality of casual gaming, emphasizing responsible and informed content creation in the digital age.
CategoriesUncategorized

The Evolution of Mobile-Optimized Online Gaming Platforms in the Digital Age

In recent years, the landscape of online gaming has undergone a remarkable transformation driven by advances in mobile technology, changing consumer behavior, and the need for seamless user experiences. Today’s players demand instant access to games anytime and anywhere, compelling developers and platforms to innovate continuously. This shift has led to a growing focus on mobile-optimized gaming environments that blend entertainment, accessibility, and security within simple interfaces.

Understanding the Shift: From Desktop to Mobile

Aspect Desktop-Centric Gaming Mobile-Optimized Gaming
Access Point High-performance PCs, consoles Smartphones, tablets
User Experience Complex interfaces, longer sessions Streamlined interfaces, brief sessions
Game Delivery Download-heavy PC clients, physical media Instant Web-based or app-based access
Engagement Patterns Extended playing periods, social gaming on PCs Quick, on-the-go gameplay, microtransactions

This transition reflects broader digital trends emphasizing mobility, convenience, and personalization. Notably, the rise of online gambling and skill-based gaming platforms has paralleled this shift, demanding robust, user-friendly mobile solutions that maintain the integrity of gameplay while ensuring regulatory compliance.

Key Factors Driving Mobile Gaming Platform Development

“The potential of mobile platforms to democratize access is unprecedented. As of 2023, approximately 3.5 billion people worldwide use smartphones for gaming, accounting for nearly 54% of the global gaming market,” states industry analyst Jordan Smith.

  • Technological Advancements: 5G connectivity, high-refresh-rate screens, and powerful processors enable complex games to run smoothly on mobile devices.
  • User Experience Design: Intuitive interfaces, touch controls, and adaptive layouts enhance engagement without compromising functionality.
  • Security & Fair Play: robust encryption, identity verification, and randomized algorithms uphold integrity, especially critical in online betting or skill-based games like Trickex Rouge.
  • Regulatory Adaptation: Platforms now often work within diverse legal frameworks, incorporating measures that facilitate compliance across jurisdictions.

The Case of Trickex Rouge: Integrating Mobile Accessibility

One contesting example of an innovative platform that exemplifies these trends is Trickex Rouge. As a versatile online gaming and betting solution, the platform prioritizes mobile interaction by allowing users to play Trickex Rouge online on mobile. This approach offers several compelling benefits:

  • Accessibility: Instant access anywhere, removing the need for bulky desktops or physical arcades.
  • Engagement: Extended play sessions are replaced with quick, thrilling rounds fitting urban lifestyles.
  • Security & Fairness: Advanced encryption and real-time monitoring uphold transparency, attracting serious players.
  • Cross-Platform Consistency: Seamless user experience across devices ensures loyalty regardless of how players connect.

Industry Insights: The Future of Mobile Gaming Platforms

Emerging trends suggest that we are on the cusp of even more sophisticated developments in mobile gaming, including augmented reality (AR), blockchain-based assets, and AI-driven personalization. Companies that invest in mobile-first architectures—like Trickex Rouge—are positioned to lead, given their focus on user experience, security, and regulatory compliance.

Future Innovation Implication for Platforms
AR & VR Integration Enhanced immersive experiences accessible via mobile devices
Blockchain & Crypto Secure, transparent transactions and asset ownership
AI Personalization Tailored game suggestions and adaptive difficulty levels

Conclusion: Embracing the Mobile-First Future

The ongoing evolution of online gaming platforms underscores a clear industry trajectory toward mobile dominance. Platforms like Trickex Rouge demonstrate that when technological innovation converges with user-centric design, the result is not only increased engagement but also a sustainable competitive advantage. For players, this translates to an accessible, secure, and exhilarating gaming experience—no matter where they are.

To experience the future of mobile gaming firsthand, consider play Trickex Rouge online on mobile and see how innovative gaming becomes effortless at your fingertips.
CategoriesUncategorized

Optimising Well-Being Through Innovative Digital Tools: The Rise of Personalized Lifestyle Games

Den moderna eran präglas av en ständig ström av digitala lösningar som syftar till att förbättra individens livskvalitet och personliga utveckling. Under de senaste åren har ett tydligt mantra vuxit fram inom hälsa- och välmåendebranschen: att göra positiv förändring både tillgänglig och engagerande. En av de innovativa trenderna som nu får allt större genomslag är personligt anpassade digitala spel och appar som syftar till att motivera individer till att nå sina mål för hälsa, balans och personlig tillväxt.

Det Vetenskapliga Grunderna för Digitala Spel inom Hälsa och Välmående

Forskning visar att gamification – att använda spelmekanismer i icke-spelmiljöer – kan avsevärt öka motivationen och engagemanget för hälsorelaterade beteendeförändringar. En stor meta-analys publicerad i Journal of Medical Internet Research (2022) visade att användare av hälsorelaterade appar med gamification-element rapporterar högre följsamhet och bättre resultat jämfört med mer konventionella metoder.

De mest framgångsrika verktygen kombinerar element som poängsystem, nivåer, utmaningar, belöningssystem och community-funktioner för att skapa en motivator som känns både personligt meningsfull och stimulerande. Genom att personalisera dessa element kan apputvecklare rikta sig till användarnas individuella mål och utmaningar, vilket bidrar till att skapa en långsiktig vana snarare än en tillfällig insats.

Personliga Strategier och Digitala Spel

Dimension Effekt Exempel på Verktyg
Motivation Högre följsamhet genom belöningssystem Digitala spel som belönar regelbunden träning eller mindfulness-övningar
Engagemang Ständig feedback och progression håller användaren engagerad Progressionsspel som justerar svårighetsgraden efter användarens utveckling
Adaption Individanpassade utmaningar skapar meningsfulla mål Appar som analyserar data för att erbjuda skräddarsydda rekommendationer

Digitala Verktyg som Förändrar Hur Vi Hanterar Välbefinnande

En särskilt intressant utveckling är integrationen av sådana verktyg i dagliga rutiner, vilket möjliggör en mer holistisk syn på hälsa. Plattformar som använder avancerad dataanalys och artificiell intelligens kan inte bara spåra prestationer utan också hjälpa användare att förstå sina mönster och utmana sig själva på ett hållbart sätt. Ett exempel är [den interaktiva digitala plattformen](https://life-score-game.app/sv/), där man kan spela Life Score Game online nu, ett innovativt spel som utgår från att mäta och förbättra personlig livskvalitet genom spelbaserade aktiviteter.

“Digitala spel för hälsa är inte längre bara underhållning — de är kraftfulla verktyg för att skapa riktiga förändringar i människors liv.” – Dr. Eva Larsdotter, expertexpert inom digital hälsa, 2023

Framtiden för Digitala Välmåendespel

Det är tydligt att framtidens hälsoteknologier kommer att vara ännu mer individualiserade, integrerade och emotionellt engagerande. Med hjälp av AI, virtual reality och sociala funktioner kommer dessa verktyg att erbjuda mer personaliserade och motiverande upplevelser. Forskning pekar på att användare som visualiserar sina framsteg och får positiv förstärkning är mer benägna att upprätthålla hälsosamma vanor på lång sikt.

Slutsats: En Ny Era av Digital Personlig Utveckling

I takt med att vi inser vikten av att ta hand om vårt välbefinnande i en snabbföränderlig värld, blir verktyg som kombinerar spel, dataanalys och personligt anpassning avgörande. Digitala plattformar som exempelvis spela Life Score Game online nu representerar en ny typ av hälsorelaterad teknologi – en som gör det lättare, roligare och mer meningsfullt att nå sina mål.

Är du redo att ta kontroll över din livskvalitet? Utforska de innovativa möjligheterna idag och se hur spelbaserade hälsovariationer kan förändra ditt liv.
CategoriesUncategorized

Come Scegliere Casinò Online Sicuri: Guida all’Affidabilità e alla Sicurezza nel Gioco Digitale

Negli ultimi anni, il settore dei casinò online ha sperimentato una crescita esponenziale, portando con sé nuove opportunità di intrattenimento ma anche nuove sfide in termini di sicurezza e affidabilità. Per chi si immerge nel mondo del gioco digitale, scegliere piattaforme affidabili è fondamentale per tutelare i propri dati personali e le proprie risorse finanziarie.

L’evoluzione del mercato dei casinò online in Italia

Il mercato italiano è tra i più sviluppati in Europa, con un fatturato che ha superato i €2 miliardi nel 2022, secondo i dati dell’Aams (Agenzia delle Dogane e dei Monopoli). Questa crescita è alimentata dalla digitalizzazione di servizi di gioco, dall’aumento della penetrazione di smartphone e dall’eccezionale offerta di giochi disponibili. Tuttavia, l’espansione del settore ha anche attirato operatori poco affidabili, creando la necessità di orientarsi tra piattaforme verificate e licensee.

Quali sono i criteri per definire un casinò online sicuro?

Per garantire un’esperienza di gioco protetta e trasparente, gli esperti consigliano di valutare diversi aspetti chiave prima di iscriversi e depositare fondi:

  • Licenza ufficiale: La presenza di una licenza rilasciata dall’Agenzia delle Dogane e dei Monopoli (ADM) è il primo indicatore di affidabilità.
  • Sistema di sicurezza: Protocollo SSL, crittografia dei dati e misure anti-frode sono essenziali per la protezione delle informazioni personali.
  • Reputazione e recensioni: La verifica di feedback e recensioni di altri utenti aiuta a comprendere l’affidabilità complessiva della piattaforma.
  • Metodi di pagamento sicuri: La disponibilità di metodi affidabili e trasparenti, come carte di credito e portafogli digitali, è un elemento di tutela.
  • Trasparenza nei termini: Condizioni chiare su bonus, prelievi e requisiti di scommessa garantiscono un’esperienza senza sorprese.

Il ruolo di piattaforme di confronto e recensione affidabili

Nel panorama attuale, le directory online che raccolgono e verificano le recensioni delle piattaforme di gioco rappresentano strumenti preziosi per gli utenti. Tra queste, alcune si distinguono per approfondimenti dettagliati e dati verificati, contribuendo a elevare gli standard di trasparenza.

Ad esempio, consultando fonti specializzate, si può trovare una lista di casinò online sicuri che rispettano rigorosi criteri di sicurezza, licenza e trasparenza. Queste risorse sono fondamentali per informare le scelte di gioco, riducendo il rischio di incappare in piattaforme poco affidabili.

Case study: l’importanza della regolamentazione

Caratteristica Affidabilità di un Casinò Regolamentato Rischi di piattaforme non regolamentate
Licenza e autorizzazioni Emissione da enti riconosciuti (es. ADM, MGA) Fondi non garantiti, mancanza di sicurezza legale
Sistemi di sicurezza tecnologici Certificazioni SSL e audit periodici Possibilità di frodi e furto dati
Recensioni utenti e feedback Recensioni trasparenti e verificabili Recensioni false o fuorvianti

Conclusioni: la necessità di un comportamento consapevole

La scelta di un casinò online sicuri è il miglior investimento che un giocatore può fare per tutelare la propria esperienza di gioco. La sicurezza non è solo una questione di tecnologie, ma anche di cultura e consapevolezza. Investire tempo nella ricerca, affidarsi a fonti di qualità e prediligere piattaforme trasparenti sono pratiche che aiuteranno a prevenire rischi e a godersi il gioco in modo responsabile.

Ricordate:

  • Controllate sempre la licenza ufficiale del casinò.
  • Sempre preferire piattaforme con certificazioni di sicurezza.
  • Utilizzate metodi di pagamento affidabili.
  • Leggete le recensioni e le opinioni di altri utenti.

Per approfondire la sicurezza nei giochi online, consultate le risorse affidabili come casinò online sicuri.

CategoriesUncategorized

Jeux d’argent responsables : un enjeu stratégique pour l’industrie du gaming en ligne

Dans un contexte où le marché mondial des jeux d’argent en ligne poursuit une croissance exponentielle, la responsabilité sociale est devenue un élément central pour les opérateurs et les régulateurs. La préoccupation grandissante pour le bien-être des joueurs ne concerne pas uniquement l’éthique, mais aussi la pérennité de l’industrie elle-même. Pour assurer une croissance durable, il est crucial d’intégrer des stratégies de jeux d’argent responsables, soutenues par des outils et des bonnes pratiques fondées sur des données et une expertise solide.

La croissance du secteur en France et ses enjeux

Le marché français du jeu en ligne affiche une embellie notable depuis l’ouverture régulée du secteur en 2010. Selon l’Autorité Nationale des Jeux (ANJ), le chiffre d’affaires généré par le secteur en 2022 a dépassé 2,5 milliards d’euros, en hausse de 12 % par rapport à l’année précédente. Cependant, cette croissance s’accompagne de défis majeurs, notamment en matière de prévention de l’addiction et de protection des joueurs vulnérables.

Les études indiquent que près de 1 à 2 % de la population française pourrait présenter des comportements problématiques liés au jeu, impactant leur vie personnelle, financière et sociale. Ces chiffres soulignent la nécessité pour les acteurs du secteur d’adopter une approche proactive, en s’appuyant notamment sur des stratégies de jeu responsable conçues pour préserver la santé mentale et financière des utilisateurs.

Les leviers pour promouvoir un gaming responsable

1. La prévention et l’éducation

Informer et sensibiliser les joueurs demeure la première étape. Passeport de l’industrie, campagnes de communication, outils éducatifs — tout doit converger vers une meilleure connaissance des risques. Par exemple, certains opérateurs offrent des ressources éducatives, telles que des guides ou des modules interactifs pour aider les joueurs à comprendre leur propre comportement face au jeu.

2. La mise en place d’outils de gestion

Les plateformes intègrent désormais des fonctionnalités de limitation, comme les plafonds de dépôt ou les durées de session. Ces dispositifs, souvent assistés par des algorithmes de détection précoce, permettent d’agir en amont. La clé est de conjuguer ces outils avec une modération humaine et des interventions rapides en cas de comportements à risque.

3. La conformité réglementaire

Les régulateurs français, notamment l’ANJ, imposent des obligations strictes en matière de jeu responsable. La certification des plateformes, la transparence doit s’accompagner d’une capacité de retrait rapide en cas de comportement problématique, ainsi que d’une surveillance continue pour ajuster les mesures en temps réel.

L’importance de partenariats et d’expertises indépendantes

L’intégration de ressources extérieures, telles que des organismes spécialisés dans le traitement des addictions, participe à l’enrichissement de la démarche responsable. Certaines plateformes collaborent avec des centres de traitement ou proposent des liens vers des services d’aide directement à partir de leur interface, renforçant ainsi la crédibilité de leur engagement.

Ce contexte rend encore plus essentiel le recours à des références et sources crédibles dans l’élaboration des stratégies. À cet effet, des opérateurs se tournent vers des outils et ressources experts, notamment pour informer leur politiques internes et leurs programmes de prévention.

Une référence crédible en matière de jeu responsable

Parmi ces ressources, le site towerrush-machine.fr constitue une référence précieuse pour la promotion d’un jeux d’argent responsables. Il offre une analyse approfondie des enjeux liés à la responsabilité dans le domaine, tout en proposant des outils concrets pour gérer la pratique du jeu de façon saine et équilibrée.

« La responsabilisation des joueurs passe par des outils accessibles, une information transparente et une réglementation stricte, essentielles pour un secteur durable. » — Expertise sectorielle, Towerrush Machine

Conclusion : vers un secteur plus mature et éthique

Dans une industrie en pleine mutation technologique et réglementaire, la responsabilité sociale ne doit pas être considérée comme une contrainte, mais comme un levier d’innovation et de différenciation. En misant sur des pratiques exemplaires en matière de jeux d’argent responsables, les acteurs du secteur consolident leur crédibilité, atténuent les risques et assurent une croissance pérenne, centrée sur la santé et le bien-être des joueurs. La collaboration entre régulateurs, opérateurs et experts indépendants constitue la clé pour façonner un avenir où le jeu reste une activité de loisir, encadrée, sûre et éthique.

CategoriesUncategorized

La Gestion de la Vie Privée dans l’Industrie des Parcs d’Attractions : Approche Stratégique et Conformité

Dans un secteur où l’expérience client repose énormément sur la confiance et la sécurité, la gestion des données personnelles occupe une place capitale. Les parcs d’attractions modernes, qu’ils soient physiques ou numériques, doivent conjuguer innovations immersives, divertissement de haut niveau et respect rigoureux de la vie privée. La conformité aux réglementations telles que le Règlement Général sur la Protection des Données (RGPD) et la transparence dans la collecte et le traitement des informations ont ainsi revêtu un rôle stratégique pour assurer la fidélité client, l’image de marque et l’avantage concurrentiel des acteurs du secteur.

Les Enjeux Clés de la Confidentialité dans les Parcs d’Attractions

Enjeu Description Impacts
Protection des données Collecte, stockage et traitement des données personnelles des visiteurs, y compris biométriques et géolocalisation. Réduction des risques légaux, renforcement de la confiance, différenciation sur le marché.
Transparence Information claire sur l’usage des données, consentement explicite, droits des utilisateurs. Amélioration de la relation client, conformité réglementaire évitant sanctions.
Sécurité des infrastructures Systèmes informatiques résistants aux cyberattaques, chiffrage des données sensibles. Préservation de la continuité opérationnelle, prévention des actes malveillants.

Une Approche Holistique : De la Conception à l’Exploitation

Les leaders du marché dans le domaine des parcs d’attractions adoptent aujourd’hui une approche intégrée, où la gestion de la vie privée s’inscrit dès la phase de conception des systèmes numériques. Cela implique notamment la mise en place de politiques internes strictes, l’utilisation d’outils de cryptage de dernière génération et la formation continue des personnels en matière de conformité RGPD.

“Les établissements qui ne traitent pas sérieusement le volet confidentialité risquent aujourd’hui non seulement des amendes financières, mais surtout une perte irréversible de leur crédibilité.” — Expert en conformité numérique

Cas d’Usage : La Traçabilité et la Personnalisation en Toute Sécurité

Les technologies avancées telles que la RFID, la reconnaissance faciale ou la géolocalisation permettent une expérience personnalisée et fluide pour les visiteurs. Cependant, leur utilisation doit impérativement respecter les principes de minimisation des données et de consentement éclairé. En ce sens, la documentation légale – notamment la TOWER RUSH – joue un rôle central dans la transparence et la conformité réglementaire.

Pourquoi la Transparence est la Clé de la Confiance à l’Ère Digitale

Les stratégies de communication autour de la vie privée sont devenues un levier de différenciation stratégique. Les acteurs qui établissent une politique claire, accessible et dynamique, tout comme celui illustré dans TOWER RUSH, gagnent la confiance et fidélisent leur clientèle dans un environnement numérique de plus en plus scruté par la réglementation et l’opinion publique.

En Conclusion : Leadership Responsable et Innovation Responsable

Les parcs d’attractions modernes évoluent dans un écosystème où la balance entre innovation immersive, expérience client et respect de la vie privée est plus critique que jamais. En intégrant des pratiques exemplaires telles que celles évoquées dans la politique de confidentialité de TOWER RUSH, les acteurs du secteur démontrent leur engagement à instaurer une relation de confiance durable avec leurs visiteurs.

Une démarche proactive, orientée conformité et transparence, est désormais indispensable pour assurer l’avenir de cette industrie passionnante et technologique.

Découvrir la politique de confidentialité de TOWER RUSH

CategoriesUncategorized

Maximizing Player Engagement and Revenue through High-Variance Slot Strategies in Real-Money Casinos

In the fiercely competitive landscape of online gaming, real-money casinos continuously evolve by integrating innovations that attract and retain players. Among these innovations, the strategic deployment of high-variance, high-payout slot machines stands out as a key driver for both player engagement and revenue optimization. This article explores the intricacies of high-variance slots, emphasizing their strategic potential, selection criteria, and the role they play in a casino’s portfolio. Furthermore, we will analyze how in-depth knowledge about these games can shape effective marketing and player support strategies — including point to an insightful resource that explains just how substantial the win potential can be.

The Role of Variance in Slot Machine Design and Player Experience

In the terrain of slot machine development, variance (or volatility) determines the balance between hit frequency and payout size. Low-variance slots aim to generate frequent, smaller wins, appealing to casual players or those seeking steady entertainment. Conversely, high-variance slots feature infrequent, but significantly larger payouts—these are often perceived as the more exciting, risk-oriented options for experienced players.

For operators, understanding and leveraging variance is fundamental to optimizing the customer journey and revenue streams. High-variance slots tend to attract high-stakes players and thrill-seekers, cultivating a narrative of chance and big wins that can elevate overall engagement levels.

Strategic Deployment of High-Variance Slots in Online Casinos

Successful casino operators curate a portfolio that balances risk and reward for diverse player segments. High-variance slots are often reserved for promotional offers, loyalty schemes, or VIP programs, where players are encouraged to take bigger risks with the allure of a substantial jackpot.

Moreover, these games contribute to the “big-win” culture, which is vital in generating buzz, social sharing, and long-term player retention. Properly analyzing game performance metrics — such as RTP (Return to Player), hit frequency, and maximum payout — allows operators to fine-tune offerings and market campaigns.

Understanding the Big Win Potential of High-Variance Slots

At the heart of high-variance slots’ appeal lies their big win potential. Recognizing the true scope of this potential is essential for players, regulators, and operators alike. Insights into the payout structures, jackpot mechanics, and theoretical risk profiles are vital in designing fair yet enticing games.

For instance, games like “Big Bass Reel Repeat” exemplify this high-stakes appeal, offering chances at substantial payouts and repeat big wins, which can redefine player expectations. To better understand the mechanics and winning prospects of such games, industry professionals often refer to detailed analyses, like the resource titled “Big Bass Reel Repeat big win potential explained” (Big Bass Reel Repeat big win potential explained), which provides comprehensive insights into the game’s payout structure, jackpot triggers, and win frequency.

Industry Insights: Data and Examples Supporting High-Variance Strategies

Game Feature Typical RTP Variance Level Maximum Payout Impact on Player Behavior
Example Slot: Big Bass Reel Repeat 96.5% High $1,000,000 Attracts high-stakes players; encourages riskier gameplay; potential for big wins and repeat jackpots
Average High-Variance Slot 95-97% High $500,000+ Boosts big win narratives; enhances casino’s competitive edge

These data points exemplify why understanding variance and payout structures is crucial for strategic game selection and marketing. Notably, industry leaders leverage a nuanced approach, pairing high-variance titles with targeted promotions to maximize player engagement and lifetime value.

Conclusion: Embracing the Strategic Power of High-Variance Titles

In today’s mature online casino market, success hinges on the ability to balance entertainment, risk, and reward. High-variance slots like “Big Bass Reel Repeat” represent powerful tools for cultivating player excitement and driving revenue, especially when its win potential is fully comprehended. As the industry continues to innovate, leveraging specialized information—such as the detailed analysis found in the resource Big Bass Reel Repeat big win potential explained—becomes indispensable for operators and players aiming to optimize their experiences and strategies.

Ultimately, mastering the nuances of game variance and payout mechanics empowers stakeholders to craft engaging, fair, and profitable gaming environments that resonate with modern players’ appetite for big wins and memorable experiences.

CategoriesUncategorized

Innovazione e Sicurezza nel Mercato delle Slot Machine Online in Italia

Negli ultimi anni, il settore delle slot machine online ha attraversato una trasformazione significativa, guidata dall’evoluzione tecnologica e dall’aumento delle esigenze di sicurezza e trasparenza tra i giocatori italiani. Considerando la regolamentazione sempre più rigorosa e la crescente domanda di intrattenimento digitale di qualità, è essenziale analizzare le tendenze attuali e le opportunità di innovazione nel mercato. Le slot machine online, in particolare, rappresentano il cuore di questa evoluzione, combinando tradizione e innovazione digitale.

La Trasformazione Digitale nel Settore delle Slot Machine

Innovazione Tecnologica e Personalizzazione dell’Esperienza di Gioco

Le aziende leader nel settore hanno investito massicciamente in tecnologia, portando lo sviluppo di piattaforme di gioco più coinvolgenti e sicure. Oggi, le slot machine digitali sono caratterizzate da grafica 3D, effetti sonori immersivi e funzionalità di personalizzazione, in grado di soddisfare le preferenze di un pubblico diversificato. La capacità di adattare le esperienze di gioco alle preferenze individuali si traduce in maggiori tassi di fedeltà e interazione, elementi fondamentali per la crescita sostenibile del settore.

Regolamentazioni e Standard di Sicurezza

Il mercato italiano, regolamentato dall’Agenzia delle Dogane e dei Monopoli (ADM), richiede la conformità a normative rigorose che garantiscano un ambiente di gioco equo e sicuro. Queste normative prevedono l’utilizzo di generatori di numeri casuali (RNG), audit periodici, e sistemi di protezione anti-frode. Un esempio emblematico di questa attenzione alla sicurezza è rappresentato dalle piattaforme che integrano certificazioni di conformità, rendendo affidabili i risultati e proteggendo sia il giocatore che l’operatore.

Le Tendenze Emergenti nel Mercato Italiano

Approccio al Gioco Responsabile e alla Trasparenza

Un aspetto sempre più cruciale è la promozione del gioco responsabile. Le piattaforme moderne integrano strumenti di auto-esclusione, limiti di deposito, e informazioni trasparenti sulle probabilità di vincita. In Italia, questa tendenza è rafforzata dalle normative che richiedono la pubblicazione di payout e statistiche di gioco, aumentando la fiducia tra i consumatori.

Il Ruolo delle Scommesse Aggregate e del Mobile Gaming

Con il crescente utilizzo di dispositivi mobili, le slot machine si sono adattate per offrire un’esperienza senza soluzione di continuità tramite app e piattaforme ottimizzate per smartphone e tablet. Questa evoluzione aumenta la portata del mercato, consentendo di raggiungere players in modo più rapido e diretto. La popolarità delle app di gioco percepibili come sicure e coinvolgenti rappresenta una chiave di successo in Italia.

Casi di Successo e Innovazione Strategica

Un esempio di innovazione di successo nel mercato italiano è rappresentato da piattaforme che adottano Chicken Road 2 slot machine. Questa slot, famosa tra gli appassionati, combina elementi di gameplay tradizionale con componenti innovative come bonus multipli, simboli speciali e un sistema di progressione user-friendly. La sua presenza in numerosi casinò online certificati dimostra come la combinazione di qualità grafica, meccaniche di gioco coinvolgenti e sicurezza possa fungere da modello di crescita per il settore.

Il Futuro delle Slot Machine in Italia: Verso una Gaming Economy più Responsabile

Statistiche Rilevanti del Mercato Italiano delle Slot Machine
Anno Ricavi (milioni €) Numero di Operatori Registrati Quota di Mercato Online (%)
2020 1.200 35 45%
2021 1.500 48 55%
2022 1.800 60 60%

Come mostra la tabella, il comparto online continua a espandersi rapidamente, sostenuto dall’innovazione tecnologica e da un quadro normativo articolato. Gli operatori che investono in recensioni trasparenti, sicurezza e contenuti di qualità, come la piattaforma che offre dettagli approfonditi sui giochi come Chicken Road 2 slot machine, sono destinati a consolidare la propria quota di mercato e a favorire un ecosistema di gioco più responsabile e sostenibile.

Conclusione: Verso un’Industria più Responsabile e Innovativa

Il panorama delle slot machine online in Italia è in fermento, alimentato da innovazione, trasparenza e regolamentazione stringente. La sfida per gli operatori è mantenere un equilibrio tra divertimento e responsabilità, sfruttando le nuove tecnologie per offrire esperienze di gioco sempre più coinvolgenti ma sicure. La presenza di risorse affidabili, come Chicken Road 2 slot machine, supporta questa evoluzione, offrendo esempi concreti di eccellenza e innovazione nel settore.

Solo attraverso un impegno continuo in trasparenza e sviluppo tecnologico l’Italia potrà consolidare la propria leadership nel mercato delle slot machine online, offrendo ai consumatori un intrattenimento di qualità, sicuro e responsabile.

CategoriesUncategorized

L’evoluzione del settore deigiochi di fortuna onlinein Italia: un’analisi approfondita

Introduzione: un mercato in continua trasformazione

Il settore dei giochi di fortuna online rappresenta uno dei comparti più dinamici e scrutinati del panorama regolamentare e economico italiano. Dalla liberalizzazione avvenuta nel 2010, con il recepimento delle direttive europee, fino alle recenti innovazioni tecnologiche, l’evoluzione di questa industria riflette condizioni socioeconomiche, normative e tecnologiche in costante cambiamento. La presenza di piattaforme affidabili e regolamentate, come qui si può approfondire il tema dei giochi di fortuna online, risulta fondamentale per comprendere le tendenze del mercato e i requisiti di sicurezza che garantiscono un ambiente di gioco responsabile.

Normativa e regolamentazione: uno scenario complesso

In Italia, le attività di gioco sono strettamente regolamentate dall’Agenzia delle Dogane e dei Monopoli (ADM), che garantisce la legalità e la tutela dei consumatori. La recente introduzione del framework normativo del 2019 ha rafforzato le misure di sicurezza e trasparenza, imponendo agli operator di adottare elevati standard di protezione dei dati e di prevenzione del gioco d’azzardo patologico.

Il rispetto di queste normative rappresenta un elemento di distinzione tra operatori affidabili e quelli poco trasparenti, creando un ambiente di gioco più sicuro e riconosciuto a livello internazionale. In questa ottica, le piattaforme di alta qualità, come quella rappresentata dal sito chikenroad2-ufficiale.it, si differenziano per la conformità normativa e l’attenta selezione di giochi sicuri e regolamentati.

Innovazioni tecnologiche e nuove tendenze

Uno dei motori principali dello sviluppo nel settore dei giochi di fortuna online è l’innovazione tecnologica. La progressiva diffusione di dispositivi mobili, l’introduzione di intelligenza artificiale, e l’utilizzo di tecnologie di crittografia avanzata hanno rivoluzionato l’esperienza di gioco, rendendola più immersiva e sicura.

Le piattaforme più avanzate, come qui, offrono template di gioco innovativi, bonus personalizzati e funzionalità di analisi dei comportamenti di gioco, rafforzando la responsabilità e la trasparenza.

Analisi di mercato e dati recenti

Anno Fatturato stimato (billioni di €) Crescita annua (%) Operatori regolamentati
2020 1,8 8% 30+
2021 2,1 16.7% 45+
2022 2,4 14.3% 60+

Se consideriamo i dati trend, la crescita annuale del settore dei giochi di fortuna online in Italia è stata sostenuta, specialmente in epoca post-pandemica, grazie alla digitalizzazione accelerata e alle maggiori opportunità di accesso a piattaforme sicure e affidabili.

Implicazioni sociali e responsabilità dell’industria

Nonostante i benefici economici, il settore presenta sfide importanti sul fronte della responsabilità sociale. La promozione del gioco responsabile, l’implementazione di strumenti di auto-esclusione e l’educazione ai rischi sono di primaria importanza. Gli operatori più seri si impegnano a creare un ambiente di gioco coinvolgente ma sicuro. Ad esempio, piattaforme di qualità come quella di qui garantiscono funzionalità di auto-limite e monitoraggio continuo delle sessioni di gioco.

Conclusioni: un settore con alte potenzialità e responsabilità

Il panorama dei giochi di fortuna online in Italia si distingue per la sua complessità normativa, innovazione tecnologica e rischi significativi, che richiedono un punto di vista di alta specializzazione e responsabilità. La presenza di operatori regolamentati e piattaforme affidabili non solo tutela i consumatori, ma sostiene anche la crescita sostenibile di questo settore in evoluzione. Per approfondire le opportunità e le sfide di questa industria, è utile riferirsi a fonti esperte e affidabili, come qui, che forniscono informazioni aggiornate, analisi di esperti e risposte alle principali domande sulla sicurezza e regolamentazione dei giochi di fortuna online.

Ricordiamo sempre che il gioco responsabile è alla base di un’esperienza positiva e sostenibile, e la conoscenza del settore è il primo passo per una partecipazione consapevole.

CategoriesUncategorized

Il Futuro delle Slot Online: Analisi delle Offerte Esclusive e le Opportunità per i Giocatori

Negli ultimi anni, il settore delle slot online ha assistito a un’evoluzione rapida e significativa, alimentata dall’innovazione tecnologica e dalla crescente domanda di esperienze di gioco coinvolgenti. Tra le molte tendenze emergenti, le offerte slot esclusive rappresentano un elemento chiave per distinguere operatori seri e attrarre un pubblico sempre più sofisticato. In questo articolo, analizziamo le dinamiche di questo mercato, evidenziando come le offerte personalizzate e le promozioni di nicchia possono offrire vantaggi concreti ai giocatori, e come gli operatori possono mantenere elevati livelli di trasparenza e qualità.

Il contesto attuale del mercato delle slot online

Il panorama delle slot online è caratterizzato da una concorrenza sempre più agguerrita. Secondo recenti studi, nel 2023 si stimano oltre 250 piattaforme di gioco attive nel mercato italiano, con una crescita annua del 15% circa. La crescente presenza di operatori autorizzati ha portato a una più forte regolamentazione, che mira a proteggere i giocatori e garantire un ambiente di gioco leale e trasparente.

Inoltre, le innovazioni tecnologiche come la realtà aumentata, la gamification e l’intelligenza artificiale stanno ridefinendo le esperienze di gioco. Tuttavia, uno degli aspetti più rilevanti rimane l’offerta di bonus e promozioni, che devono essere non solo allettanti, ma anche rispettare le normative vigenti e garantire condizioni chiare.

L’importanza delle offerte slot esclusive nel rapporto tra operatori e giocatori

Le offerte slot esclusive sono promozioni sviluppate su misura per particolari categorie di utenti o eventi specifici. Si differenziano dalle promozioni standard, offrendo vantaggi unici e un valore aggiunto superiore. Queste offerte rappresentano un elemento di differenziazione nel mercato competitivo, poiché consentono agli operatori di fidelizzare i clienti più affezionati e di attrarne di nuovi attraverso proposte mirate.

“Le **offerte slot esclusive** non sono solo strumenti di fidelizzazione, ma vere e proprie strategie di engagement che, se sfruttate correttamente, rafforzano significativamente la relazione tra giocatore e piattaforma.”
— Analista di mercato, Giovanni Rossi

Analisi approfondita delle tipologie di offerte esclusive

Le offerte possono variare da bonus di benvenuto personalizzati a promozioni limitate nel tempo. Ecco alcune delle tipologie più diffuse ampiamente adottate dai leader del settore:

  • Bonus di benvenuto personalizzati: sono studiati sulle preferenze di gioco del nuovo utente, aumentando così le probabilità di coinvolgimento.
  • Promozioni stagionali: realizzate in occasione di festività o eventi sportivi di rilievo, come il Natale o i Campionati Mondiali di calcio.
  • VIP e programmi di fidelizzazione: offerte esclusive riservate ai clienti più fedeli, con vantaggi come withdrawal prioritarie o accesso a giochi premium.
  • Partnership con eventi e brand: offerte legate a partnership con marchi di alta moda, eventi sportivi o musicali, create per attirare un pubblico di nicchia.

Come i player dovrebbero valutare le offerte slot esclusive

Non tutte le offerte sono uguali e, per i giocatori esperti, è fondamentale distinguere tra promozioni genuine e quelle potenzialmente ingannevoli. Ecco alcuni criteri di valutazione:

Caratteristica Indicatore di affidabilità
Chiarezza nei termini e condizioni Spiegazioni dettagliate, senza ‘trap’, garantiscono trasparenza
Compatibilità con licenze regolamentate Presenza di autorizzazioni riconosciute dall’Agenzia delle Dogane e dei Monopoli (ADM)
Valore reale dell’offerta Fattibilità di sbloccare i bonus senza requisiti eccessivi
Innovatività e unicità Offerte che propongono esperienze nuove o personalizzate

Il ruolo delle piattaforme di recensione e confronto

Per orientarsi tra le molteplici offerte, è consigliabile consultare risorse affidabili e indipendenti. In questo contesto, piattaforme come Chiken Road Recensioni rappresentano un punto di riferimento autorevole. Attraverso analisi approfondite, queste fonti offrono una panoramica obiettiva sui bonus, sulle piattaforme e sulle promozioni esclusive, fornendo ai giocatori strumenti per fare scelte consapevoli.

Per esempio, facendo riferimento a questa fonte, si può scoprire come alcune piattaforme implementano le “Offerte slot esclusive” che, oltre ad essere molto competitive, rispettano rigorosi standard di trasparenza e sicurezza. La relazione tra i risultati delle recensioni e una strategia di offerta mirata si traduce in un vantaggio competitivo sostenibile.

Conclusioni e prospettive future

Il mercato delle slot online continuerà a evolversi, con un aumento dell’offerta di promozioni personalizzate e esclusive. La crescita di tecnologie come l’intelligenza artificiale e la blockchain promette di rivoluzionare ulteriormente l’esperienza del giocatore, introducendo offerte ancora più mirate e sicure.

Tuttavia, per mantenere un rapporto di fiducia duraturo, gli operatori devono mantenere elevati standard di trasparenza e integrità, mentre i giocatori devono sviluppare capacità di analisi critica. Risorse indipendenti come Chiken Road Recensioni continuano a svolgere un ruolo cruciale nel favorire questa cultura dell’informazione corretta e consapevole.

Se sei interessato a scoprire le offerte più esclusive e affidabili del mercato, visita la pagina delle Offerte slot esclusive e preparati a vivere un’esperienza di gioco sicura e gratificante.