| 1 |
(function(_elementor_editor, react, _elementor_editor_mcp, _elementor_editor_ui, _elementor_events, _elementor_icons, _elementor_ui, _wordpress_i18n) { |
| 2 |
|
| 3 |
//#region \0rolldown/runtime.js |
| 4 |
var __create = Object.create; |
| 5 |
var __defProp = Object.defineProperty; |
| 6 |
var __name = (target, value) => __defProp(target, "name", { |
| 7 |
value, |
| 8 |
configurable: true |
| 9 |
}); |
| 10 |
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; |
| 11 |
var __getOwnPropNames = Object.getOwnPropertyNames; |
| 12 |
var __getProtoOf = Object.getPrototypeOf; |
| 13 |
var __hasOwnProp = Object.prototype.hasOwnProperty; |
| 14 |
var __exportAll = (all, no_symbols) => { |
| 15 |
let target = {}; |
| 16 |
for (var name in all) { |
| 17 |
__defProp(target, name, { |
| 18 |
get: all[name], |
| 19 |
enumerable: true |
| 20 |
}); |
| 21 |
} |
| 22 |
if (!no_symbols) { |
| 23 |
__defProp(target, Symbol.toStringTag, { value: "Module" }); |
| 24 |
} |
| 25 |
return target; |
| 26 |
}; |
| 27 |
var __copyProps = (to, from, except, desc) => { |
| 28 |
if (from && typeof from === "object" || typeof from === "function") { |
| 29 |
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { |
| 30 |
key = keys[i]; |
| 31 |
if (!__hasOwnProp.call(to, key) && key !== except) { |
| 32 |
__defProp(to, key, { |
| 33 |
get: ((k) => from[k]).bind(null, key), |
| 34 |
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable |
| 35 |
}); |
| 36 |
} |
| 37 |
} |
| 38 |
} |
| 39 |
return to; |
| 40 |
}; |
| 41 |
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { |
| 42 |
value: mod, |
| 43 |
enumerable: true |
| 44 |
}) : target, mod)); |
| 45 |
|
| 46 |
//#endregion |
| 47 |
react = __toESM(react); |
| 48 |
|
| 49 |
//#region packages/packages/core/editor-widget-creation/src/interpolate-links.tsx |
| 50 |
var LINK_PLACEHOLDER_PATTERN = /\{\{(\w+)}}/g; |
| 51 |
var interpolateLinks = (text, links) => { |
| 52 |
return text.split(LINK_PLACEHOLDER_PATTERN).map((part, i) => { |
| 53 |
const link = links[part]; |
| 54 |
if (!link) return part; |
| 55 |
return /* @__PURE__ */ react.createElement(_elementor_ui.Link, { |
| 56 |
key: i, |
| 57 |
sx: { px: .5 }, |
| 58 |
href: link.href, |
| 59 |
target: "_blank", |
| 60 |
rel: "noopener noreferrer" |
| 61 |
}, link.label); |
| 62 |
}); |
| 63 |
}; |
| 64 |
|
| 65 |
//#endregion |
| 66 |
//#region packages/packages/core/editor-widget-creation/src/components/create-widget.tsx |
| 67 |
var CREATE_WIDGET_EVENT = "elementor/editor/create-widget"; |
| 68 |
var ANGIE_MODAL_PROMOTION_IMAGE_URL = "https://assets.elementor.com/packages/v1/images/angie-top-bar-promotion-modal-0926.png"; |
| 69 |
var ANGIE_CTA_CLICKED_EVENT = "ai_widget_cta_clicked"; |
| 70 |
var ANGIE_INSTALL_STARTED_EVENT = "angie_install_started"; |
| 71 |
var ANGIE_INSTALL_COMPLETED_EVENT = "angie_install_completed"; |
| 72 |
var ANGIE_INSTALL_ABANDONED_EVENT = "angie_install_abandoned"; |
| 73 |
function CreateWidgetModal({ prompt, entryPoint, onClose }) { |
| 74 |
const [installState, setInstallState] = (0, react.useState)("idle"); |
| 75 |
const [agreedToTerms, setAgreedToTerms] = (0, react.useState)(false); |
| 76 |
const handleClose = () => { |
| 77 |
if (installState === "installing") return; |
| 78 |
(0, _elementor_events.trackEvent)({ |
| 79 |
eventName: ANGIE_INSTALL_ABANDONED_EVENT, |
| 80 |
abandon_step: installState === "error" ? "install_error" : "install_modal", |
| 81 |
trigger_source: entryPoint |
| 82 |
}); |
| 83 |
onClose(); |
| 84 |
}; |
| 85 |
const handleInstall = async () => { |
| 86 |
setInstallState("installing"); |
| 87 |
(0, _elementor_events.trackEvent)({ |
| 88 |
eventName: ANGIE_INSTALL_STARTED_EVENT, |
| 89 |
trigger_source: entryPoint |
| 90 |
}); |
| 91 |
const [result] = await Promise.all([(0, _elementor_editor_mcp.installAngiePlugin)(), (0, _elementor_editor_mcp.saveAngieConsent)()]); |
| 92 |
if (!result.success) { |
| 93 |
setInstallState("error"); |
| 94 |
return; |
| 95 |
} |
| 96 |
(0, _elementor_events.trackEvent)({ |
| 97 |
eventName: ANGIE_INSTALL_COMPLETED_EVENT, |
| 98 |
trigger_source: entryPoint |
| 99 |
}); |
| 100 |
(0, _elementor_editor_mcp.redirectToAppAdmin)(prompt); |
| 101 |
}; |
| 102 |
const handleFallbackInstall = () => { |
| 103 |
(0, _elementor_editor_mcp.redirectToInstallation)(prompt); |
| 104 |
}; |
| 105 |
return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ThemeProvider, null, /* @__PURE__ */ react.createElement(_elementor_ui.Dialog, { |
| 106 |
fullWidth: true, |
| 107 |
maxWidth: "md", |
| 108 |
open: true, |
| 109 |
onClose: handleClose |
| 110 |
}, /* @__PURE__ */ react.createElement(_elementor_ui.IconButton, { |
| 111 |
"aria-label": (0, _wordpress_i18n.__)("Close", "elementor"), |
| 112 |
onClick: handleClose, |
| 113 |
sx: { |
| 114 |
position: "absolute", |
| 115 |
right: 8, |
| 116 |
top: 8, |
| 117 |
zIndex: 1 |
| 118 |
} |
| 119 |
}, /* @__PURE__ */ react.createElement(_elementor_icons.XIcon, null)), /* @__PURE__ */ react.createElement(_elementor_ui.DialogContent, { sx: { |
| 120 |
p: 0, |
| 121 |
overflow: "hidden" |
| 122 |
} }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { |
| 123 |
direction: "row", |
| 124 |
sx: { height: 400 } |
| 125 |
}, /* @__PURE__ */ react.createElement(_elementor_ui.Image, { |
| 126 |
sx: { |
| 127 |
height: "100%", |
| 128 |
aspectRatio: "1 / 1", |
| 129 |
objectFit: "cover", |
| 130 |
objectPosition: "right center" |
| 131 |
}, |
| 132 |
src: ANGIE_MODAL_PROMOTION_IMAGE_URL |
| 133 |
}), /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { |
| 134 |
justifyContent: "space-between", |
| 135 |
p: 4 |
| 136 |
}, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { |
| 137 |
gap: 2.5, |
| 138 |
justifyContent: "center", |
| 139 |
sx: { |
| 140 |
flex: 1, |
| 141 |
paddingInlineEnd: 2.5 |
| 142 |
} |
| 143 |
}, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { |
| 144 |
variant: "h4", |
| 145 |
fontWeight: 600, |
| 146 |
color: "text.secondary" |
| 147 |
}, 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, { |
| 148 |
variant: "body2", |
| 149 |
fontWeight: 500 |
| 150 |
}, 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, { |
| 151 |
control: /* @__PURE__ */ react.createElement(_elementor_ui.Checkbox, { |
| 152 |
size: "small", |
| 153 |
checked: agreedToTerms, |
| 154 |
onChange: (_e, checked) => setAgreedToTerms(checked) |
| 155 |
}), |
| 156 |
label: /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { |
| 157 |
variant: "body2", |
| 158 |
color: "text.secondary" |
| 159 |
}, interpolateLinks((0, _wordpress_i18n.sprintf)((0, _wordpress_i18n.__)("By installing, you agree to our %1$s & %2$s.", "elementor"), "{{terms}}", "{{privacy}}"), { |
| 160 |
terms: { |
| 161 |
label: (0, _wordpress_i18n.__)("Terms", "elementor"), |
| 162 |
href: "https://elementor.com/terms/angie-terms-conditions/" |
| 163 |
}, |
| 164 |
privacy: { |
| 165 |
label: (0, _wordpress_i18n.__)("Privacy Policy", "elementor"), |
| 166 |
href: "https://elementor.com/about/privacy/" |
| 167 |
} |
| 168 |
})) |
| 169 |
})), /* @__PURE__ */ react.createElement(_elementor_ui.Stack, { |
| 170 |
direction: "row", |
| 171 |
justifyContent: "flex-end" |
| 172 |
}, installState === "error" ? /* @__PURE__ */ react.createElement(_elementor_ui.Button, { |
| 173 |
variant: "contained", |
| 174 |
color: "accent", |
| 175 |
onClick: handleFallbackInstall |
| 176 |
}, (0, _wordpress_i18n.__)("Install Manually", "elementor")) : /* @__PURE__ */ react.createElement(_elementor_ui.Button, { |
| 177 |
variant: "contained", |
| 178 |
color: "accent", |
| 179 |
onClick: handleInstall, |
| 180 |
disabled: installState === "installing" || !agreedToTerms, |
| 181 |
startIcon: installState === "installing" ? /* @__PURE__ */ react.createElement(_elementor_ui.CircularProgress, { |
| 182 |
size: 18, |
| 183 |
color: "inherit" |
| 184 |
}) : void 0 |
| 185 |
}, installState === "installing" ? (0, _wordpress_i18n.__)("Installing…", "elementor") : (0, _wordpress_i18n.__)("Install and activate", "elementor")))))))); |
| 186 |
} |
| 187 |
function CreateWidget() { |
| 188 |
const [modalData, setModalData] = (0, react.useState)(null); |
| 189 |
(0, react.useEffect)(() => { |
| 190 |
const handleShow = (event) => { |
| 191 |
const customEvent = event; |
| 192 |
const hasAngieInstalled = (0, _elementor_editor_mcp.isAngieAvailable)(); |
| 193 |
(0, _elementor_events.trackEvent)({ |
| 194 |
eventName: ANGIE_CTA_CLICKED_EVENT, |
| 195 |
entry_point: customEvent.detail.entry_point, |
| 196 |
has_angie_installed: hasAngieInstalled |
| 197 |
}); |
| 198 |
if (hasAngieInstalled) { |
| 199 |
(0, _elementor_editor_mcp.sendPromptToAngie)(customEvent.detail?.prompt); |
| 200 |
return; |
| 201 |
} |
| 202 |
setModalData(customEvent.detail); |
| 203 |
}; |
| 204 |
window.addEventListener(CREATE_WIDGET_EVENT, handleShow); |
| 205 |
return () => { |
| 206 |
window.removeEventListener(CREATE_WIDGET_EVENT, handleShow); |
| 207 |
}; |
| 208 |
}, []); |
| 209 |
if (!modalData) return null; |
| 210 |
return /* @__PURE__ */ react.createElement(CreateWidgetModal, { |
| 211 |
prompt: modalData.prompt, |
| 212 |
entryPoint: modalData.entry_point, |
| 213 |
onClose: () => setModalData(null) |
| 214 |
}); |
| 215 |
} |
| 216 |
|
| 217 |
//#endregion |
| 218 |
//#region packages/packages/core/editor-widget-creation/src/init.ts |
| 219 |
function init() { |
| 220 |
(0, _elementor_editor.injectIntoTop)({ |
| 221 |
id: "create-widget", |
| 222 |
component: CreateWidget |
| 223 |
}); |
| 224 |
} |
| 225 |
|
| 226 |
//#endregion |
| 227 |
//#region packages/packages/core/editor-widget-creation/src/index.ts |
| 228 |
var src_exports = /* @__PURE__ */ __exportAll({ init: () => init }); |
| 229 |
|
| 230 |
//#endregion |
| 231 |
//#region \0elementor-package-library-entry |
| 232 |
(window.elementorV2 = window.elementorV2 || {}).editorWidgetCreation = src_exports; |
| 233 |
|
| 234 |
//#endregion |
| 235 |
})(elementorV2.editor, React, elementorV2.editorMcp, elementorV2.editorUi, elementorV2.events, elementorV2.icons, elementorV2.ui, wp.i18n); |
| 236 |
window.elementorV2.editorWidgetCreation?.init?.(); |
| 237 |
//# sourceMappingURL=editor-widget-creation.js.map |