# elementor/4.3.2/assets/js/packages/editor-widget-creation/editor-widget-creation.js

Elementor Website Builder – more than just a page builder, version 4.3.2. 237 lines.

- Page: https://pluginprobe.com/plugins/elementor/4.3.2/code/assets/js/packages/editor-widget-creation/editor-widget-creation.js
- Raw: https://pluginprobe.com/plugins/elementor/4.3.2/raw/assets/js/packages/editor-widget-creation/editor-widget-creation.js
- Modified: 2026-09-17T09:04:38+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/elementor/4.3.2/code/assets/js/packages/editor-widget-creation/editor-widget-creation.js#L10-L20`.

```javascript
(function(_elementor_editor, react, _elementor_editor_mcp, _elementor_editor_ui, _elementor_events, _elementor_icons, _elementor_ui, _wordpress_i18n) {

//#region \0rolldown/runtime.js
	var __create = Object.create;
	var __defProp = Object.defineProperty;
	var __name = (target, value) => __defProp(target, "name", {
		value,
		configurable: true
	});
	var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
	var __getOwnPropNames = Object.getOwnPropertyNames;
	var __getProtoOf = Object.getPrototypeOf;
	var __hasOwnProp = Object.prototype.hasOwnProperty;
	var __exportAll = (all, no_symbols) => {
		let target = {};
		for (var name in all) {
			__defProp(target, name, {
				get: all[name],
				enumerable: true
			});
		}
		if (!no_symbols) {
			__defProp(target, Symbol.toStringTag, { value: "Module" });
		}
		return target;
	};
	var __copyProps = (to, from, except, desc) => {
		if (from && typeof from === "object" || typeof from === "function") {
			for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
				key = keys[i];
				if (!__hasOwnProp.call(to, key) && key !== except) {
					__defProp(to, key, {
						get: ((k) => from[k]).bind(null, key),
						enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
					});
				}
			}
		}
		return to;
	};
	var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
		value: mod,
		enumerable: true
	}) : target, mod));

//#endregion
react = __toESM(react);

//#region packages/packages/core/editor-widget-creation/src/interpolate-links.tsx
	var LINK_PLACEHOLDER_PATTERN = /\{\{(\w+)}}/g;
	var interpolateLinks = (text, links) => {
		return text.split(LINK_PLACEHOLDER_PATTERN).map((part, i) => {
			const link = links[part];
			if (!link) return part;
			return /* @__PURE__ */ react.createElement(_elementor_ui.Link, {
				key: i,
				sx: { px: .5 },
				href: link.href,
				target: "_blank",
				rel: "noopener noreferrer"
			}, link.label);
		});
	};

//#endregion
//#region packages/packages/core/editor-widget-creation/src/components/create-widget.tsx
	var CREATE_WIDGET_EVENT = "elementor/editor/create-widget";
	var ANGIE_MODAL_PROMOTION_IMAGE_URL = "https://assets.elementor.com/packages/v1/images/angie-top-bar-promotion-modal-0926.png";
	var ANGIE_CTA_CLICKED_EVENT = "ai_widget_cta_clicked";
	var ANGIE_INSTALL_STARTED_EVENT = "angie_install_started";
	var ANGIE_INSTALL_COMPLETED_EVENT = "angie_install_completed";
	var ANGIE_INSTALL_ABANDONED_EVENT = "angie_install_abandoned";
	function CreateWidgetModal({ prompt, entryPoint, onClose }) {
		const [installState, setInstallState] = (0, react.useState)("idle");
		const [agreedToTerms, setAgreedToTerms] = (0, react.useState)(false);
		const handleClose = () => {
			if (installState === "installing") return;
			(0, _elementor_events.trackEvent)({
				eventName: ANGIE_INSTALL_ABANDONED_EVENT,
				abandon_step: installState === "error" ? "install_error" : "install_modal",
				trigger_source: entryPoint
			});
			onClose();
		};
		const handleInstall = async () => {
			setInstallState("installing");
			(0, _elementor_events.trackEvent)({
				eventName: ANGIE_INSTALL_STARTED_EVENT,
				trigger_source: entryPoint
			});
			const [result] = await Promise.all([(0, _elementor_editor_mcp.installAngiePlugin)(), (0, _elementor_editor_mcp.saveAngieConsent)()]);
			if (!result.success) {
				setInstallState("error");
				return;
			}
			(0, _elementor_events.trackEvent)({
				eventName: ANGIE_INSTALL_COMPLETED_EVENT,
				trigger_source: entryPoint
			});
			(0, _elementor_editor_mcp.redirectToAppAdmin)(prompt);
		};
		const handleFallbackInstall = () => {
			(0, _elementor_editor_mcp.redirectToInstallation)(prompt);
		};
		return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ThemeProvider, null, /* @__PURE__ */ react.createElement(_elementor_ui.Dialog, {
			fullWidth: true,
			maxWidth: "md",
			open: true,
			onClose: handleClose
		}, /* @__PURE__ */ react.createElement(_elementor_ui.IconButton, {
			"aria-label": (0, _wordpress_i18n.__)("Close", "elementor"),
			onClick: handleClose,
			sx: {
				position: "absolute",
				right: 8,
				top: 8,
				zIndex: 1
			}
		}, /* @__PURE__ */ react.createElement(_elementor_icons.XIcon, null)), /* @__PURE__ */ react.createElement(_elementor_ui.DialogContent, { sx: {
			p: 0,
			overflow: "hidden"
		} }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
			direction: "row",
			sx: { height: 400 }
		}, /* @__PURE__ */ react.createElement(_elementor_ui.Image, {
			sx: {
				height: "100%",
				aspectRatio: "1 / 1",
				objectFit: "cover",
				objectPosition: "right center"
			},
			src: ANGIE_MODAL_PROMOTION_IMAGE_URL
		}), /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
			justifyContent: "space-between",
			p: 4
		}, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
			gap: 2.5,
			justifyContent: "center",
			sx: {
				flex: 1,
				paddingInlineEnd: 2.5
			}
		}, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
			variant: "h4",
			fontWeight: 600,
			color: "text.secondary"
		}, installState === "error" ? (0, _wordpress_i18n.__)("Installation failed", "elementor") : /* @__PURE__ */ react.createElement(react.Fragment, null, (0, _wordpress_i18n.__)("Pages, layouts,", "elementor"), /* @__PURE__ */ react.createElement("br", null), (0, _wordpress_i18n.__)("widgets and more", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
			variant: "body2",
			fontWeight: 500
		}, installState === "error" ? (0, _wordpress_i18n.__)("We couldn't install Angie automatically. Click below to install it manually.", "elementor") : (0, _wordpress_i18n.__)("Ask Angie to build you full pages, custom widgets, snippets, and code directly in Elementor. Install and activate Angie once on this site to start building.", "elementor")), installState !== "error" && /* @__PURE__ */ react.createElement(_elementor_ui.FormControlLabel, {
			control: /* @__PURE__ */ react.createElement(_elementor_ui.Checkbox, {
				size: "small",
				checked: agreedToTerms,
				onChange: (_e, checked) => setAgreedToTerms(checked)
			}),
			label: /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
				variant: "body2",
				color: "text.secondary"
			}, interpolateLinks((0, _wordpress_i18n.sprintf)((0, _wordpress_i18n.__)("By installing, you agree to our %1$s & %2$s.", "elementor"), "{{terms}}", "{{privacy}}"), {
				terms: {
					label: (0, _wordpress_i18n.__)("Terms", "elementor"),
					href: "https://elementor.com/terms/angie-terms-conditions/"
				},
				privacy: {
					label: (0, _wordpress_i18n.__)("Privacy Policy", "elementor"),
					href: "https://elementor.com/about/privacy/"
				}
			}))
		})), /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
			direction: "row",
			justifyContent: "flex-end"
		}, installState === "error" ? /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
			variant: "contained",
			color: "accent",
			onClick: handleFallbackInstall
		}, (0, _wordpress_i18n.__)("Install Manually", "elementor")) : /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
			variant: "contained",
			color: "accent",
			onClick: handleInstall,
			disabled: installState === "installing" || !agreedToTerms,
			startIcon: installState === "installing" ? /* @__PURE__ */ react.createElement(_elementor_ui.CircularProgress, {
				size: 18,
				color: "inherit"
			}) : void 0
		}, installState === "installing" ? (0, _wordpress_i18n.__)("Installing…", "elementor") : (0, _wordpress_i18n.__)("Install and activate", "elementor"))))))));
	}
	function CreateWidget() {
		const [modalData, setModalData] = (0, react.useState)(null);
		(0, react.useEffect)(() => {
			const handleShow = (event) => {
				const customEvent = event;
				const hasAngieInstalled = (0, _elementor_editor_mcp.isAngieAvailable)();
				(0, _elementor_events.trackEvent)({
					eventName: ANGIE_CTA_CLICKED_EVENT,
					entry_point: customEvent.detail.entry_point,
					has_angie_installed: hasAngieInstalled
				});
				if (hasAngieInstalled) {
					(0, _elementor_editor_mcp.sendPromptToAngie)(customEvent.detail?.prompt);
					return;
				}
				setModalData(customEvent.detail);
			};
			window.addEventListener(CREATE_WIDGET_EVENT, handleShow);
			return () => {
				window.removeEventListener(CREATE_WIDGET_EVENT, handleShow);
			};
		}, []);
		if (!modalData) return null;
		return /* @__PURE__ */ react.createElement(CreateWidgetModal, {
			prompt: modalData.prompt,
			entryPoint: modalData.entry_point,
			onClose: () => setModalData(null)
		});
	}

//#endregion
//#region packages/packages/core/editor-widget-creation/src/init.ts
	function init() {
		(0, _elementor_editor.injectIntoTop)({
			id: "create-widget",
			component: CreateWidget
		});
	}

//#endregion
//#region packages/packages/core/editor-widget-creation/src/index.ts
	var src_exports = /* @__PURE__ */ __exportAll({ init: () => init });

//#endregion
//#region \0elementor-package-library-entry
	(window.elementorV2 = window.elementorV2 || {}).editorWidgetCreation = src_exports;

//#endregion
})(elementorV2.editor, React, elementorV2.editorMcp, elementorV2.editorUi, elementorV2.events, elementorV2.icons, elementorV2.ui, wp.i18n);
window.elementorV2.editorWidgetCreation?.init?.();
//# sourceMappingURL=editor-widget-creation.js.map
```
