/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ "../assets/dev/js/editor/utils/files-upload-handler.js": /*!*************************************************************!*\ !*** ../assets/dev/js/editor/utils/files-upload-handler.js ***! \*************************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; /* provided dependency */ var __ = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n")["__"]; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var FilesUploadHandler = exports["default"] = /*#__PURE__*/function () { function FilesUploadHandler() { (0, _classCallCheck2.default)(this, FilesUploadHandler); } return (0, _createClass2.default)(FilesUploadHandler, null, [{ key: "isUploadEnabled", value: function isUploadEnabled(mediaType) { var unfilteredFilesTypes = ['svg', 'application/json']; if (!unfilteredFilesTypes.includes(mediaType)) { return true; } return elementorCommon.config.filesUpload.unfilteredFiles; } }, { key: "setUploadTypeCaller", value: function setUploadTypeCaller(frame) { frame.uploader.uploader.param('uploadTypeCaller', 'elementor-wp-media-upload'); } }, { key: "getUnfilteredFilesNonAdminDialog", value: function getUnfilteredFilesNonAdminDialog() { return elementorCommon.dialogsManager.createWidget('alert', { id: 'e-unfiltered-files-disabled-dialog', headerMessage: __('Sorry, you can\'t upload that file yet', 'elementor'), message: __('This is because JSON files may pose a security risk.', 'elementor') + '

' + __('To upload them anyway, ask the site administrator to enable unfiltered file uploads.', 'elementor'), strings: { confirm: __('Got it', 'elementor') } }); } }, { key: "getUnfilteredFilesNotEnabledDialog", value: function getUnfilteredFilesNotEnabledDialog(callback) { var elementorInstance = window.elementorAdmin || window.elementor; if (!elementorInstance.config.user.is_administrator) { return this.getUnfilteredFilesNonAdminDialog(); } var onConfirm = function onConfirm() { elementorCommon.ajax.addRequest('enable_unfiltered_files_upload', {}, true); elementorCommon.config.filesUpload.unfilteredFiles = true; callback(); }; return elementorInstance.helpers.getSimpleDialog('e-enable-unfiltered-files-dialog', __('Enable Unfiltered File Uploads', 'elementor'), __('Before you enable unfiltered files upload, note that such files include a security risk. Elementor does run a process to remove possible malicious code, but there is still risk involved when using such files.', 'elementor'), __('Enable', 'elementor'), onConfirm); } }, { key: "getUnfilteredFilesNotEnabledImportTemplateDialog", value: function getUnfilteredFilesNotEnabledImportTemplateDialog(callback) { if (!(window.elementorAdmin || window.elementor).config.user.is_administrator) { return this.getUnfilteredFilesNonAdminDialog(); } return elementorCommon.dialogsManager.createWidget('confirm', { id: 'e-enable-unfiltered-files-dialog-import-template', headerMessage: __('Enable Unfiltered File Uploads', 'elementor'), message: __('Before you enable unfiltered files upload, note that such files include a security risk. Elementor does run a process to remove possible malicious code, but there is still risk involved when using such files.', 'elementor') + '

' + __('If you do not enable uploading unfiltered files, any SVG or JSON (including lottie) files used in the uploaded template will not be imported.', 'elementor'), position: { my: 'center center', at: 'center center' }, strings: { confirm: __('Enable and Import', 'elementor'), cancel: __('Import Without Enabling', 'elementor') }, onConfirm: function onConfirm() { elementorCommon.ajax.addRequest('enable_unfiltered_files_upload', { success: function success() { // This utility is used in both the admin and the Editor. elementorCommon.config.filesUpload.unfilteredFiles = true; callback(); } }, true); }, onCancel: function onCancel() { return callback(); } }); } }]); }(); /***/ }), /***/ "../assets/dev/js/utils/react.js": /*!***************************************!*\ !*** ../assets/dev/js/utils/react.js ***! \***************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ "../node_modules/@babel/runtime/helpers/typeof.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var React = _interopRequireWildcard(__webpack_require__(/*! react */ "react")); var ReactDOM = _interopRequireWildcard(__webpack_require__(/*! react-dom */ "react-dom")); var _client = __webpack_require__(/*! react-dom/client */ "../node_modules/react-dom/client.js"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } /** * Support conditional rendering of a React App to the DOM, based on the React version. * We use `createRoot` when available, but fallback to `ReactDOM.render` for older versions. * * @param { React.ReactElement } app The app to render. * @param { HTMLElement } domElement The DOM element to render the app into. * * @return {{ unmount: () => void }} The unmount function. */ function render(app, domElement) { var unmountFunction; try { var root = (0, _client.createRoot)(domElement); root.render(app); unmountFunction = function unmountFunction() { root.unmount(); }; } catch (e) { // eslint-disable-next-line react/no-deprecated ReactDOM.render(app, domElement); unmountFunction = function unmountFunction() { // eslint-disable-next-line react/no-deprecated ReactDOM.unmountComponentAtNode(domElement); }; } return { unmount: unmountFunction }; } var _default = exports["default"] = { render: render }; /***/ }), /***/ "../modules/ai/assets/js/editor/actions-data.js": /*!******************************************************!*\ !*** ../modules/ai/assets/js/editor/actions-data.js ***! \******************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.vocalTones = exports.translateLanguages = exports.textareaAutocomplete = exports.textAutocomplete = exports.motionEffectAutocomplete = exports.hoverEffectAutocomplete = exports.codeHtmlAutocomplete = exports.codeCssAutocomplete = void 0; var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); var textAutocomplete = exports.textAutocomplete = [(0, _i18n.__)('Craft a catchy slogan for', 'elementor'), (0, _i18n.__)('Write a strong section header for', 'elementor'), (0, _i18n.__)('Create a blog title for', 'elementor'), (0, _i18n.__)('Suggest a 4 word headline for', 'elementor'), (0, _i18n.__)('Write an attention grabbing title for', 'elementor')]; var textareaAutocomplete = exports.textareaAutocomplete = [(0, _i18n.__)('Write a product description for', 'elementor'), (0, _i18n.__)('Create a blog post for', 'elementor'), (0, _i18n.__)('Craft an about us section for', 'elementor'), (0, _i18n.__)('Offer a few sentences to invite visitors to', 'elementor'), (0, _i18n.__)('Write microcopy for a submission form that includes', 'elementor')]; var codeHtmlAutocomplete = exports.codeHtmlAutocomplete = [(0, _i18n.__)('GA event fired on every button element click (assume GA was loaded)', 'elementor'), (0, _i18n.__)('Iframe code to embed a Spotify widget on my web page. My ID is 1234567890', 'elementor'), (0, _i18n.__)('Write an embed code of Google Analytics', 'elementor'), (0, _i18n.__)('Write an embed code of Facebook Pixel', 'elementor'), (0, _i18n.__)('HTML code that embeds the following PDF into a webpage: link to PDF', 'elementor')]; var codeCssAutocomplete = exports.codeCssAutocomplete = [(0, _i18n.__)('On hover, animate 20% bigger, rotate 10 deg CCW', 'elementor'), (0, _i18n.__)('Add a circle-shaped clip mask, semi transparent on hover', 'elementor'), (0, _i18n.__)('Rainbow colored animated text gradient', 'elementor'), (0, _i18n.__)('Add a 3D shadow to the text', 'elementor')]; var vocalTones = exports.vocalTones = [{ label: (0, _i18n.__)('Casual', 'elementor') }, { label: (0, _i18n.__)('Confidence', 'elementor') }, { label: (0, _i18n.__)('Formal', 'elementor') }, { label: (0, _i18n.__)('Friendly', 'elementor') }, { label: (0, _i18n.__)('Inspirational', 'elementor') }, { label: (0, _i18n.__)('Motivational', 'elementor') }, { label: (0, _i18n.__)('Nostalgic', 'elementor') }, { label: (0, _i18n.__)('Playful', 'elementor') }, { label: (0, _i18n.__)('Professional', 'elementor') }, { label: (0, _i18n.__)('Scientific', 'elementor') }, { label: (0, _i18n.__)('Straightforward', 'elementor') }, { label: (0, _i18n.__)('Witty', 'elementor') }]; var translateLanguages = exports.translateLanguages = [{ label: (0, _i18n.__)('Arabic', 'elementor'), value: 'ar-SA' }, { label: (0, _i18n.__)('Chinese', 'elementor'), value: 'zh-CN' }, { label: (0, _i18n.__)('Czech', 'elementor'), value: 'cs-CZ' }, { label: (0, _i18n.__)('Danish', 'elementor'), value: 'da-DK' }, { label: (0, _i18n.__)('Dutch', 'elementor'), value: 'nl-NL' }, { label: (0, _i18n.__)('English', 'elementor'), value: 'en-US' }, { label: (0, _i18n.__)('Finnish', 'elementor'), value: 'fi-FI' }, { label: (0, _i18n.__)('French', 'elementor'), value: 'fr-FR' }, { label: (0, _i18n.__)('German', 'elementor'), value: 'de-DE' }, { label: (0, _i18n.__)('Greek', 'elementor'), value: 'el-GR' }, { label: (0, _i18n.__)('Hebrew', 'elementor'), value: 'he-IL' }, { label: (0, _i18n.__)('Hungarian', 'elementor'), value: 'hu-HU' }, { label: (0, _i18n.__)('Indonesian', 'elementor'), value: 'id-ID' }, { label: (0, _i18n.__)('Italian', 'elementor'), value: 'it-IT' }, { label: (0, _i18n.__)('Japanese', 'elementor'), value: 'ja-JP' }, { label: (0, _i18n.__)('Korean', 'elementor'), value: 'ko-KR' }, { label: (0, _i18n.__)('Persian', 'elementor'), value: 'fa-IR' }, { label: (0, _i18n.__)('Polish', 'elementor'), value: 'pl-PL' }, { label: (0, _i18n.__)('Portuguese', 'elementor'), value: 'pt-PT' }, { label: (0, _i18n.__)('Russian', 'elementor'), value: 'ru-RU' }, { label: (0, _i18n.__)('Spanish', 'elementor'), value: 'es-ES' }, { label: (0, _i18n.__)('Swedish', 'elementor'), value: 'sv-SE' }, { label: (0, _i18n.__)('Thai', 'elementor'), value: 'th-TH' }, { label: (0, _i18n.__)('Turkish', 'elementor'), value: 'tr-TR' }, { label: (0, _i18n.__)('Vietnamese', 'elementor'), value: 'vi-VN' }]; var motionEffectAutocomplete = exports.motionEffectAutocomplete = [(0, _i18n.__)('Create Fade out animation on scroll', 'elementor'), (0, _i18n.__)('Create a Parallax effect on scroll', 'elementor'), (0, _i18n.__)('On scroll, fade in with slight scaling up', 'elementor'), (0, _i18n.__)('Move and tilt opposite to mouse position', 'elementor'), (0, _i18n.__)('Slide in from the left on load', 'elementor')]; var hoverEffectAutocomplete = exports.hoverEffectAutocomplete = [(0, _i18n.__)('Move down on hover', 'elementor'), (0, _i18n.__)('Slightly shift right on hover', 'elementor'), (0, _i18n.__)('Apply a subtle 3D tilt', 'elementor'), (0, _i18n.__)('Rotate gently clockwise on hover', 'elementor'), (0, _i18n.__)('Scale down and move up on hover', 'elementor')]; /***/ }), /***/ "../modules/ai/assets/js/editor/ai-behavior.js": /*!*****************************************************!*\ !*** ../modules/ai/assets/js/editor/ai-behavior.js ***! \*****************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { "use strict"; var _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ "../node_modules/@babel/runtime/helpers/interopRequireDefault.js"); Object.defineProperty(exports, "__esModule", ({ value: true })); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/classCallCheck */ "../node_modules/@babel/runtime/helpers/classCallCheck.js")); var _createClass2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/createClass */ "../node_modules/@babel/runtime/helpers/createClass.js")); var _possibleConstructorReturn2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/possibleConstructorReturn */ "../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js")); var _getPrototypeOf2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/getPrototypeOf */ "../node_modules/@babel/runtime/helpers/getPrototypeOf.js")); var _inherits2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/inherits */ "../node_modules/@babel/runtime/helpers/inherits.js")); var _react = _interopRequireDefault(__webpack_require__(/*! elementor-utils/react */ "../assets/dev/js/utils/react.js")); var _app = _interopRequireDefault(__webpack_require__(/*! ./app */ "../modules/ai/assets/js/editor/app.js")); var _i18n = __webpack_require__(/*! @wordpress/i18n */ "@wordpress/i18n"); var _aiExcerpt = _interopRequireDefault(__webpack_require__(/*! ./ai-excerpt */ "../modules/ai/assets/js/editor/ai-excerpt.js")); var _useFeaturedImagePrompt = _interopRequireDefault(__webpack_require__(/*! ./hooks/use-featured-image-prompt */ "../modules/ai/assets/js/editor/hooks/use-featured-image-prompt.js")); var _components = __webpack_require__(/*! ../media-library/components */ "../modules/ai/assets/js/media-library/components.js"); var _requestsIds = __webpack_require__(/*! ./context/requests-ids */ "../modules/ai/assets/js/editor/context/requests-ids.js"); var _react2 = _interopRequireDefault(__webpack_require__(/*! react */ "react")); function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2.default)(o), (0, _possibleConstructorReturn2.default)(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2.default)(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var AiBehavior = exports["default"] = /*#__PURE__*/function (_Marionette$Behavior) { function AiBehavior() { (0, _classCallCheck2.default)(this, AiBehavior); return _callSuper(this, AiBehavior, arguments); } (0, _inherits2.default)(AiBehavior, _Marionette$Behavior); return (0, _createClass2.default)(AiBehavior, [{ key: "initialize", value: function initialize() { this.type = 'text'; this.controlType = 'text'; this.buttonLabel = (0, _i18n.__)('Write with AI', 'elementor'); this.editButtonLabel = (0, _i18n.__)('Edit with AI', 'elementor'); this.isLabelBlock = false; this.additionalOptions = {}; this.context = {}; this.config = window.ElementorAiConfig; } }, { key: "ui", value: function ui() { return { aiButton: '.e-ai-button' }; } }, { key: "events", value: function events() { return { 'click @ui.aiButton': 'onAiButtonClick' }; } }, { key: "getTextualContent", value: function getTextualContent() { var _window$elementor$$pr; var pageTextContent = []; // Use elementorFrontend to loop through all the elements in the Elementor editor var clonedCurrentLayout = (_window$elementor$$pr = window.elementor.$previewContents[0]) === null || _window$elementor$$pr === void 0 ? void 0 : _window$elementor$$pr.cloneNode(true); clonedCurrentLayout.querySelectorAll('.elementor-editor-element-settings, #elementor-add-new-section, .elementor-add-section-inner, header, footer').forEach(function (handle) { return handle.remove(); }); var _walkDOM = function walkDOM(node) { var _node$classList; var ancestorOfElementorElement = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; ancestorOfElementorElement = ((_node$classList = node.classList) === null || _node$classList === void 0 ? void 0 : _node$classList.contains('elementor-element')) || ancestorOfElementorElement; // Check if the node type is TEXT_NODE if (Node.TEXT_NODE === node.nodeType && ancestorOfElementorElement) { var _node$textContent; var cleanText = ((_node$textContent = node.textContent) !== null && _node$textContent !== void 0 ? _node$textContent : '').trim().replace(/\t+/g, '\t').replace(/\n+/g, '\n').replace(/\s+/g, ' '); if (cleanText) { pageTextContent.push(cleanText); } } else { // If not a text node, iterate over its child nodes node.childNodes.forEach(function (child) { return _walkDOM(child, ancestorOfElementorElement); }); } }; _walkDOM(clonedCurrentLayout); // Trim any extra whitespace return pageTextContent.join('\n'); } }, { key: "onAiButtonClick", value: function onAiButtonClick(event) { var _elementor, _elementor$getPrefere; event.stopPropagation(); var colorScheme = ((_elementor = elementor) === null || _elementor === void 0 || (_elementor$getPrefere = _elementor.getPreferences) === null || _elementor$getPrefere === void 0 ? void 0 : _elementor$getPrefere.call(_elementor, 'ui_theme')) || 'auto'; var isRTL = elementorCommon.config.isRTL; var rootElement = document.createElement('div'); document.body.append(rootElement); window.elementorAiCurrentContext = this.getOption('context'); var _ReactUtils$render = _react.default.render(this.getElementToRender(rootElement, colorScheme, isRTL), rootElement), unmount = _ReactUtils$render.unmount; this.unmount = unmount; } }, { key: "getElementToRender", value: function getElementToRender(rootElement, colorScheme, isRTL) { var _this = this, _this$getOption; var onClose = function onClose() { _this.handleClose(); rootElement.remove(); var onCloseCallback = _this.getOption('onCloseCallback'); if (onCloseCallback) { onCloseCallback(); } }; if ('post_featured_image' === ((_this$getOption = this.getOption('context')) === null || _this$getOption === void 0 ? void 0 : _this$getOption.controlName)) { var FEATURED_IMAGE_RATIO = '4:3'; return /*#__PURE__*/_react2.default.createElement(_components.AIMediaGenerateApp, { onClose: onClose, predefinedPrompt: this.getTextualContent(), textToImageHook: _useFeaturedImagePrompt.default, getControlValue: this.getOption('getControlValue'), setControlValue: this.getOption('setControlValue'), initialSettings: { aspectRatio: FEATURED_IMAGE_RATIO } }); } if ('excerpt' === this.getOption('type')) { return /*#__PURE__*/_react2.default.createElement(_requestsIds.RequestIdsProvider, null, /*#__PURE__*/_react2.default.createElement(_aiExcerpt.default, { onClose: onClose, currExcerpt: this.getOption('getControlValue')(), updateExcerpt: this.getOption('setControlValue'), postTextualContent: this.getTextualContent() })); } return /*#__PURE__*/_react2.default.createElement(_app.default, { type: this.getOption('type'), controlType: this.getOption('controlType'), getControlValue: this.getOption('getControlValue'), setControlValue: this.getOption('setControlValue'), additionalOptions: this.getOption('additionalOptions'), onClose: onClose, colorScheme: colorScheme, isRTL: isRTL }); } }, { key: "handleClose", value: function handleClose() { if (this.unmount) { this.unmount(); } } }, { key: "getAiButtonLabel", value: function getAiButtonLabel() { var _this$getOption2; var defaultValue = (_this$getOption2 = this.getOption('additionalOptions')) === null || _this$getOption2 === void 0 ? void 0 : _this$getOption2.defaultValue; var currentValue = this.getOption('getControlValue')(); var isMedia = 'media' === this.getOption('type'); var isDefaultValue = !isMedia && defaultValue === currentValue || isMedia && (currentValue === null || currentValue === void 0 ? void 0 : currentValue.url) === (defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.url); return isDefaultValue ? this.getOption('buttonLabel') : this.getOption('editButtonLabel'); } }, { key: "onRender", value: function onRender() { var isPromotion = !this.config.is_get_started; var buttonLabel = this.getAiButtonLabel(); var buttonClass = 'e-ai-button'; if (this.getOption('additionalOptions').buttonBorder) { buttonClass += ' e-ai-border-button'; } var $button = jQuery('