PluginProbe
Elementor Website Builder – more than just a page builder / 4.0.0-dev3
Elementor Website Builder – more than just a page builder v4.0.0-dev3
4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 All 455 releases
← All changes | assets/js/packages/editor-components/editor-components.js +2 -2933 4.3.0 → 4.0.0-dev3 View file →
@@ -1,2934 +1,3 @@
1 -(function(_elementor_editor, _elementor_editor_canvas, _elementor_editor_documents, _elementor_editor_editing_panel, _elementor_editor_elements_panel, _elementor_editor_embedded_documents_manager, _elementor_editor_v1_adapters, _elementor_store, _wordpress_i18n, _elementor_http_client, react, _elementor_editor_ui, _elementor_ui, _elementor_utils, _elementor_icons, _elementor_editor_current_user, _elementor_editor_notifications, _elementor_editor_elements, _elementor_editor_props, _elementor_schema, _elementor_events, _elementor_editor_panels, _elementor_editor_controls, _elementor_editor_templates) {
2 -
3 -//#region \0rolldown/runtime.js
4 - var __create = Object.create;
5 - var __defProp$1 = Object.defineProperty;
6 - var __name = (target, value) => __defProp$1(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$1(target, name, {
18 - get: all[name],
19 - enumerable: true
20 - });
21 - }
22 - if (!no_symbols) {
23 - __defProp$1(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$1(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$1(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-components/src/store/store-types.ts
50 - var initialState = {
51 - data: [],
52 - unpublishedData: [],
53 - loadStatus: "idle",
54 - createdThisSession: [],
55 - archivedThisSession: [],
56 - path: [],
57 - currentComponentId: null,
58 - updatedComponentNames: {},
59 - sanitized: {}
60 - };
61 - var SLICE_NAME = "components";
62 -
63 -//#endregion
64 -//#region packages/packages/core/editor-components/src/api.ts
65 - var BASE_URL = "elementor/v1/components";
66 - var getParams = (id) => ({
67 - action: "get_document_config",
68 - unique_id: `document-config-${id}`,
69 - data: { id }
70 - });
71 - var apiClient = {
72 - get: () => (0, _elementor_http_client.httpService)().get(`${BASE_URL}`).then((res) => res.data.data),
73 - create: (payload) => (0, _elementor_http_client.httpService)().post(`${BASE_URL}`, payload).then((res) => res.data.data),
74 - updateStatuses: (ids, status) => (0, _elementor_http_client.httpService)().put(`${BASE_URL}/status`, {
75 - ids,
76 - status
77 - }),
78 - getComponentConfig: (id) => _elementor_editor_v1_adapters.ajax.load(getParams(id)),
79 - invalidateComponentConfigCache: (id) => _elementor_editor_v1_adapters.ajax.invalidateCache(getParams(id)),
80 - getComponentLockStatus: async (componentId) => await (0, _elementor_http_client.httpService)().get(`${BASE_URL}/lock-status`, { params: { componentId } }).then((res) => {
81 - const { is_current_user_allow_to_edit: isAllowedToSwitchDocument, locked_by: lockedBy } = res.data.data;
82 - return {
83 - isAllowedToSwitchDocument,
84 - lockedBy: lockedBy || ""
85 - };
86 - }),
87 - lockComponent: async (componentId) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/lock`, { componentId }).then((res) => res.data),
88 - unlockComponent: async (componentId) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/unlock`, { componentId }).then((res) => res.data),
89 - getOverridableProps: async (componentIds) => await (0, _elementor_http_client.httpService)().get(`${BASE_URL}/overridable-props`, { params: { "componentIds[]": componentIds } }).then((res) => res.data),
90 - updateArchivedComponents: async (componentIds, status) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/archive`, {
91 - componentIds,
92 - status
93 - }).then((res) => res.data.data),
94 - updateComponentTitle: (updatedComponentNames, status) => (0, _elementor_http_client.httpService)().post(`${BASE_URL}/update-titles`, {
95 - components: updatedComponentNames,
96 - status
97 - }).then((res) => res.data.data),
98 - validate: async (payload) => await (0, _elementor_http_client.httpService)().post(`${BASE_URL}/create-validate`, payload).then((res) => res.data)
99 - };
100 -
101 -//#endregion
102 -//#region packages/packages/core/editor-components/src/store/thunks.ts
103 - var loadComponents = (0, _elementor_store.__createAsyncThunk)("components/load", async () => {
104 - return await apiClient.get();
105 - });
106 -
107 -//#endregion
108 -//#region packages/packages/core/editor-components/src/store/extensible-slice.ts
109 - var extraReducersMap = /* @__PURE__ */ new Map();
110 - function registerComponentsReducer(name, reducer) {
111 - extraReducersMap.set(`${SLICE_NAME}/${name}`, reducer);
112 - }
113 - function createComponentsAction(name) {
114 - const action = (0, _elementor_store.__createAction)(`${SLICE_NAME}/${name}`);
115 - return {
116 - action,
117 - register(reducer) {
118 - registerComponentsReducer(name, reducer);
119 - },
120 - dispatch(payload) {
121 - (0, _elementor_store.__dispatch)(action(payload));
122 - }
123 - };
124 - }
125 - var baseSlice = (0, _elementor_store.__createSlice)({
126 - name: SLICE_NAME,
127 - initialState,
128 - reducers: {
129 - add: (state, { payload }) => {
130 - if (Array.isArray(payload)) state.data = [...payload, ...state.data];
131 - else state.data.unshift(payload);
132 - },
133 - load: (state, { payload }) => {
134 - state.data = payload;
135 - },
136 - addUnpublished: (state, { payload }) => {
137 - state.unpublishedData.unshift(payload);
138 - },
139 - removeUnpublished: (state, { payload }) => {
140 - const uidsToRemove = Array.isArray(payload) ? payload : [payload];
141 - state.unpublishedData = state.unpublishedData.filter((component) => !uidsToRemove.includes(component.uid));
142 - },
143 - resetUnpublished: (state) => {
144 - state.unpublishedData = [];
145 - },
146 - addCreatedThisSession: (state, { payload }) => {
147 - state.createdThisSession.push(payload);
148 - },
149 - removeCreatedThisSession: (state, { payload }) => {
150 - state.createdThisSession = state.createdThisSession.filter((uid) => uid !== payload);
151 - },
152 - archive: (state, { payload }) => {
153 - const component = state.data.find((comp) => comp.id === payload);
154 - if (component) {
155 - component.isArchived = true;
156 - state.archivedThisSession.push(payload);
157 - }
158 - },
159 - setCurrentComponentId: (state, { payload }) => {
160 - state.currentComponentId = payload;
161 - },
162 - setPath: (state, { payload }) => {
163 - state.path = payload;
164 - },
165 - setOverridableProps: (state, { payload }) => {
166 - const component = state.data.find((comp) => comp.id === payload.componentId);
167 - if (!component) return;
168 - component.overridableProps = payload.overridableProps;
169 - },
170 - loadOverridableProps: (state, { payload }) => {
171 - Object.keys(payload).forEach((id) => {
172 - const componentId = Number(id);
173 - const overridableProps = payload[componentId];
174 - const component = state.data.find((comp) => comp.id === componentId);
175 - if (!component || !overridableProps) return;
176 - component.overridableProps = overridableProps;
177 - });
178 - },
179 - rename: (state, { payload }) => {
180 - const component = state.data.find((comp) => comp.uid === payload.componentUid);
181 - if (!component) return;
182 - if (component.id) state.updatedComponentNames[component.id] = payload.name;
183 - component.name = payload.name;
184 - },
185 - cleanUpdatedComponentNames: (state) => {
186 - state.updatedComponentNames = {};
187 - },
188 - updateComponentSanitizedAttribute: (state, { payload: { componentId, attribute } }) => {
189 - if (!state.sanitized[componentId]) state.sanitized[componentId] = {};
190 - state.sanitized[componentId][attribute] = true;
191 - },
192 - resetSanitizedComponents: (state) => {
193 - state.sanitized = {};
194 - }
195 - },
196 - extraReducers: (builder) => {
197 - builder.addCase(loadComponents.fulfilled, (state, { payload }) => {
198 - state.data = payload;
199 - state.loadStatus = "idle";
200 - });
201 - builder.addCase(loadComponents.pending, (state) => {
202 - state.loadStatus = "pending";
203 - });
204 - builder.addCase(loadComponents.rejected, (state) => {
205 - state.loadStatus = "error";
206 - });
207 - }
208 - });
209 - var slice = {
210 - ...baseSlice,
211 - reducer(state, action) {
212 - const nextState = baseSlice.reducer(state, action);
213 - const extraReducer = extraReducersMap.get(action.type);
214 - if (!extraReducer || !nextState) return nextState;
215 - const clonedState = structuredClone(nextState);
216 - extraReducer(clonedState, action);
217 - return clonedState;
218 - }
219 - };
220 -
221 -//#endregion
222 -//#region packages/packages/core/editor-components/src/store/store.ts
223 - var selectData = (state) => state[SLICE_NAME].data;
224 - var selectArchivedThisSession = (state) => state[SLICE_NAME].archivedThisSession;
225 - var selectLoadStatus = (state) => state[SLICE_NAME].loadStatus;
226 - var selectUnpublishedData = (state) => state[SLICE_NAME].unpublishedData;
227 - var getCreatedThisSession = (state) => state[SLICE_NAME].createdThisSession;
228 - var getPath = (state) => state[SLICE_NAME].path;
229 - var getCurrentComponentId = (state) => state[SLICE_NAME].currentComponentId;
230 - var selectComponent = (state, componentId) => state[SLICE_NAME].data.find((component) => component.id === componentId);
231 - var useComponent = (componentId) => {
232 - return (0, _elementor_store.__useSelector)((state) => componentId ? selectComponent(state, componentId) : null);
233 - };
234 - var selectComponentByUid = (state, componentUid) => state["components"].data.find((component) => component.uid === componentUid) ?? state["components"].unpublishedData.find((component) => component.uid === componentUid);
235 - var selectComponents = (0, _elementor_store.__createSelector)(selectData, selectUnpublishedData, (data, unpublishedData) => [...unpublishedData.map((item) => ({
236 - uid: item.uid,
237 - name: item.name,
238 - overridableProps: item.overridableProps
239 - })), ...data.filter((component) => !component.isArchived)]);
240 - var selectUnpublishedComponents = (0, _elementor_store.__createSelector)(selectUnpublishedData, (unpublishedData) => unpublishedData);
241 - var selectLoadIsPending = (0, _elementor_store.__createSelector)(selectLoadStatus, (status) => status === "pending");
242 - var selectLoadIsError = (0, _elementor_store.__createSelector)(selectLoadStatus, (status) => status === "error");
243 - var selectCreatedThisSession = (0, _elementor_store.__createSelector)(getCreatedThisSession, (createdThisSession) => createdThisSession);
244 - var DEFAULT_OVERRIDABLE_PROPS = {
245 - props: {},
246 - groups: {
247 - items: {},
248 - order: []
249 - }
250 - };
251 - var selectOverridableProps = (0, _elementor_store.__createSelector)(selectComponent, (component) => {
252 - if (!component) return;
253 - return component.overridableProps ?? DEFAULT_OVERRIDABLE_PROPS;
254 - });
255 - var useOverridableProps = (componentId) => {
256 - return (0, _elementor_store.__useSelector)((state) => componentId ? selectOverridableProps(state, componentId) : null);
257 - };
258 - var selectIsOverridablePropsLoaded = (0, _elementor_store.__createSelector)(selectComponent, (component) => {
259 - return !!component?.overridableProps;
260 - });
261 - var selectPath = (0, _elementor_store.__createSelector)(getPath, (path) => path);
262 - var selectCurrentComponentId = (0, _elementor_store.__createSelector)(getCurrentComponentId, (currentComponentId) => currentComponentId);
263 - var selectCurrentComponent = (0, _elementor_store.__createSelector)(selectData, getCurrentComponentId, (data, currentComponentId) => data.find((component) => component.id === currentComponentId));
264 - var useCurrentComponentId = () => {
265 - return (0, _elementor_store.__useSelector)(selectCurrentComponentId);
266 - };
267 - var useCurrentComponent = () => {
268 - return (0, _elementor_store.__useSelector)(selectCurrentComponent);
269 - };
270 - var selectUpdatedComponentNames = (0, _elementor_store.__createSelector)((state) => state[SLICE_NAME].updatedComponentNames, (updatedComponentNames) => Object.entries(updatedComponentNames).map(([componentId, title]) => ({
271 - componentId: Number(componentId),
272 - title
273 - })));
274 - var useSanitizedComponents = () => {
275 - return (0, _elementor_store.__useSelector)((state) => state[SLICE_NAME].sanitized);
276 - };
277 - var useIsSanitizedComponent = (componentId, key) => {
278 - const sanitizedComponents = useSanitizedComponents();
279 - if (!componentId) return false;
280 - return !!sanitizedComponents[componentId]?.[key];
281 - };
282 -
283 -//#endregion
284 -//#region packages/packages/core/editor-components/src/utils/component-document-data.ts
285 - var getComponentDocumentParams = (id) => ({
286 - action: "get_document_config",
287 - unique_id: `document-${id}`,
288 - data: { id }
289 - });
290 - var pendingRequests = /* @__PURE__ */ new Map();
291 - var getComponentDocumentData = (id) => {
292 - const pendingRequest = pendingRequests.get(id);
293 - if (pendingRequest) return pendingRequest;
294 - const request = _elementor_editor_v1_adapters.ajax.load(getComponentDocumentParams(id)).catch(() => null).finally(() => pendingRequests.delete(id));
295 - pendingRequests.set(id, request);
296 - return request;
297 - };
298 -
299 -//#endregion
300 -//#region packages/packages/core/editor-components/src/component-instance-transformer.ts
301 - var componentInstanceTransformer = (0, _elementor_editor_canvas.createTransformer)(async ({ component_id: id, overrides: overridesValue }) => {
302 - const unpublishedComponent = selectUnpublishedComponents((0, _elementor_store.__getState)()).find(({ uid }) => uid === id);
303 - const overrides = overridesValue?.reduce((acc, override) => ({
304 - ...acc,
305 - ...override
306 - }), {});
307 - if (unpublishedComponent) return {
308 - elements: structuredClone(unpublishedComponent.elements),
309 - overrides
310 - };
311 - if (typeof id !== "number") throw new Error(`Component ID "${id}" not valid.`);
312 - return {
313 - elements: (await getComponentDocumentData(id))?.elements ?? [],
314 - overrides
315 - };
316 - });
317 -
318 -//#endregion
319 -//#region packages/packages/core/editor-components/src/component-overridable-transformer.ts
320 - var componentOverridableTransformer = (0, _elementor_editor_canvas.createTransformer)((value, options) => {
321 - const { overrides } = options.renderContext ?? {};
322 - const overrideValue = overrides?.[value.override_key];
323 - if (overrideValue) {
324 - if (isOriginValueOverride(value.origin_value)) return transformOverride(value, options, overrideValue);
325 - return overrideValue;
326 - }
327 - return value.origin_value;
328 - });
329 - function transformOverride(value, options, overrideValue) {
330 - const transformer = _elementor_editor_canvas.settingsTransformersRegistry.get("override");
331 - if (!transformer) return null;
332 - const transformedValue = transformer(value.origin_value.value, options);
333 - if (!transformedValue) return null;
334 - const [key] = Object.keys(transformedValue);
335 - return { [key]: overrideValue };
336 - }
337 - function isOriginValueOverride(originValue) {
338 - return originValue.$$type === "override";
339 - }
340 -
341 -//#endregion
342 -//#region packages/packages/core/editor-components/src/component-override-transformer.ts
343 - var componentOverrideTransformer = (0, _elementor_editor_canvas.createTransformer)((override) => {
344 - const { override_key: key, override_value: overrideValue } = override;
345 - return { [key]: overrideValue };
346 - });
347 -
348 -//#endregion
349 -//#region packages/packages/core/editor-components/src/hooks/use-components.ts
350 - var useComponents = () => {
351 - return {
352 - components: (0, _elementor_store.__useSelector)(selectComponents),
353 - isLoading: (0, _elementor_store.__useSelector)(selectLoadIsPending)
354 - };
355 - };
356 -
357 -//#endregion
358 -//#region packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts
359 - var MIN_PRO_VERSION_FOR_COMPONENTS = "4.0";
360 - function isProComponentsSupported() {
361 - return (0, _elementor_utils.hasProInstalled)() && (0, _elementor_utils.isProAtLeast)(MIN_PRO_VERSION_FOR_COMPONENTS);
362 - }
363 - function isProOutdatedForComponents() {
364 - return (0, _elementor_utils.hasProInstalled)() && !(0, _elementor_utils.isProAtLeast)(MIN_PRO_VERSION_FOR_COMPONENTS);
365 - }
366 -
367 -//#endregion
368 -//#region packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx
369 - var SearchContext = (0, react.createContext)(void 0);
370 - var SearchProvider = ({ children, localStorageKey }) => {
371 - const { debouncedValue, handleChange, inputValue } = (0, _elementor_utils.useSearchState)({ localStorageKey });
372 - const clearSearch = () => {
373 - handleChange("");
374 - };
375 - return /* @__PURE__ */ react.createElement(SearchContext.Provider, { value: {
376 - handleChange,
377 - clearSearch,
378 - searchValue: debouncedValue,
379 - inputValue
380 - } }, children);
381 - };
382 - var useSearch = () => {
383 - const context = (0, react.useContext)(SearchContext);
384 - if (!context) throw new Error("useSearch must be used within a SearchProvider");
385 - return context;
386 - };
387 -
388 -//#endregion
389 -//#region packages/packages/core/editor-components/src/components/components-tab/component-search.tsx
390 - var ComponentSearch = () => {
391 - const { inputValue, handleChange } = useSearch();
392 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
393 - direction: "row",
394 - gap: .5,
395 - sx: {
396 - width: "100%",
397 - px: 2,
398 - py: 1.5
399 - }
400 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { flexGrow: 1 } }, /* @__PURE__ */ react.createElement(_elementor_ui.TextField, {
401 - role: "search",
402 - fullWidth: true,
403 - size: "tiny",
404 - value: inputValue,
405 - placeholder: (0, _wordpress_i18n.__)("Search", "elementor"),
406 - onChange: (e) => handleChange(e.target.value),
407 - InputProps: { startAdornment: /* @__PURE__ */ react.createElement(_elementor_ui.InputAdornment, { position: "start" }, /* @__PURE__ */ react.createElement(_elementor_icons.SearchIcon, { fontSize: "tiny" })) }
408 - })));
409 - };
410 -
411 -//#endregion
412 -//#region packages/packages/core/editor-components/src/hooks/use-components-permissions.ts
413 - var useComponentsPermissions = () => {
414 - const { isAdmin } = (0, _elementor_editor_current_user.useCurrentUserCapabilities)();
415 - return {
416 - canCreate: isAdmin,
417 - canEdit: isAdmin,
418 - canDelete: isAdmin,
419 - canRename: isAdmin
420 - };
421 - };
422 -
423 -//#endregion
424 -//#region packages/packages/core/editor-components/src/components/components-tab/components-item.tsx
425 - var ComponentItem = (0, react.forwardRef)(({ component, disabled = true, draggable, onDragStart, onDragEnd, onClick, isEditing = false, error = null, nameSlot, endSlot, ...props }, ref) => {
426 - return /* @__PURE__ */ react.createElement(_elementor_ui.ListItemButton, {
427 - disabled,
428 - draggable,
429 - onDragStart,
430 - onDragEnd,
431 - shape: "rounded",
432 - ref,
433 - sx: {
434 - border: "solid 1px",
435 - borderColor: "divider",
436 - py: .5,
437 - px: 1,
438 - display: "flex",
439 - width: "100%",
440 - alignItems: "center",
441 - gap: 1
442 - },
443 - ...props
444 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
445 - display: "flex",
446 - alignItems: "center",
447 - gap: 1,
448 - minWidth: 0,
449 - flexGrow: 1,
450 - onClick
451 - }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemIcon, { size: "tiny" }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, { fontSize: "tiny" })), /* @__PURE__ */ react.createElement(Indicator, {
452 - isActive: isEditing,
453 - isError: !!error
454 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
455 - display: "flex",
456 - flex: 1,
457 - minWidth: 0,
458 - flexGrow: 1
459 - }, nameSlot ?? /* @__PURE__ */ react.createElement(ComponentName, { name: component.name })))), endSlot);
460 - });
461 - var Indicator = (0, _elementor_ui.styled)(_elementor_ui.Box, { shouldForwardProp: (prop) => prop !== "isActive" && prop !== "isError" })(({ theme, isActive, isError }) => ({
462 - display: "flex",
463 - width: "100%",
464 - flexGrow: 1,
465 - borderRadius: theme.spacing(.5),
466 - border: getIndicatorBorder({
467 - isActive,
468 - isError,
469 - theme
470 - }),
471 - padding: `0 ${theme.spacing(1)}`,
472 - marginLeft: isActive ? theme.spacing(1) : 0,
473 - minWidth: 0
474 - }));
475 - var getIndicatorBorder = ({ isActive, isError, theme }) => {
476 - if (isError) return `2px solid ${theme.palette.error.main}`;
477 - if (isActive) return `2px solid ${theme.palette.secondary.main}`;
478 - return "none";
479 - };
480 - function ComponentName({ name, editable }) {
481 - if (editable?.isEditing) return /* @__PURE__ */ react.createElement(_elementor_editor_ui.EditableField, {
482 - ref: editable.ref,
483 - as: _elementor_ui.Typography,
484 - variant: "caption",
485 - ...editable.getProps()
486 - });
487 - return /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, {
488 - title: name,
489 - as: _elementor_ui.Typography,
490 - variant: "caption",
491 - color: "text.primary"
492 - });
493 - }
494 -
495 -//#endregion
496 -//#region packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx
497 - var ROWS = Array.from({ length: 3 }, (_, index) => index);
498 - var STAGGER_DELAY_MS = 80;
499 - var LoadingComponents = () => {
500 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
501 - "aria-label": "Loading components",
502 - gap: 1.5,
503 - sx: {
504 - pointerEvents: "none",
505 - position: "relative",
506 - maxHeight: "300px",
507 - overflow: "hidden",
508 - px: 1,
509 - "&:after": {
510 - position: "absolute",
511 - bottom: 0,
512 - content: "\"\"",
513 - left: 0,
514 - width: "100%",
515 - height: "40%",
516 - pointerEvents: "none",
517 - zIndex: 1
518 - }
519 - }
520 - }, ROWS.map((row) => /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
521 - key: row,
522 - display: "flex",
523 - alignItems: "center",
524 - gap: 1.5,
525 - sx: {
526 - py: .75,
527 - px: 1.5,
528 - opacity: 0,
529 - animation: `e-loading-fade-in 0.4s ease-out ${row * STAGGER_DELAY_MS}ms forwards`,
530 - "@keyframes e-loading-fade-in": {
531 - from: {
532 - opacity: 0,
533 - transform: "translateY(4px)"
534 - },
535 - to: {
536 - opacity: 1,
537 - transform: "translateY(0)"
538 - }
539 - }
540 - }
541 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Skeleton, {
542 - animation: "wave",
543 - variant: "rounded",
544 - width: 24,
545 - height: 24
546 - }), /* @__PURE__ */ react.createElement(_elementor_ui.Skeleton, {
547 - animation: "wave",
548 - variant: "rounded",
549 - width: "60%",
550 - height: 14
551 - }))));
552 - };
553 -
554 -//#endregion
555 -//#region packages/packages/core/editor-components/src/components/components-tab/components-list.tsx
556 - var LEARN_MORE_URL = "http://go.elementor.com/components-guide-article";
557 - var UPGRADE_URL$1 = "https://go.elementor.com/go-pro-components/";
558 - var UPDATE_PLUGINS_URL$2 = "/wp-admin/plugins.php";
559 - var SUBTITLE_OVERRIDE_SX = {
560 - fontSize: "0.875rem !important",
561 - fontWeight: "500 !important"
562 - };
563 - function ComponentsList() {
564 - const { components, isLoading, searchValue } = useFilteredComponents();
565 - if (isLoading) return /* @__PURE__ */ react.createElement(LoadingComponents, null);
566 - if (!components?.length) {
567 - if (searchValue.length) return /* @__PURE__ */ react.createElement(EmptySearchResult, null);
568 - if (isProOutdatedForComponents()) return /* @__PURE__ */ react.createElement(ProOutdatedEmptyState, null);
569 - return isProComponentsSupported() ? /* @__PURE__ */ react.createElement(EmptyState$1, null) : /* @__PURE__ */ react.createElement(ProUpgradeEmptyState, null);
570 - }
571 - return /* @__PURE__ */ react.createElement(_elementor_ui.List, { sx: {
572 - display: "flex",
573 - flexDirection: "column",
574 - gap: 1,
575 - px: 2
576 - } }, components.map((component) => /* @__PURE__ */ react.createElement(ComponentItem, {
577 - key: component.uid,
578 - component
579 - })));
580 - }
581 - var ProUpgradeEmptyState = () => {
582 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
583 - alignItems: "center",
584 - justifyContent: "start",
585 - height: "100%",
586 - sx: {
587 - px: 2,
588 - py: 4
589 - },
590 - gap: 2,
591 - overflow: "hidden"
592 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
593 - alignItems: "center",
594 - gap: 1
595 - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, {
596 - fontSize: "large",
597 - sx: { color: "text.secondary" }
598 - }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
599 - align: "center",
600 - variant: "subtitle2",
601 - color: "text.secondary",
602 - sx: SUBTITLE_OVERRIDE_SX
603 - }, (0, _wordpress_i18n.__)("Create Reusable Components", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
604 - align: "center",
605 - variant: "caption",
606 - color: "secondary",
607 - sx: { maxWidth: 200 }
608 - }, (0, _wordpress_i18n.__)("Create design elements that sync across your entire site.", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
609 - variant: "contained",
610 - color: "promotion",
611 - size: "small",
612 - startIcon: /* @__PURE__ */ react.createElement(_elementor_icons.CrownFilledIcon, null),
613 - href: UPGRADE_URL$1,
614 - target: "_blank",
615 - rel: "noopener noreferrer"
616 - }, (0, _wordpress_i18n.__)("Upgrade now", "elementor")));
617 - };
618 - var ProOutdatedEmptyState = () => {
619 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
620 - alignItems: "center",
621 - justifyContent: "start",
622 - height: "100%",
623 - sx: {
624 - px: 2,
625 - py: 4,
626 - maxWidth: 268,
627 - m: "auto"
628 - },
629 - gap: 2,
630 - overflow: "hidden"
631 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
632 - alignItems: "center",
633 - gap: 1
634 - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, {
635 - fontSize: "large",
636 - sx: { color: "text.secondary" }
637 - }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
638 - align: "center",
639 - variant: "subtitle2",
640 - color: "text.secondary",
641 - sx: SUBTITLE_OVERRIDE_SX
642 - }, (0, _wordpress_i18n.__)("Create Reusable Components", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
643 - align: "center",
644 - variant: "caption",
645 - color: "secondary"
646 - }, (0, _wordpress_i18n.__)("Create design elements that sync across your entire site.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
647 - align: "center",
648 - variant: "caption",
649 - color: "secondary",
650 - sx: { mt: 1 }
651 - }, (0, _wordpress_i18n.__)("To create components, update Elementor Pro to the latest version.", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
652 - variant: "text",
653 - color: "info",
654 - size: "small",
655 - href: UPDATE_PLUGINS_URL$2,
656 - target: "_blank",
657 - rel: "noopener noreferrer"
658 - }, (0, _wordpress_i18n.__)("Update Elementor Pro", "elementor")));
659 - };
660 - var EmptyState$1 = /* @__PURE__ */ __name(() => {
661 - const { canCreate } = useComponentsPermissions();
662 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
663 - alignItems: "center",
664 - justifyContent: "start",
665 - height: "100%",
666 - sx: {
667 - px: 2,
668 - py: 4
669 - },
670 - gap: 2,
671 - overflow: "hidden"
672 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
673 - alignItems: "center",
674 - gap: 1
675 - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, {
676 - fontSize: "large",
677 - sx: { color: "text.secondary" }
678 - }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
679 - align: "center",
680 - variant: "subtitle2",
681 - color: "text.secondary",
682 - sx: SUBTITLE_OVERRIDE_SX
683 - }, (0, _wordpress_i18n.__)("No components yet", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
684 - align: "center",
685 - variant: "caption",
686 - color: "secondary",
687 - sx: { maxWidth: 200 }
688 - }, (0, _wordpress_i18n.__)("Components are reusable blocks that sync across your site.", "elementor"), /* @__PURE__ */ react.createElement("br", null), canCreate ? (0, _wordpress_i18n.__)("Create once, use everywhere.", "elementor") : (0, _wordpress_i18n.__)("With your current role, you cannot create components. Contact an administrator to create one.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Link, {
689 - href: LEARN_MORE_URL,
690 - target: "_blank",
691 - rel: "noopener noreferrer",
692 - variant: "caption",
693 - color: "info.main"
694 - }, (0, _wordpress_i18n.__)("Learn more about components", "elementor"))), canCreate && /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.Divider, { sx: { width: "100%" } }), /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
695 - alignItems: "center",
696 - gap: 1,
697 - width: "100%"
698 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
699 - align: "center",
700 - variant: "subtitle2",
701 - color: "text.secondary",
702 - sx: SUBTITLE_OVERRIDE_SX
703 - }, (0, _wordpress_i18n.__)("Create your first one:", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
704 - align: "center",
705 - variant: "caption",
706 - color: "secondary",
707 - sx: { maxWidth: 228 }
708 - }, (0, _wordpress_i18n.__)("Right-click any div-block or flexbox on your canvas or structure and select \"Create component\"", "elementor")))));
709 - }, "EmptyState");
710 - var EmptySearchResult = () => {
711 - const { searchValue, clearSearch } = useSearch();
712 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
713 - color: "text.secondary",
714 - pt: 5,
715 - alignItems: "center",
716 - gap: 1,
717 - overflow: "hidden",
718 - justifySelf: "center"
719 - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, null), /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: { width: "100%" } }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
720 - align: "center",
721 - variant: "subtitle2",
722 - color: "inherit",
723 - sx: SUBTITLE_OVERRIDE_SX
724 - }, (0, _wordpress_i18n.__)("Sorry, nothing matched", "elementor")), searchValue && /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
725 - variant: "subtitle2",
726 - color: "inherit",
727 - sx: {
728 - ...SUBTITLE_OVERRIDE_SX,
729 - display: "flex",
730 - width: "100%",
731 - justifyContent: "center"
732 - }
733 - }, /* @__PURE__ */ react.createElement("span", null, "“"), /* @__PURE__ */ react.createElement("span", { style: {
734 - maxWidth: "80%",
735 - overflow: "hidden",
736 - textOverflow: "ellipsis"
737 - } }, searchValue), /* @__PURE__ */ react.createElement("span", null, "”."))), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
738 - align: "center",
739 - variant: "caption",
740 - color: "inherit"
741 - }, (0, _wordpress_i18n.__)("Try something else.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
742 - align: "center",
743 - variant: "caption",
744 - color: "inherit"
745 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Link, {
746 - color: "secondary",
747 - variant: "caption",
748 - component: "button",
749 - onClick: clearSearch
750 - }, (0, _wordpress_i18n.__)("Clear & try again", "elementor"))));
751 - };
752 - var useFilteredComponents = () => {
753 - const { components, isLoading } = useComponents();
754 - const { searchValue } = useSearch();
755 - return {
756 - components: components.filter((component) => component.name.toLowerCase().includes(searchValue.toLowerCase())),
757 - isLoading,
758 - searchValue
759 - };
760 - };
761 -
762 -//#endregion
763 -//#region packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx
764 - function ComponentsUpgradeAlert({ title, description, upgradeUrl }) {
765 - return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
766 - mt: "auto",
767 - position: "sticky",
768 - bottom: 0
769 - } }, /* @__PURE__ */ react.createElement(_elementor_ui.Alert, {
770 - variant: "standard",
771 - color: "promotion",
772 - icon: /* @__PURE__ */ react.createElement(_elementor_icons.CrownFilledIcon, { fontSize: "tiny" }),
773 - role: "status",
774 - size: "small",
775 - action: /* @__PURE__ */ react.createElement(_elementor_ui.AlertAction, {
776 - variant: "contained",
777 - color: "promotion",
778 - href: upgradeUrl,
779 - target: "_blank",
780 - rel: "noopener noreferrer"
781 - }, (0, _wordpress_i18n.__)("Upgrade now", "elementor")),
782 - sx: {
783 - m: 2,
784 - mt: 1
785 - }
786 - }, /* @__PURE__ */ react.createElement(_elementor_ui.AlertTitle, null, title), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "caption" }, description)));
787 - }
788 -
789 -//#endregion
790 -//#region packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx
791 - var UPGRADE_URL = "https://go.elementor.com/go-pro-components-exist-footer/";
792 - function ComponentsProNotification() {
793 - return /* @__PURE__ */ react.createElement(ComponentsUpgradeAlert, {
794 - title: (0, _wordpress_i18n.__)("Create new components", "elementor"),
795 - description: (0, _wordpress_i18n.__)("Creating new components requires an active Pro subscription.", "elementor"),
796 - upgradeUrl: UPGRADE_URL
797 - });
798 - }
799 -
800 -//#endregion
801 -//#region packages/packages/core/editor-components/src/components/components-update-alert.tsx
802 - var UPDATE_PLUGINS_URL$1 = "/wp-admin/plugins.php";
803 - function ComponentsUpdateAlert({ title, description }) {
804 - return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { sx: {
805 - mt: "auto",
806 - position: "sticky",
807 - bottom: 0
808 - } }, /* @__PURE__ */ react.createElement(_elementor_ui.Alert, {
809 - variant: "standard",
810 - color: "info",
811 - icon: /* @__PURE__ */ react.createElement(_elementor_icons.InfoCircleFilledIcon, { fontSize: "tiny" }),
812 - role: "status",
813 - size: "small",
814 - action: /* @__PURE__ */ react.createElement(_elementor_ui.AlertAction, {
815 - variant: "contained",
816 - color: "info",
817 - href: UPDATE_PLUGINS_URL$1,
818 - target: "_blank",
819 - rel: "noopener noreferrer"
820 - }, (0, _wordpress_i18n.__)("Upgrade Now", "elementor")),
821 - sx: {
822 - m: 2,
823 - mt: 1
824 - }
825 - }, /* @__PURE__ */ react.createElement(_elementor_ui.AlertTitle, null, title), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "caption" }, description)));
826 - }
827 -
828 -//#endregion
829 -//#region packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx
830 - function ComponentsUpdateNotification() {
831 - return /* @__PURE__ */ react.createElement(ComponentsUpdateAlert, {
832 - title: (0, _wordpress_i18n.__)("Create new Components", "elementor"),
833 - description: (0, _wordpress_i18n.__)("To create new components, update Elementor Pro to the latest version.", "elementor")
834 - });
835 - }
836 -
837 -//#endregion
838 -//#region packages/packages/core/editor-components/src/components/components-tab/components.tsx
839 - var FULL_HEIGHT_STYLE_ID = "components-full-height-panel";
840 - var FULL_HEIGHT_CSS = `
841 -#elementor-panel-page-elements {
842 - display: flex;
843 - flex-direction: column;
844 - height: 100%;
845 -}
846 -
847 -#elementor-panel-elements {
848 - display: flex;
849 - flex-direction: column;
850 - flex: 1;
851 - min-height: 0;
852 -}
853 -
854 -#elementor-panel-elements-wrapper {
855 - display: flex;
856 - flex-direction: column;
857 - flex: 1;
858 - min-height: 0;
859 -}
860 -`;
861 - var useFullHeightPanel = () => {
862 - (0, react.useLayoutEffect)(() => {
863 - let style = document.getElementById(FULL_HEIGHT_STYLE_ID);
864 - if (!style) {
865 - style = document.createElement("style");
866 - style.id = FULL_HEIGHT_STYLE_ID;
867 - style.textContent = FULL_HEIGHT_CSS;
868 - document.head.appendChild(style);
869 - }
870 - return () => {
871 - document.getElementById(FULL_HEIGHT_STYLE_ID)?.remove();
872 - };
873 - }, []);
874 - };
875 - var ComponentsContent = () => {
876 - const { components, isLoading } = useComponents();
877 - const hasComponents = !isLoading && components.length > 0;
878 - const showProNotification = !isProComponentsSupported() && hasComponents;
879 - const isOutdated = isProOutdatedForComponents();
880 - useFullHeightPanel();
881 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
882 - justifyContent: "space-between",
883 - sx: {
884 - flex: 1,
885 - minHeight: 0
886 - }
887 - }, hasComponents && /* @__PURE__ */ react.createElement(ComponentSearch, null), /* @__PURE__ */ react.createElement(ComponentsList, null), showProNotification && (isOutdated ? /* @__PURE__ */ react.createElement(ComponentsUpdateNotification, null) : /* @__PURE__ */ react.createElement(ComponentsProNotification, null)));
888 - };
889 - var Components = () => {
890 - return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ThemeProvider, null, /* @__PURE__ */ react.createElement(SearchProvider, { localStorageKey: "elementor-components-search" }, /* @__PURE__ */ react.createElement(ComponentsContent, null)));
891 - };
892 -
893 -//#endregion
894 -//#region packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx
895 - function DetachInstanceConfirmationDialog({ open, onClose, onConfirm }) {
896 - return /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog, {
897 - open,
898 - onClose
899 - }, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Title, {
900 - icon: _elementor_icons.AlertTriangleFilledIcon,
901 - iconColor: "secondary"
902 - }, (0, _wordpress_i18n.__)("Detach from Component?", "elementor")), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Content, null, /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.ContentText, null, (0, _wordpress_i18n.__)("Detaching this instance will break its link to the Component. Changes to the Component will no longer apply. Continue?", "elementor"))), /* @__PURE__ */ react.createElement(_elementor_editor_ui.ConfirmationDialog.Actions, {
903 - onClose,
904 - onConfirm,
905 - confirmLabel: (0, _wordpress_i18n.__)("Detach", "elementor"),
906 - color: "primary"
907 - }));
908 - }
909 - function openDetachConfirmDialog(onConfirm) {
910 - const handleConfirm = () => {
911 - (0, _elementor_editor_ui.closeDialog)();
912 - onConfirm();
913 - };
914 - (0, _elementor_editor_ui.openDialog)({ component: /* @__PURE__ */ react.createElement(DetachInstanceConfirmationDialog, {
915 - open: true,
916 - onClose: _elementor_editor_ui.closeDialog,
917 - onConfirm: handleConfirm
918 - }) });
919 - }
920 -
921 -//#endregion
922 -//#region packages/packages/core/editor-components/src/components/in-edit-mode.tsx
923 - var openEditModeDialog = (lockedBy) => {
924 - (0, _elementor_editor_ui.openDialog)({ component: /* @__PURE__ */ react.createElement(EditModeDialog, { lockedBy }) });
925 - };
926 - var EditModeDialog = ({ lockedBy }) => {
927 - const content = (0, _wordpress_i18n.__)("%s is currently editing this document", "elementor").replace("%s", lockedBy);
928 - return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(_elementor_ui.DialogHeader, { logo: false }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
929 - display: "flex",
930 - alignItems: "center",
931 - gap: 1
932 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Icon, { color: "secondary" }, /* @__PURE__ */ react.createElement(_elementor_icons.InfoCircleFilledIcon, { fontSize: "medium" })), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "subtitle1" }, content))), /* @__PURE__ */ react.createElement(_elementor_ui.DialogContent, null, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
933 - spacing: 2,
934 - direction: "column"
935 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Typography, { variant: "body2" }, (0, _wordpress_i18n.__)("You can wait for them to finish or reach out to coordinate your changes together.", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.DialogActions, null, /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
936 - color: "secondary",
937 - variant: "contained",
938 - onClick: _elementor_editor_ui.closeDialog
939 - }, (0, _wordpress_i18n.__)("Close", "elementor"))))));
940 - };
941 -
942 -//#endregion
943 -//#region packages/packages/core/editor-components/src/provider/component-instance-context.tsx
944 - var ComponentInstanceContext = (0, react.createContext)(null);
945 - function ComponentInstanceProvider({ children, ...props }) {
946 - return /* @__PURE__ */ react.createElement(ComponentInstanceContext.Provider, { value: props }, children);
947 - }
948 - function useComponentInstanceContext() {
949 - const context = (0, react.useContext)(ComponentInstanceContext);
950 - if (!context) throw new Error("useComponentInstanceContext must be used within a ComponentInstanceProvider");
951 - return context;
952 - }
953 - var useComponentId = () => useComponentInstanceContext().componentId;
954 - var useComponentInstanceOverrides = () => useComponentInstanceContext().overrides;
955 - var useComponentOverridableProps = () => useComponentInstanceContext().overridableProps;
956 -
957 -//#endregion
958 -//#region packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts
959 - var componentInstanceOverridePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("override", _elementor_schema.z.object({
960 - override_key: _elementor_schema.z.string(),
961 - override_value: _elementor_schema.z.unknown(),
962 - schema_source: _elementor_schema.z.object({
963 - type: _elementor_schema.z.literal("component"),
964 - id: _elementor_schema.z.number()
965 - })
966 - }));
967 -
968 -//#endregion
969 -//#region packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts
970 - var componentOverridablePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("overridable", _elementor_schema.z.object({
971 - override_key: _elementor_schema.z.string(),
972 - origin_value: _elementor_schema.z.object({
973 - $$type: _elementor_schema.z.string(),
974 - value: _elementor_schema.z.unknown()
975 - }).nullable()
976 - }));
977 -
978 -//#endregion
979 -//#region packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts
980 - var componentInstanceOverridesPropTypeUtil = (0, _elementor_editor_props.createPropUtils)("overrides", _elementor_schema.z.array(_elementor_schema.z.union([componentInstanceOverridePropTypeUtil.schema, componentOverridablePropTypeUtil.schema])).optional().default([]));
981 -
982 -//#endregion
983 -//#region packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts
984 - var componentInstancePropTypeUtil = (0, _elementor_editor_props.createPropUtils)("component-instance", _elementor_schema.z.object({
985 - component_id: _elementor_editor_props.numberPropTypeUtil.schema,
986 - overrides: _elementor_schema.z.optional(componentInstanceOverridesPropTypeUtil.schema)
987 - }));
988 -
989 -//#endregion
990 -//#region packages/packages/core/editor-components/src/utils/tracking.ts
991 - var FEATURE_NAME = "Components";
992 - var trackComponentEvent = ({ action, source, executedBy, ...data }) => {
993 - if (source === "system" || executedBy === "system") return;
994 - const { dispatchEvent, config } = (0, _elementor_events.getMixpanel)();
995 - if (!config?.names?.components?.[action]) return;
996 - const name = config.names.components[action];
997 - dispatchEvent?.(name, {
998 - ...data,
999 - executed_by: executedBy ?? source,
1000 - "Feature name": FEATURE_NAME
1001 - });
1002 - };
1003 - var onElementDrop = (_args, element) => {
1004 - if (!(element?.model?.get("widgetType") === "e-component")) return;
1005 - const editorSettings = element.model.get("editor_settings");
1006 - const componentName = editorSettings?.title;
1007 - const componentUID = editorSettings?.component_uid;
1008 - const instanceId = element.id;
1009 - const createdThisSession = selectCreatedThisSession((0, _elementor_store.__getState)());
1010 - const isSameSessionReuse = componentUID && createdThisSession.includes(componentUID);
1011 - const { locations, secondaryLocations } = window.elementorCommon.eventsManager.config;
1012 - trackComponentEvent({
1013 - action: "instanceAdded",
1014 - executedBy: "user",
1015 - instance_id: instanceId,
1016 - component_uid: componentUID,
1017 - component_name: componentName,
1018 - is_same_session_reuse: isSameSessionReuse,
1019 - location: locations.widgetPanel,
1020 - secondary_location: secondaryLocations.componentsTab
1021 - });
1022 - };
1023 -
1024 -//#endregion
1025 -//#region packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts
1026 - function regenerateLocalStyleIds(element) {
1027 - const originalStyles = element.styles;
1028 - if (!originalStyles || Object.keys(originalStyles).length === 0) return {
1029 - styles: void 0,
1030 - settings: void 0
1031 - };
1032 - const newStyles = {};
1033 - const styleIdMapping = {};
1034 - for (const [originalStyleId, style] of Object.entries(originalStyles)) {
1035 - const newStyleId = generateLocalStyleId(element.id);
1036 - newStyles[newStyleId] = {
1037 - ...style,
1038 - id: newStyleId
1039 - };
1040 - styleIdMapping[originalStyleId] = newStyleId;
1041 - }
1042 - const settings = element.settings;
1043 - if (!settings || Object.keys(settings).length === 0) return {
1044 - styles: newStyles,
1045 - settings: void 0
1046 - };
1047 - const updatedSettings = { ...settings };
1048 - for (const [propKey, propValue] of Object.entries(updatedSettings)) if (isClassesProp(propValue) && propValue.value.length > 0) {
1049 - const updatedClasses = propValue.value.map((classId) => styleIdMapping[classId] ?? classId);
1050 - updatedSettings[propKey] = _elementor_editor_props.classesPropTypeUtil.create(updatedClasses);
1051 - }
1052 - return {
1053 - styles: newStyles,
1054 - settings: updatedSettings
1055 - };
1056 - }
1057 - function isClassesProp(prop) {
1058 - return _elementor_editor_props.classesPropTypeUtil.isValid(prop);
1059 - }
1060 - function generateLocalStyleId(elementId) {
1061 - return `e-${elementId}-${(0, _elementor_editor_elements.generateElementId)()}`;
1062 - }
1063 -
1064 -//#endregion
1065 -//#region packages/packages/core/editor-components/src/consts.ts
1066 - var COMPONENT_WIDGET_TYPE$1 = "e-component";
1067 -
1068 -//#endregion
1069 -//#region packages/packages/core/editor-components/src/utils/is-component-instance.ts
1070 - function isComponentInstance(elementModel) {
1071 - return [elementModel.widgetType, elementModel.elType].includes(COMPONENT_WIDGET_TYPE$1);
1072 - }
1073 -
1074 -//#endregion
1075 -//#region packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts
1076 - function resolveOverridableSettings(element, overrideMap) {
1077 - if (isComponentInstance({
1078 - widgetType: element.widgetType,
1079 - elType: element.elType
1080 - })) return resolveOverridableSettingsForComponentInstance(element, overrideMap);
1081 - return resolveOverridableSettingsForElement(element, overrideMap);
1082 - }
1083 - function resolveOverridableSettingsForElement(element, overrideMap) {
1084 - const updatedSettings = element.settings ? { ...element.settings } : {};
1085 - for (const [settingKey, settingValue] of Object.entries(element.settings ?? {})) updatedSettings[settingKey] = resolvePropValue(settingValue, overrideMap);
1086 - return updatedSettings;
1087 - }
1088 - function resolveOverridableSettingsForComponentInstance(element, overrideMap) {
1089 - const componentInstance = element.settings?.component_instance;
1090 - if (!componentInstancePropTypeUtil.isValid(componentInstance)) return element.settings ?? {};
1091 - const instanceOverrides = componentInstance.value.overrides?.value;
1092 - if (!instanceOverrides?.length) return element.settings ?? {};
1093 - const updatedOverrides = instanceOverrides.map((item) => resolvePropValue(item, overrideMap, { isOverridableOverride: true }));
1094 - return {
1095 - ...element.settings,
1096 - component_instance: {
1097 - ...componentInstance,
1098 - value: {
1099 - ...componentInstance.value,
1100 - overrides: {
1101 - ...componentInstance.value.overrides,
1102 - value: updatedOverrides
1103 - }
1104 - }
1105 - }
1106 - };
1107 - }
1108 - function resolvePropValue(propValue, overrideMap, options) {
1109 - const { isOverridableOverride = false } = options ?? {};
1110 - if (!componentOverridablePropTypeUtil.isValid(propValue)) return propValue;
1111 - const overridableKey = propValue.value.override_key;
1112 - const matchingOverride = overrideMap.get(overridableKey);
1113 - const originValue = componentOverridablePropTypeUtil.extract(propValue)?.origin_value;
1114 - if (!matchingOverride) return originValue;
1115 - if (isOverridableOverride) return resolveOverridableOverride(matchingOverride, originValue);
1116 - return componentInstanceOverridePropTypeUtil.extract(matchingOverride)?.override_value ?? originValue;
1117 - }
1118 - function resolveOverridableOverride(matchingOverride, originValue) {
1119 - if (!originValue || !componentInstanceOverridePropTypeUtil.isValid(originValue)) return null;
1120 - return componentInstanceOverridePropTypeUtil.create({
1121 - override_value: matchingOverride.value.override_value,
1122 - override_key: originValue.value.override_key,
1123 - schema_source: originValue.value.schema_source
1124 - });
1125 - }
1126 -
1127 -//#endregion
1128 -//#region packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts
1129 - function resolveDetachedInstance(element, overrides) {
1130 - const overrideMap = createOverrideMap(overrides);
1131 - return resolveElementRecursive(structuredClone(element), overrideMap);
1132 - }
1133 - function resolveElementRecursive(element, overrideMap) {
1134 - element.id = (0, _elementor_editor_elements.generateElementId)();
1135 - if (element.styles) {
1136 - const { styles, settings } = regenerateLocalStyleIds(element);
1137 - element.styles = styles;
1138 - if (settings) element.settings = {
1139 - ...element.settings,
1140 - ...settings
1141 - };
1142 - }
1143 - if (element.settings) element.settings = resolveOverridableSettings(element, overrideMap);
1144 - if (element.elements?.length) element.elements = element.elements.map((child) => resolveElementRecursive(child, overrideMap));
1145 - return element;
1146 - }
1147 - function createOverrideMap(overrides) {
1148 - const map = /* @__PURE__ */ new Map();
1149 - overrides.forEach((item) => {
1150 - let override = null;
1151 - if (componentInstanceOverridePropTypeUtil.isValid(item)) override = item;
1152 - else if (componentOverridablePropTypeUtil.isValid(item)) override = getOverridableOverride(item);
1153 - if (override) {
1154 - const overrideKey = override.value.override_key;
1155 - map.set(overrideKey, override);
1156 - }
1157 - });
1158 - return map;
1159 - }
1160 - function getOverridableOverride(propValue) {
1161 - if (!componentOverridablePropTypeUtil.isValid(propValue)) return null;
1162 - const originValue = componentOverridablePropTypeUtil.extract(propValue)?.origin_value;
1163 - if (!componentInstanceOverridePropTypeUtil.isValid(originValue)) return null;
1164 - return originValue;
1165 - }
1166 -
1167 -//#endregion
1168 -//#region packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts
1169 - var DETACH_EVENT = "elementor/components/detach-instance";
1170 - var DETACH_UNDO_EVENT = "elementor/components/undo-detach-instance";
1171 - var DETACH_REDO_EVENT = "elementor/components/redo-detach-instance";
1172 - async function detachComponentInstance({ instanceId, componentId, trackingInfo }) {
1173 - const instanceContainer = (0, _elementor_editor_elements.getContainer)(instanceId);
1174 - if (!instanceContainer) throw new Error(`Instance container with ID "${instanceId}" not found.`);
1175 - const componentData = await getComponentDocumentData(componentId);
1176 - if (!componentData) throw new Error(`Component with ID "${componentId}" not found.`);
1177 - const rootElement = componentData.elements?.[0];
1178 - if (!rootElement) throw new Error(`Component with ID "${componentId}" has no root element.`);
1179 - return (0, _elementor_editor_v1_adapters.undoable)({
1180 - do: () => {
1181 - const overrides = extractInstanceOverrides(instanceContainer);
1182 - const detachedInstanceElementData = resolveDetachedInstance(rootElement, overrides);
1183 - const originalInstanceModel = instanceContainer.model.toJSON();
1184 - const actionId = (/* @__PURE__ */ new Date()).getTime();
1185 - window.dispatchEvent(new CustomEvent(DETACH_EVENT, { detail: {
1186 - detachedInstanceId: instanceId,
1187 - detachActionId: actionId
1188 - } }));
1189 - const detachedElement = (0, _elementor_editor_elements.replaceElement)({
1190 - currentElementId: instanceId,
1191 - newElement: detachedInstanceElementData,
1192 - withHistory: false
1193 - });
1194 - (0, _elementor_editor_elements.selectElement)(detachedElement.id);
1195 - const componentUid = selectComponent((0, _elementor_store.__getState)(), componentId)?.uid;
1196 - trackComponentEvent({
1197 - action: "detached",
1198 - executedBy: "user",
1199 - component_uid: componentUid,
1200 - instance_id: instanceId,
1201 - location: trackingInfo.location,
1202 - secondary_location: trackingInfo.secondaryLocation,
1203 - trigger: trackingInfo.trigger
1204 - });
1205 - return {
1206 - detachedElement,
1207 - detachedInstanceElementData,
1208 - originalInstanceModel,
1209 - actionId
1210 - };
1211 - },
1212 - undo: (_, { detachedElement, originalInstanceModel, actionId }) => {
1213 - const restoredInstance = (0, _elementor_editor_elements.replaceElement)({
1214 - currentElementId: detachedElement.id,
1215 - newElement: originalInstanceModel,
1216 - withHistory: false
1217 - });
1218 - window.dispatchEvent(new CustomEvent(DETACH_UNDO_EVENT, { detail: {
1219 - restoredInstanceId: restoredInstance.id,
1220 - detachActionId: actionId
1221 - } }));
1222 - (0, _elementor_editor_canvas.doAfterRender)([restoredInstance.id], () => {
1223 - (0, _elementor_editor_elements.selectElement)(restoredInstance.id);
1224 - });
1225 - return restoredInstance;
1226 - },
1227 - redo: (_, doReturn, restoredInstance) => {
1228 - const { detachedInstanceElementData, actionId } = doReturn;
1229 - const detachedElement = (0, _elementor_editor_elements.replaceElement)({
1230 - currentElementId: restoredInstance.id,
1231 - newElement: detachedInstanceElementData,
1232 - withHistory: false
1233 - });
1234 - window.dispatchEvent(new CustomEvent(DETACH_REDO_EVENT, { detail: {
1235 - detachedInstanceId: detachedElement.id,
1236 - detachActionId: actionId
1237 - } }));
1238 - (0, _elementor_editor_elements.selectElement)(detachedElement.id);
1239 - return {
1240 - ...doReturn,
1241 - detachedElement
1242 - };
1243 - }
1244 - }, {
1245 - title: (0, _wordpress_i18n.__)("Detach from Component", "elementor"),
1246 - subtitle: (0, _wordpress_i18n.__)("Instance detached", "elementor")
1247 - })();
1248 - }
1249 - function extractInstanceOverrides(instanceContainer) {
1250 - const settings = instanceContainer.model.toJSON().settings;
1251 - const componentInstance = componentInstancePropTypeUtil.extract(settings?.component_instance);
1252 - return componentInstanceOverridesPropTypeUtil.extract(componentInstance?.overrides) ?? [];
1253 - }
1254 -
1255 -//#endregion
1256 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx
1257 - function InstancePanelHeader({ componentName, actions }) {
1258 - return /* @__PURE__ */ react.createElement(_elementor_editor_panels.PanelHeader, { sx: {
1259 - justifyContent: "start",
1260 - px: 2
1261 - } }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
1262 - direction: "row",
1263 - alignItems: "center",
1264 - flexGrow: 1,
1265 - gap: 1,
1266 - maxWidth: "100%"
1267 - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentsIcon, {
1268 - fontSize: "small",
1269 - sx: { color: "text.tertiary" }
1270 - }), /* @__PURE__ */ react.createElement(_elementor_editor_ui.EllipsisWithTooltip, {
1271 - title: componentName,
1272 - as: _elementor_editor_panels.PanelHeaderTitle,
1273 - sx: { flexGrow: 1 }
1274 - }), actions));
1275 - }
1276 - function EditComponentAction({ label, onClick, disabled = false, icon: Icon }) {
1277 - return /* @__PURE__ */ react.createElement(_elementor_ui.Tooltip, { title: label }, /* @__PURE__ */ react.createElement(_elementor_ui.IconButton, {
1278 - size: "tiny",
1279 - onClick,
1280 - "aria-label": label,
1281 - disabled
1282 - }, /* @__PURE__ */ react.createElement(Icon, { fontSize: "tiny" })));
1283 - }
1284 -
1285 -//#endregion
1286 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx
1287 - var DetachAction = ({ componentInstanceId, componentId }) => {
1288 - const [isDetachDialogOpen, setIsDetachDialogOpen] = (0, react.useState)(false);
1289 - const handleDetachConfirm = async () => {
1290 - setIsDetachDialogOpen(false);
1291 - try {
1292 - await detachComponentInstance({
1293 - instanceId: componentInstanceId,
1294 - componentId,
1295 - trackingInfo: getDetachTrackingInfo()
1296 - });
1297 - } catch {
1298 - (0, _elementor_editor_notifications.notify)({
1299 - type: "error",
1300 - message: (0, _wordpress_i18n.__)("Failed to detach component instance.", "elementor"),
1301 - id: "detach-component-instance-failed"
1302 - });
1303 - }
1304 - };
1305 - const handleDetachCancel = () => {
1306 - setIsDetachDialogOpen(false);
1307 - };
1308 - const handleDetachClick = () => {
1309 - setIsDetachDialogOpen(true);
1310 - };
1311 - const detachLabel = (0, _wordpress_i18n.__)("Detach from Component", "elementor");
1312 - return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(EditComponentAction, {
1313 - label: detachLabel,
1314 - icon: _elementor_icons.DetachIcon,
1315 - onClick: handleDetachClick
1316 - }), /* @__PURE__ */ react.createElement(DetachInstanceConfirmationDialog, {
1317 - open: isDetachDialogOpen,
1318 - onClose: handleDetachCancel,
1319 - onConfirm: handleDetachConfirm
1320 - }));
1321 - };
1322 - function getDetachTrackingInfo() {
1323 - const config = window?.elementorCommon?.eventsManager?.config;
1324 - if (!config) return {
1325 - location: "",
1326 - trigger: ""
1327 - };
1328 - return {
1329 - location: config.locations.components.instanceEditingPanel,
1330 - trigger: config.triggers.click
1331 - };
1332 - }
1333 -
1334 -//#endregion
1335 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx
1336 - var EmptyState = ({ onEditComponent }) => {
1337 - const { canEdit } = useComponentsPermissions();
1338 - const message = canEdit ? (0, _wordpress_i18n.__)("Edit the component to add properties, manage them or update the design across all instances.", "elementor") : (0, _wordpress_i18n.__)("With your current role, you cannot edit this component. Contact an administrator to add properties.", "elementor");
1339 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
1340 - alignItems: "center",
1341 - justifyContent: "start",
1342 - height: "100%",
1343 - color: "text.secondary",
1344 - sx: {
1345 - p: 2.5,
1346 - pt: 8,
1347 - pb: 5.5,
1348 - mt: 1
1349 - },
1350 - gap: 1.5
1351 - }, /* @__PURE__ */ react.createElement(_elementor_icons.ComponentPropListIcon, { fontSize: "large" }), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
1352 - align: "center",
1353 - variant: "subtitle2"
1354 - }, (0, _wordpress_i18n.__)("No properties yet", "elementor")), /* @__PURE__ */ react.createElement(_elementor_ui.Typography, {
1355 - align: "center",
1356 - variant: "caption",
1357 - maxWidth: "170px"
1358 - }, message), canEdit && /* @__PURE__ */ react.createElement(_elementor_ui.Button, {
1359 - variant: "outlined",
1360 - color: "secondary",
1361 - size: "small",
1362 - sx: { mt: 1 },
1363 - disabled: !onEditComponent,
1364 - onClick: onEditComponent
1365 - }, /* @__PURE__ */ react.createElement(_elementor_icons.PencilIcon, { fontSize: "small" }), (0, _wordpress_i18n.__)("Edit component", "elementor")));
1366 - };
1367 -
1368 -//#endregion
1369 -//#region packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts
1370 - function useControlsByWidgetType(type) {
1371 - const elementType = (0, _elementor_editor_elements.getElementType)(type);
1372 - if (!elementType) return {};
1373 - return getControlsByBind(iterateControls(elementType.controls));
1374 - }
1375 - function iterateControls(controls) {
1376 - return controls.map((control) => {
1377 - if (control.type === "control" && "bind" in control.value) return control;
1378 - if (control.type === "section") return iterateControls(control.value.items);
1379 - return null;
1380 - }).filter(Boolean).flat();
1381 - }
1382 - function getControlsByBind(controls) {
1383 - return controls.reduce((controlsByBind, control) => ({
1384 - ...controlsByBind,
1385 - [control.value.bind]: control
1386 - }), {});
1387 - }
1388 -
1389 -//#endregion
1390 -//#region packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx
1391 - var OverridablePropContext = (0, react.createContext)(null);
1392 - function OverridablePropProvider({ children, ...props }) {
1393 - return /* @__PURE__ */ react.createElement(OverridablePropContext.Provider, { value: props }, children);
1394 - }
1395 - var useOverridablePropValue = () => (0, react.useContext)(OverridablePropContext)?.value;
1396 - var useComponentInstanceElement = () => (0, react.useContext)(OverridablePropContext)?.componentInstanceElement;
1397 -
1398 -//#endregion
1399 -//#region packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts
1400 - var resolveOverridePropValue = (originalPropValue) => {
1401 - if (componentOverridablePropTypeUtil.isValid(originalPropValue)) return getOverridableValue(originalPropValue);
1402 - if (componentInstanceOverridePropTypeUtil.isValid(originalPropValue)) return getOverrideValue(originalPropValue);
1403 - return originalPropValue;
1404 - };
1405 - function getOverridableValue(overridableProp) {
1406 - const overridableValue = componentOverridablePropTypeUtil.extract(overridableProp);
1407 - if (!overridableValue) return null;
1408 - if (componentInstanceOverridePropTypeUtil.isValid(overridableValue.origin_value)) return getOverrideValue(overridableValue.origin_value);
1409 - return overridableValue.origin_value;
1410 - }
1411 - function getOverrideValue(overrideProp) {
1412 - const overrideValue = componentInstanceOverridePropTypeUtil.extract(overrideProp);
1413 - if (!overrideValue) return null;
1414 - return overrideValue.override_value;
1415 - }
1416 -
1417 -//#endregion
1418 -//#region packages/packages/core/editor-components/src/store/dispatchers.ts
1419 - function safeDispatch() {
1420 - return (0, _elementor_store.__getStore)()?.dispatch;
1421 - }
1422 - var componentsActions = {
1423 - add(components) {
1424 - (0, _elementor_store.__dispatch)(slice.actions.add(components));
1425 - },
1426 - load(components) {
1427 - (0, _elementor_store.__dispatch)(slice.actions.load(components));
1428 - },
1429 - addUnpublished(component) {
1430 - (0, _elementor_store.__dispatch)(slice.actions.addUnpublished(component));
1431 - },
1432 - removeUnpublished(uids) {
1433 - (0, _elementor_store.__dispatch)(slice.actions.removeUnpublished(uids));
1434 - },
1435 - resetUnpublished() {
1436 - (0, _elementor_store.__dispatch)(slice.actions.resetUnpublished());
1437 - },
1438 - addCreatedThisSession(uid) {
1439 - (0, _elementor_store.__dispatch)(slice.actions.addCreatedThisSession(uid));
1440 - },
1441 - removeCreatedThisSession(uid) {
1442 - (0, _elementor_store.__dispatch)(slice.actions.removeCreatedThisSession(uid));
1443 - },
1444 - archive(componentId) {
1445 - (0, _elementor_store.__dispatch)(slice.actions.archive(componentId));
1446 - },
1447 - setCurrentComponentId(id) {
1448 - safeDispatch()?.(slice.actions.setCurrentComponentId(id));
1449 - },
1450 - setPath(path) {
1451 - safeDispatch()?.(slice.actions.setPath(path));
1452 - },
1453 - setOverridableProps(componentId, overridableProps) {
1454 - (0, _elementor_store.__dispatch)(slice.actions.setOverridableProps({
1455 - componentId,
1456 - overridableProps
1457 - }));
1458 - },
1459 - rename(componentUid, name) {
1460 - (0, _elementor_store.__dispatch)(slice.actions.rename({
1461 - componentUid,
1462 - name
1463 - }));
1464 - },
1465 - cleanUpdatedComponentNames() {
1466 - (0, _elementor_store.__dispatch)(slice.actions.cleanUpdatedComponentNames());
1467 - },
1468 - updateComponentSanitizedAttribute(componentId, attribute) {
1469 - (0, _elementor_store.__dispatch)(slice.actions.updateComponentSanitizedAttribute({
1470 - componentId,
1471 - attribute
1472 - }));
1473 - },
1474 - resetSanitizedComponents() {
1475 - (0, _elementor_store.__dispatch)(slice.actions.resetSanitizedComponents());
1476 - }
1477 - };
1478 -
1479 -//#endregion
1480 -//#region packages/packages/core/editor-components/src/store/selectors.ts
1481 - function safeGetState() {
1482 - return (0, _elementor_store.__getStore)()?.getState();
1483 - }
1484 - var componentsSelectors = {
1485 - getOverridableProps(componentId) {
1486 - return selectOverridableProps((0, _elementor_store.__getState)(), componentId);
1487 - },
1488 - getCurrentComponent() {
1489 - return selectCurrentComponent((0, _elementor_store.__getState)());
1490 - },
1491 - getCurrentComponentId() {
1492 - const state = safeGetState();
1493 - if (!state) return null;
1494 - return selectCurrentComponentId(state);
1495 - },
1496 - getUnpublishedComponents() {
1497 - return selectUnpublishedComponents((0, _elementor_store.__getState)());
1498 - },
1499 - getUpdatedComponentNames() {
1500 - return selectUpdatedComponentNames((0, _elementor_store.__getState)());
1501 - },
1502 - getArchivedThisSession() {
1503 - return selectArchivedThisSession((0, _elementor_store.__getState)());
1504 - },
1505 - getCreatedThisSession() {
1506 - return selectCreatedThisSession((0, _elementor_store.__getState)());
1507 - },
1508 - getComponents() {
1509 - return selectComponents((0, _elementor_store.__getState)());
1510 - },
1511 - getComponentByUid(componentUid) {
1512 - return selectComponentByUid((0, _elementor_store.__getState)(), componentUid);
1513 - }
1514 - };
1515 -
1516 -//#endregion
1517 -//#region packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts
1518 - function updateOverridableProp(componentId, propValue, originPropFields) {
1519 - const overridableProps = componentsSelectors.getOverridableProps(componentId);
1520 - if (!overridableProps) return;
1521 - const existingOverridableProp = overridableProps.props[propValue.override_key];
1522 - if (!existingOverridableProp) return;
1523 - const originValue = resolveOverridePropValue(propValue.origin_value);
1524 - const newOverridableProp = originPropFields ? {
1525 - originValue,
1526 - originPropFields
1527 - } : { originValue };
1528 - const newOverridableProps = {
1529 - ...overridableProps,
1530 - props: {
1531 - ...overridableProps.props,
1532 - [existingOverridableProp.overrideKey]: {
1533 - ...existingOverridableProp,
1534 - ...newOverridableProp
1535 - }
1536 - }
1537 - };
1538 - componentsActions.setOverridableProps(componentId, newOverridableProps);
1539 - }
1540 -
1541 -//#endregion
1542 -//#region packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts
1543 - var getPropTypeForComponentOverride = (overridableProp) => {
1544 - if (overridableProp.originPropFields) return getPropType(overridableProp.originPropFields);
1545 - const { widgetType, propKey } = overridableProp;
1546 - return getPropType({
1547 - widgetType,
1548 - propKey
1549 - });
1550 - };
1551 - function getPropType({ widgetType, propKey }) {
1552 - return ((0, _elementor_editor_elements.getWidgetsCache)()?.[widgetType]?.atomic_props_schema)?.[propKey];
1553 - }
1554 -
1555 -//#endregion
1556 -//#region packages/packages/core/editor-components/src/utils/overridable-props-utils.ts
1557 - function getMatchingOverride(overrides, overrideKey) {
1558 - return overrides?.find((override) => {
1559 - const overridableValue = componentOverridablePropTypeUtil.extract(override);
1560 - if (overridableValue) return componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value)?.override_key === overrideKey;
1561 - return override.value.override_key === overrideKey;
1562 - }) ?? null;
1563 - }
1564 -
1565 -//#endregion
1566 -//#region packages/packages/core/editor-components/src/components/control-label.tsx
1567 - var ControlLabel = ({ children, ...props }) => {
1568 - return /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
1569 - direction: "row",
1570 - alignItems: "center",
1571 - justifyItems: "start",
1572 - gap: .25
1573 - }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlFormLabel, { ...props }, children), /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlAdornments, null));
1574 - };
1575 -
1576 -//#endregion
1577 -//#region packages/packages/core/editor-components/src/components/errors.ts
1578 - var OverrideControlInnerElementNotFoundError = (0, _elementor_utils.createError)({
1579 - code: "override_control_inner_element_not_found",
1580 - message: `Component inner element not found for override control. The element may have been deleted without updating the overridable props, or the component has not finished rendering yet.`
1581 - });
1582 - var OverrideControlPropTypeNotFoundError = (0, _elementor_utils.createError)({
1583 - code: "override_control_prop_type_not_found",
1584 - message: "Prop type not found for override control."
1585 - });
1586 -
1587 -//#endregion
1588 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/correct-exposed-empty-override.ts
1589 - function correctExposedEmptyOverride(newPropValue, matchingOverride) {
1590 - const newOverridableValue = componentOverridablePropTypeUtil.extract(newPropValue);
1591 - if (!(newOverridableValue && matchingOverride === null)) return newPropValue;
1592 - return componentOverridablePropTypeUtil.create({
1593 - override_key: newOverridableValue.override_key,
1594 - origin_value: null
1595 - });
1596 - }
1597 -
1598 -//#endregion
1599 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/resolve-element-settings.ts
1600 - function applyOverridesToSettings(elementSettings, overrides) {
1601 - const result = {};
1602 - for (const [propKey, propValue] of Object.entries(elementSettings)) {
1603 - const overridable = componentOverridablePropTypeUtil.extract(propValue);
1604 - if (!overridable) {
1605 - result[propKey] = propValue;
1606 - continue;
1607 - }
1608 - const override = overrides[overridable.override_key];
1609 - if (!override) {
1610 - result[propKey] = propValue;
1611 - continue;
1612 - }
1613 - if (override.outermostKey && override.outermostKey !== overridable.override_key) {
1614 - const originValue = overridable.origin_value;
1615 - result[propKey] = componentOverridablePropTypeUtil.create({
1616 - override_key: override.outermostKey,
1617 - origin_value: override.value ?? originValue
1618 - });
1619 - } else result[propKey] = override.value ?? propValue;
1620 - }
1621 - return result;
1622 - }
1623 - function unwrapOverridableSettings(elementSettings) {
1624 - const result = {};
1625 - for (const [propKey, propValue] of Object.entries(elementSettings)) {
1626 - const overridable = componentOverridablePropTypeUtil.extract(propValue);
1627 - if (!overridable) {
1628 - result[propKey] = propValue;
1629 - continue;
1630 - }
1631 - result[propKey] = overridable.origin_value;
1632 - }
1633 - return result;
1634 - }
1635 -
1636 -//#endregion
1637 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-override-dependencies.ts
1638 - function useOverrideControlDependencies({ existingOverride, resolvedElementSettings, elementId, elementType, propKey }) {
1639 - return (0, react.useMemo)(() => {
1640 - const { isDisabled, isHidden } = (0, _elementor_editor_editing_panel.extractDependencyEffect)(propKey, elementType.propsSchema, resolvedElementSettings);
1641 - const existingOverrideValue = existingOverride ? resolveOverridePropValue(existingOverride) : null;
1642 - const settingsForDepsNewValuesCalculation = {
1643 - ...resolvedElementSettings,
1644 - [propKey]: existingOverrideValue
1645 - };
1646 - const resolvedSettingsWithDefaults = (0, _elementor_editor_editing_panel.getElementSettingsWithDefaults)(elementType.propsSchema, settingsForDepsNewValuesCalculation);
1647 - const dependents = (0, _elementor_editor_editing_panel.extractOrderedDependencies)(elementType.dependenciesPerTargetMapping ?? {});
1648 - return {
1649 - overrideValue: (0, _elementor_editor_editing_panel.getUpdatedValues)({ [propKey]: existingOverrideValue }, dependents, elementType.propsSchema, resolvedSettingsWithDefaults, elementId)[propKey],
1650 - isDisabled,
1651 - isHidden
1652 - };
1653 - }, [
1654 - existingOverride,
1655 - resolvedElementSettings,
1656 - propKey,
1657 - elementType.propsSchema,
1658 - elementType.dependenciesPerTargetMapping,
1659 - elementId
1660 - ]);
1661 - }
1662 -
1663 -//#endregion
1664 -//#region packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts
1665 - function getContainerByOriginId(originElementId, instanceElementId) {
1666 - if (!instanceElementId) return (0, _elementor_editor_elements.getContainer)(originElementId);
1667 - const instanceContainer = (0, _elementor_editor_elements.getContainer)(instanceElementId);
1668 - if (!instanceContainer) return null;
1669 - return window.elementor?.getContainerByKeyValue?.({
1670 - key: "originId",
1671 - value: originElementId,
1672 - parent: instanceContainer.view
1673 - }) ?? null;
1674 - }
1675 -
1676 -//#endregion
1677 -//#region packages/packages/core/editor-components/src/utils/get-overridable-prop.ts
1678 - function getOverridableProp({ componentId, overrideKey }) {
1679 - const overridableProps = selectOverridableProps((0, _elementor_store.__getState)(), componentId);
1680 - if (!overridableProps) return;
1681 - return overridableProps.props[overrideKey];
1682 - }
1683 -
1684 -//#endregion
1685 -//#region packages/packages/core/editor-components/src/utils/resolve-overrides-chain.ts
1686 - function resolveOverridesChain({ outerOverridableProp, outerInstanceId, overridesMapping = {} }) {
1687 - if (!outerOverridableProp.originPropFields) {
1688 - const innerElement = getContainerByOriginId(outerOverridableProp.elementId, outerInstanceId);
1689 - if (!innerElement) throw new Error(`Inner element not found inside instance. elementId: ${outerOverridableProp.elementId}, instanceId: ${outerInstanceId}`);
1690 - return {
1691 - isChainBroken: false,
1692 - innerElement,
1693 - overridesMapping
1694 - };
1695 - }
1696 - const currentInstance = getContainerByOriginId(outerOverridableProp.elementId, outerInstanceId);
1697 - if (!currentInstance) return { isChainBroken: true };
1698 - const { componentId, overrides } = extractComponentInstanceSettings(currentInstance);
1699 - if (!componentId) throw new Error(`Component ID not found for current instance. currentInstanceId: ${currentInstance.id}. outerInstanceId: ${outerInstanceId}`);
1700 - const mergedOverrides = buildOverridesMap(overridesMapping, overrides ?? []);
1701 - const override = findOverrideByOuterKey(overrides, outerOverridableProp.overrideKey);
1702 - const overrideKey = componentInstanceOverridePropTypeUtil.extract(override)?.override_key;
1703 - if (!override || !overrideKey) return { isChainBroken: true };
1704 - const overridableProp = getOverridableProp({
1705 - componentId,
1706 - overrideKey
1707 - });
1708 - if (!overridableProp) throw new Error(`Overridable prop not found. componentId: ${componentId}, overrideKey: ${overrideKey}`);
1709 - return resolveOverridesChain({
1710 - outerOverridableProp: overridableProp,
1711 - outerInstanceId: currentInstance.id,
1712 - overridesMapping: mergedOverrides
1713 - });
1714 - }
1715 - function buildOverridesMap(existing, levelOverrides) {
1716 - const result = { ...existing };
1717 - for (const item of levelOverrides) {
1718 - const overridableValue = componentOverridablePropTypeUtil.extract(item);
1719 - if (overridableValue) {
1720 - const override = componentInstanceOverridePropTypeUtil.extract(overridableValue.origin_value);
1721 - if (!override) continue;
1722 - const outerKey = overridableValue.override_key;
1723 - const innerKey = override.override_key;
1724 - const innerValue = override.override_value;
1725 - const higherLevelOverride = existing[outerKey];
1726 - if (higherLevelOverride) {
1727 - result[innerKey] = {
1728 - value: higherLevelOverride.value ?? innerValue,
1729 - outermostKey: higherLevelOverride.outermostKey ?? outerKey
1730 - };
1731 - continue;
1732 - }
1733 - result[innerKey] = {
1734 - value: innerValue,
1735 - outermostKey: outerKey
1736 - };
1737 - } else {
1738 - const override = componentInstanceOverridePropTypeUtil.extract(item);
1739 - if (!override) continue;
1740 - const key = override.override_key;
1741 - result[key] = { value: override.override_value };
1742 - }
1743 - }
1744 - return result;
1745 - }
1746 - function extractComponentInstanceSettings(element) {
1747 - const instanceSetting = element.settings?.get("component_instance");
1748 - const instanceValue = componentInstancePropTypeUtil.extract(instanceSetting);
1749 - return {
1750 - componentId: instanceValue?.component_id?.value,
1751 - overrides: componentInstanceOverridesPropTypeUtil.extract(instanceValue?.overrides)
1752 - };
1753 - }
1754 - function findOverrideByOuterKey(overrides, outerKey) {
1755 - if (!overrides) return null;
1756 - const overridableOverride = overrides.find((item) => {
1757 - const overridableValue = componentOverridablePropTypeUtil.extract(item);
1758 - if (!overridableValue) return false;
1759 - return overridableValue.override_key === outerKey;
1760 - });
1761 - const override = componentOverridablePropTypeUtil.extract(overridableOverride)?.origin_value;
1762 - if (!override || !componentInstanceOverridePropTypeUtil.isValid(override)) return null;
1763 - return override;
1764 - }
1765 -
1766 -//#endregion
1767 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/utils/use-resolved-inner-element.ts
1768 - function useResolvedInnerElement(overridableProp) {
1769 - const componentInstanceElement = (0, _elementor_editor_editing_panel.useElement)();
1770 - const componentId = useComponentId();
1771 - const overrides = useComponentInstanceOverrides();
1772 - const { elementId: originElementId, widgetType, elType } = overridableProp.originPropFields ?? overridableProp;
1773 - const type = elType === "widget" ? widgetType : elType;
1774 - const elementType = (0, _elementor_editor_elements.getElementType)(type);
1775 - if (!elementType) throw new Error(`Element type not found for ${type}`);
1776 - const { elementId, overridesMapping } = (0, react.useMemo)(() => {
1777 - const overridesChainResult = resolveOverridesChain({
1778 - outerOverridableProp: overridableProp,
1779 - outerInstanceId: componentInstanceElement.element.id
1780 - });
1781 - if (overridesChainResult.isChainBroken) throw new OverrideControlInnerElementNotFoundError({ context: {
1782 - componentId,
1783 - elementId: originElementId
1784 - } });
1785 - return {
1786 - elementId: overridesChainResult.innerElement.id,
1787 - overridesMapping: overridesChainResult.overridesMapping
1788 - };
1789 - }, [
1790 - overridableProp,
1791 - componentInstanceElement.element.id,
1792 - componentId,
1793 - originElementId
1794 - ]);
1795 - const settingsWithInnerOverrides = (0, react.useMemo)(() => {
1796 - return applyOverridesToSettings((0, _elementor_editor_elements.getElementSettings)(elementId, Object.keys(elementType?.propsSchema ?? {})), overridesMapping);
1797 - }, [
1798 - elementId,
1799 - elementType?.propsSchema,
1800 - overridesMapping
1801 - ]);
1802 - return {
1803 - elementId,
1804 - elementType,
1805 - resolvedOriginValues: settingsWithInnerOverrides,
1806 - resolvedElementSettings: (0, react.useMemo)(() => {
1807 - return unwrapOverridableSettings(applyOverridesToSettings(settingsWithInnerOverrides, formatOverridesToApply(overrides)));
1808 - }, [settingsWithInnerOverrides, overrides])
1809 - };
1810 - }
1811 - function formatOverridesToApply(overrides) {
1812 - if (!overrides) return {};
1813 - const result = {};
1814 - for (const item of overrides) {
1815 - const overridable = componentOverridablePropTypeUtil.extract(item);
1816 - let override = item;
1817 - if (overridable) override = overridable.origin_value;
1818 - const extractedOverride = componentInstanceOverridePropTypeUtil.extract(override);
1819 - if (!extractedOverride) continue;
1820 - result[extractedOverride.override_key] = { value: extractedOverride.override_value };
1821 - }
1822 - return result;
1823 - }
1824 -
1825 -//#endregion
1826 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx
1827 - function OverridePropControl({ overrideKey }) {
1828 - const overridableProp = useComponentOverridableProps().props[overrideKey];
1829 - if (!overridableProp) return null;
1830 - return /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.SettingsField, {
1831 - bind: "component_instance",
1832 - propDisplayName: overridableProp.label
1833 - }, /* @__PURE__ */ react.createElement(OverrideControl, { overridableProp }));
1834 - }
1835 - function OverrideControl({ overridableProp }) {
1836 - const componentInstanceElement = (0, _elementor_editor_editing_panel.useElement)();
1837 - const { value: instanceValue, setValue: setInstanceValue } = (0, _elementor_editor_controls.useBoundProp)(componentInstancePropTypeUtil);
1838 - const wrappingComponentId = useCurrentComponentId();
1839 - const componentId = useComponentId();
1840 - const overridableProps = useComponentOverridableProps();
1841 - const overrides = useComponentInstanceOverrides();
1842 - const controls = useControlsByWidgetType(overridableProp.originPropFields?.widgetType ?? overridableProp.widgetType);
1843 - const controlReplacements = (0, _elementor_editor_controls.getControlReplacements)();
1844 - const matchingOverride = getMatchingOverride(overrides, overridableProp.overrideKey);
1845 - const { propKey } = overridableProp.originPropFields ?? overridableProp;
1846 - const propType = getPropTypeForComponentOverride(overridableProp);
1847 - if (!propType) throw new OverrideControlPropTypeNotFoundError({ context: { overridableProp } });
1848 - const { elementId, elementType, resolvedElementSettings, resolvedOriginValues } = useResolvedInnerElement(overridableProp);
1849 - const { overrideValue, isDisabled, isHidden } = useOverrideControlDependencies({
1850 - existingOverride: matchingOverride,
1851 - resolvedElementSettings,
1852 - elementType,
1853 - elementId,
1854 - propKey
1855 - });
1856 - if (isHidden) return null;
1857 - const { propValue, baseValue: resolvedBaseValue } = resolveOverrideValues(overrideValue, resolvedOriginValues, propKey);
1858 - const value = { [overridableProp.overrideKey]: propValue };
1859 - const baseValue = { [overridableProp.overrideKey]: resolvedBaseValue };
1860 - const { control, controlProps, layout } = getControlParams(controls, overridableProp.originPropFields ?? overridableProp, overridableProp.label);
1861 - const propTypeSchema = (0, _elementor_editor_editing_panel.createTopLevelObjectType)({ schema: { [overridableProp.overrideKey]: propType } });
1862 - const setValue = (newValue, options, meta) => {
1863 - let newPropValue = getTempNewValueForDynamicProp(propType, propValue, newValue[overridableProp.overrideKey]);
1864 - newPropValue = correctExposedEmptyOverride(newPropValue, matchingOverride);
1865 - const newOverrideValue = createOverrideValue({
1866 - matchingOverride,
1867 - overrideKey: overridableProp.overrideKey,
1868 - overrideValue: newPropValue,
1869 - componentId
1870 - });
1871 - let newOverrides = (overrides ?? []).filter((override) => isValidOverride(overridableProps, override)).map((override) => override === matchingOverride ? newOverrideValue : override);
1872 - if (!matchingOverride) newOverrides = [...newOverrides, newOverrideValue];
1873 - setInstanceValue({
1874 - ...instanceValue,
1875 - overrides: componentInstanceOverridesPropTypeUtil.create(newOverrides)
1876 - }, options, meta);
1877 - const overridableValue = componentOverridablePropTypeUtil.extract(newOverrideValue);
1878 - if (overridableValue && wrappingComponentId) {
1879 - if (overridableProp.originPropFields) {
1880 - updateOverridableProp(wrappingComponentId, overridableValue, overridableProp.originPropFields);
1881 - return;
1882 - }
1883 - const originPropFields = {
1884 - elType: overridableProp.elType,
1885 - widgetType: overridableProp.widgetType,
1886 - propKey: overridableProp.propKey,
1887 - elementId: overridableProp.elementId
1888 - };
1889 - updateOverridableProp(wrappingComponentId, overridableValue, originPropFields);
1890 - }
1891 - };
1892 - return /* @__PURE__ */ react.createElement(OverridablePropProvider, {
1893 - value: componentOverridablePropTypeUtil.extract(matchingOverride) ?? void 0,
1894 - componentInstanceElement
1895 - }, /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.ElementProvider, {
1896 - element: {
1897 - id: elementId,
1898 - type: elementType.key
1899 - },
1900 - elementType,
1901 - settings: resolvedElementSettings
1902 - }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.PropProvider, {
1903 - propType: propTypeSchema,
1904 - value,
1905 - setValue,
1906 - baseValue,
1907 - isDisabled
1908 - }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.PropKeyProvider, { bind: overridableProp.overrideKey }, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlReplacementsProvider, { replacements: controlReplacements }, /* @__PURE__ */ react.createElement(_elementor_ui.Box, { mb: 1.5 }, /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.ControlTypeContainer, { layout }, layout !== "custom" && /* @__PURE__ */ react.createElement(ControlLabel, null, overridableProp.label), /* @__PURE__ */ react.createElement(OriginalControl, {
1909 - control,
1910 - controlProps
1911 - }))))))));
1912 - }
1913 - function resolveOverrideValues(overrideValue, resolvedOriginValues, propKey) {
1914 - const inheritedValue = unwrapOverridableSettings(resolvedOriginValues)[propKey] ?? null;
1915 - const isInheritedDynamic = (0, _elementor_editor_editing_panel.isDynamicPropValue)(inheritedValue);
1916 - return {
1917 - propValue: isInheritedDynamic && !overrideValue ? inheritedValue : overrideValue,
1918 - baseValue: overrideValue || isInheritedDynamic ? null : inheritedValue
1919 - };
1920 - }
1921 - function getTempNewValueForDynamicProp(propType, propValue, newPropValue) {
1922 - if (newPropValue === null && (0, _elementor_editor_editing_panel.isDynamicPropValue)(propValue)) return propType.default ?? null;
1923 - return newPropValue;
1924 - }
1925 - function createOverrideValue({ matchingOverride, overrideKey, overrideValue, componentId }) {
1926 - const overridableValue = componentOverridablePropTypeUtil.extract(matchingOverride);
1927 - const anyOverridable = componentOverridablePropTypeUtil.extract(overrideValue) ?? overridableValue;
1928 - if (anyOverridable) {
1929 - const innerOverride = componentInstanceOverridePropTypeUtil.create({
1930 - override_key: overrideKey,
1931 - override_value: resolveOverridePropValue(overrideValue),
1932 - schema_source: {
1933 - type: "component",
1934 - id: componentId
1935 - }
1936 - });
1937 - return componentOverridablePropTypeUtil.create({
1938 - override_key: anyOverridable.override_key,
1939 - origin_value: innerOverride
1940 - });
1941 - }
1942 - return componentInstanceOverridePropTypeUtil.create({
1943 - override_key: overrideKey,
1944 - override_value: overrideValue,
1945 - schema_source: {
1946 - type: "component",
1947 - id: componentId
1948 - }
1949 - });
1950 - }
1951 - function getControlParams(controls, originPropFields, label) {
1952 - const control = controls[originPropFields.propKey];
1953 - const { value } = control;
1954 - const layout = getControlLayout(control);
1955 - const controlProps = populateChildControlProps(value.props);
1956 - if (layout === "custom") controlProps.label = label ?? value.label;
1957 - return {
1958 - control,
1959 - controlProps,
1960 - layout
1961 - };
1962 - }
1963 - function OriginalControl({ control, controlProps }) {
1964 - const { value } = control;
1965 - return /* @__PURE__ */ react.createElement(_elementor_editor_editing_panel.BaseControl, {
1966 - type: value.type,
1967 - props: controlProps
1968 - });
1969 - }
1970 - function getControlLayout(control) {
1971 - return control.value.meta?.layout || _elementor_editor_editing_panel.controlsRegistry.getLayout(control.value.type);
1972 - }
1973 - function populateChildControlProps(props) {
1974 - if (props.childControlType) {
1975 - const childComponent = _elementor_editor_editing_panel.controlsRegistry.get(props.childControlType);
1976 - const childPropType = _elementor_editor_editing_panel.controlsRegistry.getPropTypeUtil(props.childControlType);
1977 - props = {
1978 - ...props,
1979 - childControlConfig: {
1980 - component: childComponent,
1981 - props: props.childControlProps || {},
1982 - propTypeUtil: childPropType
1983 - }
1984 - };
1985 - }
1986 - return props;
1987 - }
1988 - function isValidOverride(overridableProps, override) {
1989 - const overridableKey = componentOverridablePropTypeUtil.isValid(override) ? override.value.origin_value?.value.override_key : override.value.override_key;
1990 - return !!overridableProps.props[overridableKey];
1991 - }
1992 -
1993 -//#endregion
1994 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx
1995 - function OverridePropsGroup({ group }) {
1996 - const [isOpen, setIsOpen] = (0, _elementor_editor_editing_panel.useStateByElement)(group.id, true);
1997 - const handleClick = () => {
1998 - setIsOpen(!isOpen);
1999 - };
2000 - const id = (0, react.useId)();
2001 - const labelId = `label-${id}`;
2002 - const contentId = `content-${id}`;
2003 - const title = group.label;
2004 - return /* @__PURE__ */ react.createElement(_elementor_ui.Box, { "aria-label": `${title} section` }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemButton, {
2005 - id: labelId,
2006 - "aria-controls": contentId,
2007 - "aria-label": `${title} section`,
2008 - onClick: handleClick,
2009 - p: 0,
2010 - sx: { "&:hover": { backgroundColor: "transparent" } }
2011 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2012 - direction: "row",
2013 - alignItems: "center",
2014 - justifyItems: "start",
2015 - flexGrow: 1,
2016 - gap: .5
2017 - }, /* @__PURE__ */ react.createElement(_elementor_ui.ListItemText, {
2018 - secondary: title,
2019 - secondaryTypographyProps: {
2020 - color: "text.primary",
2021 - variant: "caption",
2022 - fontWeight: "bold"
2023 - },
2024 - sx: {
2025 - flexGrow: 0,
2026 - flexShrink: 1,
2027 - marginInlineEnd: 1
2028 - }
2029 - })), /* @__PURE__ */ react.createElement(_elementor_editor_ui.CollapseIcon, {
2030 - open: isOpen,
2031 - color: "secondary",
2032 - fontSize: "tiny"
2033 - })), /* @__PURE__ */ react.createElement(_elementor_ui.Collapse, {
2034 - id: contentId,
2035 - "aria-labelledby": labelId,
2036 - in: isOpen,
2037 - timeout: "auto"
2038 - }, /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2039 - direction: "column",
2040 - gap: 1,
2041 - p: 2
2042 - }, group.props.map((overrideKey) => /* @__PURE__ */ react.createElement(OverridePropControl, {
2043 - key: overrideKey,
2044 - overrideKey
2045 - })))));
2046 - }
2047 -
2048 -//#endregion
2049 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx
2050 - function InstancePanelBody({ groups, isEmpty, emptyState, componentInstanceId }) {
2051 - return /* @__PURE__ */ react.createElement(_elementor_editor_panels.PanelBody, null, /* @__PURE__ */ react.createElement(_elementor_editor_controls.ControlAdornmentsProvider, { items: (0, _elementor_editor_editing_panel.getFieldIndicators)("settings") }, isEmpty ? emptyState : /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2052 - direction: "column",
2053 - alignItems: "stretch"
2054 - }, groups.map((group) => /* @__PURE__ */ react.createElement(react.Fragment, { key: group.id + componentInstanceId }, /* @__PURE__ */ react.createElement(OverridePropsGroup, { group }), /* @__PURE__ */ react.createElement(_elementor_ui.Divider, null))))));
2055 - }
2056 -
2057 -//#endregion
2058 -//#region packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts
2059 - function filterValidOverridableProps(overridableProps, instanceElementId) {
2060 - const validProps = {};
2061 - for (const [key, prop] of Object.entries(overridableProps.props)) if (isExposedPropValid(prop, instanceElementId)) validProps[key] = prop;
2062 - const validPropKeys = new Set(Object.keys(validProps));
2063 - return {
2064 - props: validProps,
2065 - groups: {
2066 - items: Object.fromEntries(Object.entries(overridableProps.groups.items).map(([groupId, group]) => [groupId, {
2067 - ...group,
2068 - props: group.props.filter((propKey) => validPropKeys.has(propKey))
2069 - }])),
2070 - order: overridableProps.groups.order
2071 - }
2072 - };
2073 - }
2074 - function isExposedPropValid(prop, instanceElementId) {
2075 - const { isChainBroken } = resolveOverridesChain({
2076 - outerOverridableProp: prop,
2077 - outerInstanceId: instanceElementId
2078 - });
2079 - return !isChainBroken;
2080 - }
2081 -
2082 -//#endregion
2083 -//#region packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts
2084 - function useSanitizeOverridableProps(componentId, instanceElementId) {
2085 - const overridableProps = useOverridableProps(componentId);
2086 - const isSanitized = useIsSanitizedComponent(componentId, "overridableProps");
2087 - if (!overridableProps || !componentId) return;
2088 - if (isSanitized) return overridableProps;
2089 - return filterValidOverridableProps(overridableProps, instanceElementId);
2090 - }
2091 -
2092 -//#endregion
2093 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts
2094 - function useInstancePanelData() {
2095 - const { element, settings } = useComponentInstanceSettings();
2096 - const componentId = settings?.component_id?.value;
2097 - const overrides = settings?.overrides?.value;
2098 - const component = useComponent(componentId ?? null);
2099 - const componentInstanceId = element?.id;
2100 - const overridableProps = useSanitizeOverridableProps(componentId ?? null, componentInstanceId);
2101 - if (!componentId || !overridableProps || !component || !componentInstanceId) return null;
2102 - const isNonEmptyGroup = (group) => group !== null && group.props.length > 0;
2103 - const groups = overridableProps.groups.order.map((groupId) => overridableProps.groups.items[groupId] ?? null).filter(isNonEmptyGroup);
2104 - return {
2105 - componentId,
2106 - component,
2107 - overrides,
2108 - overridableProps,
2109 - groups,
2110 - isEmpty: groups.length === 0 || Object.keys(overridableProps.props).length === 0,
2111 - componentInstanceId
2112 - };
2113 - }
2114 - function useComponentInstanceSettings() {
2115 - const { element, settings } = (0, _elementor_editor_editing_panel.useElement)();
2116 - return {
2117 - element,
2118 - settings: componentInstancePropTypeUtil.extract(settings.component_instance)
2119 - };
2120 - }
2121 -
2122 -//#endregion
2123 -//#region packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx
2124 - var EDIT_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-footer/";
2125 - function InstanceEditingPanel() {
2126 - const { canEdit } = useComponentsPermissions();
2127 - const data = useInstancePanelData();
2128 - if (!data) return null;
2129 - const { componentId, component, overrides, overridableProps, groups, isEmpty, componentInstanceId } = data;
2130 - const panelTitle = (0, _wordpress_i18n.__)("Edit %s", "elementor").replace("%s", component.name);
2131 - const actions = /* @__PURE__ */ react.createElement(_elementor_ui.Stack, {
2132 - direction: "row",
2133 - gap: .5
2134 - }, /* @__PURE__ */ react.createElement(DetachAction, {
2135 - componentInstanceId,
2136 - componentId
2137 - }), canEdit && /* @__PURE__ */ react.createElement(EditComponentAction, {
2138 - disabled: true,
2139 - label: panelTitle,
2140 - icon: _elementor_icons.PencilIcon
2141 - }));
2142 - return /* @__PURE__ */ react.createElement(_elementor_ui.Box, {
2143 - "data-testid": "instance-editing-panel",
2144 - sx: {
2145 - display: "flex",
2146 - flexDirection: "column",
2147 - height: "100%"
2148 - }
2149 - }, /* @__PURE__ */ react.createElement(ComponentInstanceProvider, {
2150 - componentId,
2151 - overrides,
2152 - overridableProps
2153 - }, /* @__PURE__ */ react.createElement(InstancePanelHeader, {
2154 - componentName: component.name,
2155 - actions
2156 - }), /* @__PURE__ */ react.createElement(InstancePanelBody, {
2157 - groups,
2158 - isEmpty,
2159 - emptyState: /* @__PURE__ */ react.createElement(EmptyState, null),
2160 - componentInstanceId
2161 - })), !isProComponentsSupported() && (isProOutdatedForComponents() ? /* @__PURE__ */ react.createElement(ComponentsUpdateAlert, {
2162 - title: (0, _wordpress_i18n.__)("Edit Component", "elementor"),
2163 - description: (0, _wordpress_i18n.__)("To edit components, update Elementor Pro to the latest version.", "elementor")
2164 - }) : /* @__PURE__ */ react.createElement(ComponentsUpgradeAlert, {
2165 - title: (0, _wordpress_i18n.__)("Edit components", "elementor"),
2166 - description: (0, _wordpress_i18n.__)("Editing components requires an active Pro subscription.", "elementor"),
2167 - upgradeUrl: EDIT_UPGRADE_URL
2168 - })));
2169 - }
2170 -
2171 -//#endregion
2172 -//#region packages/packages/core/editor-components/src/utils/get-component-documents.ts
2173 - async function getComponentDocuments({ elements, cache = /* @__PURE__ */ new Map(), isRecursive = true }) {
2174 - return getDocumentsMap(await getComponentIds(elements, cache, isRecursive), cache);
2175 - }
2176 - async function getComponentIds(elements, cache, isRecursive) {
2177 - const results = await Promise.all(elements.filter(Boolean).map(async ({ widgetType, elType, elements: childElements, settings }) => {
2178 - const ids = [];
2179 - if (isComponentInstance({
2180 - widgetType,
2181 - elType
2182 - })) {
2183 - const componentId = settings?.component_instance?.value?.component_id.value;
2184 - if (!componentId) return ids;
2185 - ids.push(componentId);
2186 - if (!cache.has(componentId)) cache.set(componentId, getComponentDocumentData(componentId));
2187 - if (isRecursive) childElements = (await cache.get(componentId))?.elements;
2188 - }
2189 - if (childElements?.length) {
2190 - const childIds = await getComponentIds(childElements, cache, isRecursive);
2191 - ids.push(...childIds);
2192 - }
2193 - return ids;
2194 - }));
2195 - return [...new Set(results.flat())];
2196 - }
2197 - async function getDocumentsMap(ids, cache) {
2198 - const documents = await Promise.all(ids.map(async (id) => {
2199 - const document = await cache.get(id);
2200 - if (!document) return null;
2201 - return [id, document];
2202 - }));
2203 - return new Map(documents.filter((document) => document !== null));
2204 - }
2205 -
2206 -//#endregion
2207 -//#region packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts
2208 - async function loadComponentsOverridableProps(componentIds, { force = false } = {}) {
2209 - const idsToLoad = force ? componentIds : componentIds.filter((id) => !selectIsOverridablePropsLoaded((0, _elementor_store.__getState)(), id));
2210 - if (!idsToLoad.length) return;
2211 - const { data } = await apiClient.getOverridableProps(idsToLoad);
2212 - (0, _elementor_store.__dispatch)(slice.actions.loadOverridableProps(data));
2213 - }
2214 -
2215 -//#endregion
2216 -//#region packages/packages/core/editor-components/src/store/actions/load-components-assets.ts
2217 - async function loadComponentsAssets(elements) {
2218 - if (!elements.length) return;
2219 - const documents = await getComponentDocuments({
2220 - elements,
2221 - isRecursive: false
2222 - });
2223 - updateDocumentState(documents);
2224 - documents.forEach((document, id) => {
2225 - _elementor_editor_embedded_documents_manager.embeddedDocumentsManager.setDocument(id, document);
2226 - });
2227 - await loadComponentsOverridableProps([...documents.keys()]);
2228 - }
2229 - function updateDocumentState(documents) {
2230 - if ([...documents.values()].some(_elementor_editor_documents.isDocumentDirty)) (0, _elementor_editor_documents.setDocumentModifiedStatus)(true);
2231 - }
2232 -
2233 -//#endregion
2234 -//#region packages/packages/core/editor-components/src/components/load-template-components.tsx
2235 - var LoadTemplateComponents = () => {
2236 - if ((0, _elementor_editor_templates.isHandlingTemplateStyles)()) return /* @__PURE__ */ react.createElement(LoadTemplateComponentsInternal, null);
2237 - return null;
2238 - };
2239 - function LoadTemplateComponentsInternal() {
2240 - const templates = (0, _elementor_editor_templates.useLoadedTemplates)();
2241 - (0, react.useEffect)(() => {
2242 - loadComponentsAssets(templates.flatMap((elements) => elements ?? []));
2243 - }, [templates]);
2244 - return null;
2245 - }
2246 -
2247 -//#endregion
2248 -//#region packages/packages/core/editor-components/src/utils/format-component-elements-id.ts
2249 - var ELEMENT_ID_LENGTH$1 = 7;
2250 - function formatComponentElementsId(elements, path) {
2251 - return elements.map((element) => {
2252 - const nestingPath = [...path, element.id];
2253 - const id = (0, _elementor_utils.hashString)(nestingPath.join("_"), ELEMENT_ID_LENGTH$1);
2254 - return {
2255 - ...element,
2256 - id,
2257 - originId: element.id,
2258 - elements: element.elements ? formatComponentElementsId(element.elements, nestingPath) : void 0
2259 - };
2260 - });
2261 - }
2262 -
2263 -//#endregion
2264 -//#region packages/packages/core/editor-components/src/utils/reconcile-component-instance-elements.ts
2265 - var ELEMENT_ID_LENGTH = 7;
2266 - function overridesRecordToMapping(overrides) {
2267 - const mapping = {};
2268 - for (const [key, value] of Object.entries(overrides)) mapping[key] = { value };
2269 - return mapping;
2270 - }
2271 - function getElementConfig(element) {
2272 - const type = element.elType === "widget" ? element.widgetType : element.elType;
2273 - if (!type) return;
2274 - return (0, _elementor_editor_elements.getWidgetsCache)()?.[type];
2275 - }
2276 - function deriveIds(element, seed) {
2277 - const id = (0, _elementor_utils.hashString)(seed, ELEMENT_ID_LENGTH);
2278 - return {
2279 - ...element,
2280 - id,
2281 - elements: (element.elements ?? []).map((child, index) => deriveIds(child, `${id}_${index}`))
2282 - };
2283 - }
2284 - function reconcileElementTree(element, overridesMapping) {
2285 - const elementConfig = getElementConfig(element);
2286 - const effectiveSettings = unwrapOverridableSettings(applyOverridesToSettings(element.settings ?? {}, overridesMapping));
2287 - const originalChildren = element.elements ?? [];
2288 - const originalChildIds = new Set(originalChildren.map((child) => child.id));
2289 - const attributes = {
2290 - elements: [...originalChildren],
2291 - settings: effectiveSettings
2292 - };
2293 - if (elementConfig?.children_dependencies?.length) (0, _elementor_editor_elements.reconcileInitialChildren)({
2294 - elementId: element.id,
2295 - elementConfig,
2296 - attributes
2297 - });
2298 - const reconciledChildren = (attributes.elements ?? []).map((child) => originalChildIds.has(child.id) ? child : deriveIds(child, `${element.id}_${child.elType}`)).map((child) => reconcileElementTree(child, overridesMapping));
2299 - return {
2300 - ...element,
2301 - elements: reconciledChildren
2302 - };
2303 - }
2304 - function reconcileComponentInstanceElements(elements, overrides = {}) {
2305 - const overridesMapping = overridesRecordToMapping(overrides);
2306 - return elements.map((element) => reconcileElementTree(element, overridesMapping));
2307 - }
2308 -
2309 -//#endregion
2310 -//#region packages/packages/core/editor-components/src/utils/switch-to-component.ts
2311 - async function switchToComponent(componentId, componentInstanceId, element) {
2312 - const selector = getSelector(element, componentInstanceId);
2313 - (0, _elementor_editor_documents.invalidateDocumentData)(componentId);
2314 - await (0, _elementor_editor_documents.switchToDocument)(componentId, {
2315 - selector,
2316 - mode: "autosave",
2317 - setAsInitial: false,
2318 - shouldScroll: false
2319 - });
2320 - await loadComponentsOverridableProps([componentId], { force: true });
2321 - const topLevelElement = (0, _elementor_editor_elements.getCurrentDocumentContainer)()?.children?.[0];
2322 - if (topLevelElement) {
2323 - (0, _elementor_editor_elements.selectElement)(topLevelElement.id);
2324 - expandNavigator();
2325 - }
2326 - }
2327 - async function expandNavigator() {
2328 - await (0, _elementor_editor_v1_adapters.__privateRunCommand)("navigator/expand-all");
2329 - }
2330 - function getSelector(element, componentInstanceId) {
2331 - if (element) return buildUniqueSelector(element);
2332 - if (componentInstanceId) return `[data-id="${componentInstanceId}"]`;
2333 - }
2334 - function buildUniqueSelector(element) {
2335 - const selectors = [];
2336 - let current = element.closest("[data-id]");
2337 - while (current) {
2338 - const dataId = current.dataset.id;
2339 - if (current.hasAttribute("data-elementor-id")) selectors.unshift(`[data-id="${dataId}"]`);
2340 - current = current.parentElement?.closest("[data-id]") ?? null;
2341 - }
2342 - if (selectors.length === 0) {
2343 - const closestElement = element.closest("[data-id]");
2344 - if (closestElement?.dataset?.id) return `[data-id="${closestElement.dataset.id}"]`;
2345 - }
2346 - return selectors.join(" ");
2347 - }
2348 -
2349 -//#endregion
2350 -//#region packages/packages/core/editor-components/src/create-component-type.ts
2351 - var __defProp = Object.defineProperty;
2352 - var __typeError = (msg) => {
2353 - throw TypeError(msg);
2354 - };
2355 - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, {
2356 - enumerable: true,
2357 - configurable: true,
2358 - writable: true,
2359 - value
2360 - }) : obj[key] = value;
2361 - var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
2362 - var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
2363 - var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
2364 - var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
2365 - var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
2366 - var COMPONENT_WIDGET_TYPE = "e-component";
2367 - var EDIT_COMPONENT_DB_CLICK_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-canvas-double-click/";
2368 - var EDIT_COMPONENT_CONTEXT_MENU_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-edit-context-menu/";
2369 - var UPDATE_PLUGINS_URL = "/wp-admin/plugins.php";
2370 - var COMPONENT_EDIT_UPGRADE_NOTIFICATION_ID = "component-edit-upgrade";
2371 - var COMPONENT_EDIT_UPDATE_NOTIFICATION_ID = "component-edit-update";
2372 - var COMPONENT_EDIT_UPGRADE_AUTO_HIDE_DURATION = 2e3;
2373 - function notifyComponentEditUpgrade() {
2374 - (0, _elementor_editor_notifications.notify)({
2375 - type: "promotion",
2376 - id: COMPONENT_EDIT_UPGRADE_NOTIFICATION_ID,
2377 - message: (0, _wordpress_i18n.__)("Editing components requires an active Pro subscription.", "elementor"),
2378 - autoHideDuration: COMPONENT_EDIT_UPGRADE_AUTO_HIDE_DURATION,
2379 - additionalActionProps: [{
2380 - size: "small",
2381 - variant: "contained",
2382 - color: "promotion",
2383 - href: EDIT_COMPONENT_DB_CLICK_UPGRADE_URL,
2384 - target: "_blank",
2385 - children: (0, _wordpress_i18n.__)("Upgrade Now", "elementor")
2386 - }]
2387 - });
2388 - }
2389 - function notifyComponentEditUpdate() {
2390 - (0, _elementor_editor_notifications.notify)({
2391 - type: "info",
2392 - id: COMPONENT_EDIT_UPDATE_NOTIFICATION_ID,
2393 - message: (0, _wordpress_i18n.__)("To edit components, update Elementor Pro to the latest version.", "elementor"),
2394 - additionalActionProps: [{
2395 - size: "small",
2396 - variant: "contained",
2397 - color: "info",
2398 - href: UPDATE_PLUGINS_URL,
2399 - target: "_blank",
2400 - children: (0, _wordpress_i18n.__)("Update Now", "elementor")
2401 - }]
2402 - });
2403 - }
2404 - var updateGroups = (groups, config) => {
2405 - const disableMap = new Map(Object.entries(config.disable ?? {}));
2406 - const addMap = new Map(Object.entries(config.add ?? {}));
2407 - return groups.map((group) => {
2408 - const disabledActions = disableMap.get(group.name) ?? [];
2409 - const addConfig = addMap.get(group.name);
2410 - const updatedActions = group.actions.map((action) => disabledActions.includes(action.name) ? {
2411 - ...action,
2412 - isEnabled: () => false
2413 - } : action);
2414 - if (addConfig) updatedActions.splice(addConfig.index, 0, ...addConfig.actions);
2415 - return {
2416 - ...group,
2417 - actions: updatedActions
2418 - };
2419 - });
2420 - };
2421 - function createComponentType(options) {
2422 - const WidgetType = window.elementor.modules.elements.types.Widget;
2423 - const view = createComponentView({ ...options });
2424 - return class extends WidgetType {
2425 - getType() {
2426 - return options.type;
2427 - }
2428 - getView() {
2429 - return view;
2430 - }
2431 - getModel() {
2432 - return createComponentModel();
2433 - }
2434 - };
2435 - }
2436 - function createComponentView(options) {
2437 - var _componentRenderContext;
2438 - var _a;
2439 - const legacyWindow = window;
2440 - return _a = class extends (0, _elementor_editor_canvas.createTemplatedElementView)(options) {
2441 - constructor() {
2442 - super(...arguments);
2443 - __publicField(this, "eventsManagerConfig", legacyWindow.elementorCommon.eventsManager.config);
2444 - __privateAdd(this, _componentRenderContext);
2445 - }
2446 - isComponentCurrentlyEdited() {
2447 - return (0, _elementor_editor_documents.getCurrentDocument)()?.id === this.getComponentId();
2448 - }
2449 - getRenderContext() {
2450 - const namespaceKey = this.getNamespaceKey();
2451 - const parentContext = this._parent?.getRenderContext?.();
2452 - const parentComponentContext = parentContext?.[namespaceKey];
2453 - if (!__privateGet(this, _componentRenderContext)) return parentContext;
2454 - const ownOverrides = __privateGet(this, _componentRenderContext).overrides ?? {};
2455 - const parentOverrides = parentComponentContext?.overrides ?? {};
2456 - return {
2457 - ...parentContext,
2458 - [namespaceKey]: { overrides: {
2459 - ...parentOverrides,
2460 - ...ownOverrides
2461 - } }
2462 - };
2463 - }
2464 - getResolverRenderContext() {
2465 - const namespaceKey = this.getNamespaceKey();
2466 - const ownContext = this.getRenderContext()?.[namespaceKey];
2467 - if (!ownContext) return this._parent?.getResolverRenderContext?.();
2468 - return {
2469 - ...this._parent?.getResolverRenderContext?.(),
2470 - ...ownContext
2471 - };
2472 - }
2473 - afterSettingsResolve(settings) {
2474 - const componentInstance = settings.component_instance;
2475 - if (componentInstance) {
2476 - __privateSet(this, _componentRenderContext, { overrides: componentInstance.overrides ?? {} });
2477 - const instanceId = this.model.get("id");
2478 - const formattedElements = formatComponentElementsId(reconcileComponentInstanceElements(componentInstance.elements ?? [], componentInstance.overrides ?? {}), [instanceId]);
2479 - this.collection = legacyWindow.elementor.createBackboneElementsCollection(formattedElements);
2480 - this.collection.models.forEach(setInactiveRecursively);
2481 - settings.component_instance = "<template data-children-placeholder></template>";
2482 - }
2483 - return settings;
2484 - }
2485 - getDomElement() {
2486 - return this.children.findByIndex(0)?.getDomElement() ?? this.$el;
2487 - }
2488 - attachBuffer(collectionView, buffer) {
2489 - const childrenPlaceholder = collectionView.$el.find("[data-children-placeholder]").get(0);
2490 - if (!childrenPlaceholder) {
2491 - super.attachBuffer(collectionView, buffer);
2492 - return;
2493 - }
2494 - childrenPlaceholder.replaceWith(buffer);
2495 - }
2496 - getComponentId() {
2497 - return (this.options?.model?.get("settings")?.get("component_instance")?.value).component_id.value;
2498 - }
2499 - getContextMenuGroups() {
2500 - const filteredGroups = super.getContextMenuGroups().filter((group) => group.name !== "save");
2501 - if (!this.getComponentId()) return filteredGroups;
2502 - return updateGroups(filteredGroups, this._getContextMenuConfig());
2503 - }
2504 - _getContextMenuConfig() {
2505 - const isAdministrator = isUserAdministrator();
2506 - const hasPro = (0, _elementor_utils.hasProInstalled)();
2507 - const isOutdated = isProOutdatedForComponents();
2508 - const editComponentAction = {
2509 - name: "edit component",
2510 - icon: "eicon-edit",
2511 - title: () => (0, _wordpress_i18n.__)("Edit Component", "elementor"),
2512 - ...!hasPro && !isOutdated && {
2513 - shortcut: `<a href="${EDIT_COMPONENT_CONTEXT_MENU_UPGRADE_URL}" target="_blank" onclick="event.stopPropagation()" class="elementor-context-menu-list__item__shortcut__promotion-badge"><i class="eicon-upgrade-crown"></i></a>`,
2514 - hasShortcutAction: true
2515 - },
2516 - isEnabled: () => isProComponentsSupported() || isOutdated,
2517 - callback: (_, eventData) => this.editComponent(eventData)
2518 - };
2519 - const detachInstanceAction = {
2520 - name: "detach instance",
2521 - icon: "eicon-chain-broken",
2522 - title: () => (0, _wordpress_i18n.__)("Detach from Component", "elementor"),
2523 - isEnabled: () => true,
2524 - callback: (_, eventData) => this.detachInstance(eventData)
2525 - };
2526 - return {
2527 - add: { general: {
2528 - index: 1,
2529 - actions: isAdministrator ? [editComponentAction, detachInstanceAction] : [detachInstanceAction]
2530 - } },
2531 - disable: { clipboard: ["pasteStyle", "resetStyle"] }
2532 - };
2533 - }
2534 - async switchDocument() {
2535 - const { isAllowedToSwitchDocument, lockedBy } = await apiClient.getComponentLockStatus(this.getComponentId());
2536 - if (!isAllowedToSwitchDocument) options.showLockedByModal?.(lockedBy || "");
2537 - else switchToComponent(this.getComponentId(), this.model.get("id"), this.el);
2538 - }
2539 - editComponent({ trigger, location, secondaryLocation }) {
2540 - if (isProOutdatedForComponents()) {
2541 - notifyComponentEditUpdate();
2542 - return;
2543 - }
2544 - if (!isProComponentsSupported() || this.isComponentCurrentlyEdited()) return;
2545 - this.switchDocument();
2546 - const editorSettings = this.model.get("editor_settings");
2547 - trackComponentEvent({
2548 - action: "edited",
2549 - executedBy: "user",
2550 - component_uid: editorSettings?.component_uid,
2551 - component_name: editorSettings?.title,
2552 - location,
2553 - secondary_location: secondaryLocation,
2554 - trigger
2555 - });
2556 - }
2557 - detachInstance({ trigger, location, secondaryLocation }) {
2558 - const componentId = this.getComponentId();
2559 - const instanceId = this.model.get("id");
2560 - if (!componentId || !instanceId) return;
2561 - const handleConfirm = async () => {
2562 - try {
2563 - await detachComponentInstance({
2564 - instanceId,
2565 - componentId,
2566 - trackingInfo: {
2567 - location,
2568 - secondaryLocation,
2569 - trigger
2570 - }
2571 - });
2572 - } catch {
2573 - (0, _elementor_editor_notifications.notify)({
2574 - type: "error",
2575 - message: (0, _wordpress_i18n.__)("Failed to detach component instance.", "elementor"),
2576 - id: "detach-component-instance-failed"
2577 - });
2578 - }
2579 - };
2580 - options.showDetachConfirmDialog?.(handleConfirm);
2581 - }
2582 - handleDblClick(e) {
2583 - e.stopPropagation();
2584 - if (!isUserAdministrator()) return;
2585 - if (isProOutdatedForComponents()) {
2586 - notifyComponentEditUpdate();
2587 - return;
2588 - }
2589 - if (!(0, _elementor_utils.hasProInstalled)()) {
2590 - notifyComponentEditUpgrade();
2591 - return;
2592 - }
2593 - const { triggers, locations, secondaryLocations } = this.eventsManagerConfig;
2594 - this.editComponent({
2595 - trigger: triggers.doubleClick,
2596 - location: locations.canvas,
2597 - secondaryLocation: secondaryLocations.canvasElement
2598 - });
2599 - }
2600 - events() {
2601 - return {
2602 - ...super.events(),
2603 - dblclick: this.handleDblClick
2604 - };
2605 - }
2606 - attributes() {
2607 - return {
2608 - ...super.attributes(),
2609 - "data-elementor-id": this.getComponentId()
2610 - };
2611 - }
2612 - }, _componentRenderContext = /* @__PURE__ */ new WeakMap(), _a;
2613 - }
2614 - function setInactiveRecursively(model) {
2615 - const editSettings = model.get("editSettings");
2616 - if (editSettings) editSettings.set("inactive", true);
2617 - const elements = model.get("elements");
2618 - if (elements) elements.forEach((childModel) => {
2619 - setInactiveRecursively(childModel);
2620 - });
2621 - }
2622 - function isUserAdministrator() {
2623 - return window.elementor.config?.user?.is_administrator ?? false;
2624 - }
2625 - function createComponentModel() {
2626 - const WidgetType = window.elementor.modules.elements.types.Widget;
2627 - const BaseWidgetModel = new WidgetType().getModel();
2628 - return BaseWidgetModel.extend({
2629 - initialize(attributes, options) {
2630 - BaseWidgetModel.prototype.initialize.call(this, attributes, options);
2631 - const componentInstance = this.get("settings")?.get("component_instance");
2632 - if (componentInstance?.value) {
2633 - const componentId = componentInstance.value.component_id?.value;
2634 - if (componentId && typeof componentId === "number") this.set("componentId", componentId);
2635 - }
2636 - this.set("isGlobal", true);
2637 - },
2638 - getTitle() {
2639 - const editorSettings = this.get("editor_settings");
2640 - const instanceTitle = editorSettings?.title;
2641 - if (instanceTitle) return instanceTitle;
2642 - const componentUid = editorSettings?.component_uid;
2643 - if (componentUid) {
2644 - const component = selectComponentByUid((0, _elementor_store.__getState)(), componentUid);
2645 - if (component?.name) return component.name;
2646 - }
2647 - return window.elementor.getElementData(this).title;
2648 - },
2649 - getComponentId() {
2650 - return this.get("componentId") || null;
2651 - },
2652 - getComponentName() {
2653 - return this.getTitle();
2654 - },
2655 - getComponentUid() {
2656 - return this.get("editor_settings")?.component_uid || null;
2657 - }
2658 - });
2659 - }
2660 -
2661 -//#endregion
2662 -//#region packages/packages/core/editor-components/src/populate-store.ts
2663 - function PopulateStore() {
2664 - (0, react.useEffect)(() => {
2665 - (0, _elementor_store.__dispatch)(loadComponents());
2666 - }, []);
2667 - return null;
2668 - }
2669 -
2670 -//#endregion
2671 -//#region packages/packages/core/editor-components/src/prevent-circular-nesting.ts
2672 - var COMPONENT_TYPE = "e-component";
2673 - var COMPONENT_CIRCULAR_NESTING_ALERT = {
2674 - type: "default",
2675 - message: (0, _wordpress_i18n.__)("Can't add this component - components that contain each other can't be nested.", "elementor"),
2676 - id: "circular-component-nesting-blocked"
2677 - };
2678 - function initCircularNestingPrevention() {
2679 - (0, _elementor_editor_v1_adapters.blockCommand)({
2680 - command: "document/elements/create",
2681 - condition: blockCircularCreate
2682 - });
2683 - (0, _elementor_editor_v1_adapters.blockCommand)({
2684 - command: "document/elements/move",
2685 - condition: blockCircularMove
2686 - });
2687 - (0, _elementor_editor_v1_adapters.blockCommand)({
2688 - command: "document/elements/paste",
2689 - condition: blockCircularPaste
2690 - });
2691 - }
2692 - function wouldCreateCircularNesting(componentIdToAdd) {
2693 - if (componentIdToAdd === void 0) return false;
2694 - const state = (0, _elementor_store.__getState)();
2695 - const currentComponentId = selectCurrentComponentId(state);
2696 - const path = selectPath(state);
2697 - if (currentComponentId === null) return false;
2698 - if (componentIdToAdd === currentComponentId) return true;
2699 - return path.some((item) => item.componentId === componentIdToAdd);
2700 - }
2701 - function extractComponentIdFromModel(model) {
2702 - if (!model) return null;
2703 - if (!(model.widgetType === COMPONENT_TYPE)) return null;
2704 - return model.settings?.component_instance?.value?.component_id?.value ?? null;
2705 - }
2706 - function extractComponentIdFromElement(element) {
2707 - if (element.widgetType !== COMPONENT_TYPE) return null;
2708 - return element.settings?.component_instance?.value?.component_id?.value ?? null;
2709 - }
2710 - function extractComponentIdsFromElements(elements) {
2711 - const ids = [];
2712 - for (const element of elements) {
2713 - const componentId = extractComponentIdFromElement(element);
2714 - if (componentId !== null) ids.push(componentId);
2715 - if (element.elements?.length) ids.push(...extractComponentIdsFromElements(element.elements));
2716 - }
2717 - return ids;
2718 - }
2719 - function extractComponentIdFromContainer(container) {
2720 - if (container.model?.get?.("widgetType") !== COMPONENT_TYPE) return null;
2721 - return ((container.model?.get?.("settings"))?.get?.("component_instance"))?.value?.component_id?.value ?? null;
2722 - }
2723 - function blockCircularCreate(args) {
2724 - const componentId = extractComponentIdFromModel(args.model);
2725 - if (componentId === null) return false;
2726 - const isBlocked = wouldCreateCircularNesting(componentId);
2727 - if (isBlocked) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT);
2728 - return isBlocked;
2729 - }
2730 - function blockCircularMove(args) {
2731 - const { containers = [args.container] } = args;
2732 - const hasCircularComponent = containers.some((container) => {
2733 - if (!container) return false;
2734 - return (0, _elementor_editor_elements.getAllDescendants)(container).some((element) => {
2735 - const componentId = extractComponentIdFromContainer(element);
2736 - if (componentId === null) return false;
2737 - return wouldCreateCircularNesting(componentId);
2738 - });
2739 - });
2740 - if (hasCircularComponent) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT);
2741 - return hasCircularComponent;
2742 - }
2743 - function blockCircularPaste(args) {
2744 - const { storageType } = args;
2745 - if (storageType !== "localstorage") return false;
2746 - const data = window?.elementorCommon?.storage?.get();
2747 - if (!data?.clipboard?.elements) return false;
2748 - const hasCircularComponent = extractComponentIdsFromElements(data.clipboard.elements).some(wouldCreateCircularNesting);
2749 - if (hasCircularComponent) (0, _elementor_editor_notifications.notify)(COMPONENT_CIRCULAR_NESTING_ALERT);
2750 - return hasCircularComponent;
2751 - }
2752 -
2753 -//#endregion
2754 -//#region packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts
2755 - function removeComponentStyles(id) {
2756 - apiClient.invalidateComponentConfigCache(id);
2757 - }
2758 -
2759 -//#endregion
2760 -//#region packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts
2761 - var INSUFFICIENT_PERMISSIONS_ERROR_CODE = "insufficient_permissions";
2762 - var PUBLISH_UPGRADE_URL = "https://go.elementor.com/go-pro-components-Instance-draft-failure/";
2763 - var PUBLISH_UPGRADE_NOTIFICATION_ID = "component-publish-upgrade";
2764 - async function publishDraftComponentsInPageBeforeSave({ status, elements }) {
2765 - if (status !== "publish") return;
2766 - const draftIds = [...(await getComponentDocuments({ elements })).values()].filter(_elementor_editor_documents.isDocumentDirty).map((document) => document.id);
2767 - if (draftIds.length === 0) return;
2768 - try {
2769 - await apiClient.updateStatuses(draftIds, "publish");
2770 - } catch (error) {
2771 - if (isInsufficientPermissionsError(error)) {
2772 - notifyPublishUpgrade();
2773 - return;
2774 - }
2775 - throw error;
2776 - }
2777 - draftIds.forEach((id) => (0, _elementor_editor_documents.invalidateDocumentData)(id));
2778 - }
2779 - function isInsufficientPermissionsError(error) {
2780 - return error instanceof _elementor_http_client.AxiosError && error.response?.data?.code === INSUFFICIENT_PERMISSIONS_ERROR_CODE;
2781 - }
2782 - function notifyPublishUpgrade() {
2783 - (0, _elementor_editor_notifications.notify)({
2784 - type: "promotion",
2785 - id: PUBLISH_UPGRADE_NOTIFICATION_ID,
2786 - message: (0, _wordpress_i18n.__)("You have unpublished component on this page. You need a pro version to publish it.", "elementor"),
2787 - additionalActionProps: [{
2788 - size: "small",
2789 - variant: "contained",
2790 - color: "promotion",
2791 - href: PUBLISH_UPGRADE_URL,
2792 - target: "_blank",
2793 - children: (0, _wordpress_i18n.__)("Upgrade Now", "elementor")
2794 - }]
2795 - });
2796 - }
2797 -
2798 -//#endregion
2799 -//#region packages/packages/core/editor-components/src/sync/before-save.ts
2800 - var beforeSave = ({ container, status }) => {
2801 - return publishDraftComponentsInPageBeforeSave({
2802 - elements: container?.model.get("elements").toJSON?.() ?? [],
2803 - status
2804 - });
2805 - };
2806 -
2807 -//#endregion
2808 -//#region packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts
2809 - function initLoadComponentDataAfterInstanceAdded() {
2810 - (0, _elementor_editor_v1_adapters.registerDataHook)("after", "document/elements/paste", (_args, result) => {
2811 - load(result);
2812 - });
2813 - (0, _elementor_editor_v1_adapters.registerDataHook)("after", "document/elements/import", (_args, result) => {
2814 - load(result);
2815 - });
2816 - }
2817 - function load(result) {
2818 - if (!result) return;
2819 - loadComponentsAssets((Array.isArray(result) ? result : [result]).map((container) => container.model?.toJSON()).filter((element) => !!element));
2820 - }
2821 -
2822 -//#endregion
2823 -//#region packages/packages/core/editor-components/src/init.ts
2824 - function init() {
2825 - (0, _elementor_store.__registerSlice)(slice);
2826 - (0, _elementor_editor_canvas.registerElementType)(COMPONENT_WIDGET_TYPE, (options) => createComponentType({
2827 - ...options,
2828 - showLockedByModal: openEditModeDialog,
2829 - showDetachConfirmDialog: openDetachConfirmDialog
2830 - }));
2831 - window.elementorCommon.__beforeSave = beforeSave;
2832 - (0, _elementor_editor_elements_panel.injectTab)({
2833 - id: "components",
2834 - label: (0, _wordpress_i18n.__)("Components", "elementor"),
2835 - component: Components,
2836 - position: 1
2837 - });
2838 - (0, _elementor_editor.injectIntoLogic)({
2839 - id: "components-populate-store",
2840 - component: PopulateStore
2841 - });
2842 - (0, _elementor_editor_v1_adapters.registerDataHook)("after", "editor/documents/attach-preview", () => {
2843 - const { id, config } = (0, _elementor_editor_documents.getV1CurrentDocument)() ?? {};
2844 - if (!id) return;
2845 - removeComponentStyles(id);
2846 - loadComponentsAssets(config?.elements ?? []);
2847 - });
2848 - _elementor_editor_embedded_documents_manager.embeddedDocumentsManager.onDocumentLoad((_documentId, data) => {
2849 - loadComponentsAssets(data.elements ?? []);
2850 - });
2851 - (0, _elementor_editor.injectIntoLogic)({
2852 - id: "templates",
2853 - component: LoadTemplateComponents
2854 - });
2855 - (0, _elementor_editor_editing_panel.registerEditingPanelReplacement)({
2856 - id: "component-instance-edit-panel",
2857 - condition: (_, elementType) => elementType.key === "e-component",
2858 - component: InstanceEditingPanel
2859 - });
2860 - _elementor_editor_canvas.settingsTransformersRegistry.register("component-instance", componentInstanceTransformer);
2861 - _elementor_editor_canvas.settingsTransformersRegistry.register("overridable", componentOverridableTransformer);
2862 - _elementor_editor_canvas.settingsTransformersRegistry.register("override", componentOverrideTransformer);
2863 - initCircularNestingPrevention();
2864 - initLoadComponentDataAfterInstanceAdded();
2865 - }
2866 -
2867 -//#endregion
2868 -//#region packages/packages/core/editor-components/src/index.ts
2869 - var src_exports = /* @__PURE__ */ __exportAll({
2870 - COMPONENT_WIDGET_TYPE: () => COMPONENT_WIDGET_TYPE,
2871 - ComponentInstanceProvider: () => ComponentInstanceProvider,
2872 - ComponentItem: () => ComponentItem,
2873 - ComponentName: () => ComponentName,
2874 - ComponentSearch: () => ComponentSearch,
2875 - ComponentsList: () => ComponentsList,
2876 - DetachAction: () => DetachAction,
2877 - EditComponentAction: () => EditComponentAction,
2878 - EmptySearchResult: () => EmptySearchResult,
2879 - InstanceEmptyState: () => EmptyState,
2880 - InstancePanelBody: () => InstancePanelBody,
2881 - InstancePanelHeader: () => InstancePanelHeader,
2882 - LoadingComponents: () => LoadingComponents,
2883 - OverridablePropProvider: () => OverridablePropProvider,
2884 - SLICE_NAME: () => SLICE_NAME,
2885 - SearchProvider: () => SearchProvider,
2886 - apiClient: () => apiClient,
2887 - componentInstanceOverridePropTypeUtil: () => componentInstanceOverridePropTypeUtil,
2888 - componentInstanceOverridesPropTypeUtil: () => componentInstanceOverridesPropTypeUtil,
2889 - componentInstancePropTypeUtil: () => componentInstancePropTypeUtil,
2890 - componentOverridablePropTypeUtil: () => componentOverridablePropTypeUtil,
2891 - componentsActions: () => componentsActions,
2892 - componentsSelectors: () => componentsSelectors,
2893 - createComponentsAction: () => createComponentsAction,
2894 - filterValidOverridableProps: () => filterValidOverridableProps,
2895 - getComponentDocumentData: () => getComponentDocumentData,
2896 - getContainerByOriginId: () => getContainerByOriginId,
2897 - getOverridableProp: () => getOverridableProp,
2898 - getPropTypeForComponentOverride: () => getPropTypeForComponentOverride,
2899 - init: () => init,
2900 - isComponentInstance: () => isComponentInstance,
2901 - loadComponentsAssets: () => loadComponentsAssets,
2902 - onElementDrop: () => onElementDrop,
2903 - publishDraftComponentsInPageBeforeSave: () => publishDraftComponentsInPageBeforeSave,
2904 - registerComponentsReducer: () => registerComponentsReducer,
2905 - resolveOverridePropValue: () => resolveOverridePropValue,
2906 - selectComponentByUid: () => selectComponentByUid,
2907 - selectCreatedThisSession: () => selectCreatedThisSession,
2908 - selectOverridableProps: () => selectOverridableProps,
2909 - selectPath: () => selectPath,
2910 - slice: () => slice,
2911 - switchToComponent: () => switchToComponent,
2912 - trackComponentEvent: () => trackComponentEvent,
2913 - updateOverridableProp: () => updateOverridableProp,
2914 - useComponentInstanceElement: () => useComponentInstanceElement,
2915 - useComponents: () => useComponents,
2916 - useComponentsPermissions: () => useComponentsPermissions,
2917 - useCurrentComponent: () => useCurrentComponent,
2918 - useCurrentComponentId: () => useCurrentComponentId,
2919 - useFilteredComponents: () => useFilteredComponents,
2920 - useInstancePanelData: () => useInstancePanelData,
2921 - useIsSanitizedComponent: () => useIsSanitizedComponent,
2922 - useOverridablePropValue: () => useOverridablePropValue,
2923 - useOverridableProps: () => useOverridableProps,
2924 - useSanitizeOverridableProps: () => useSanitizeOverridableProps
2925 - });
2926 -
2927 -//#endregion
2928 -//#region \0elementor-package-library-entry
2929 - (window.elementorV2 = window.elementorV2 || {}).editorComponents = src_exports;
2930 -
2931 -//#endregion
2932 -})(elementorV2.editor, elementorV2.editorCanvas, elementorV2.editorDocuments, elementorV2.editorEditingPanel, elementorV2.editorElementsPanel, elementorV2.editorEmbeddedDocumentsManager, elementorV2.editorV1Adapters, elementorV2.store, wp.i18n, elementorV2.httpClient, React, elementorV2.editorUi, elementorV2.ui, elementorV2.utils, elementorV2.icons, elementorV2.editorCurrentUser, elementorV2.editorNotifications, elementorV2.editorElements, elementorV2.editorProps, elementorV2.schema, elementorV2.events, elementorV2.editorPanels, elementorV2.editorControls, elementorV2.editorTemplates);
2933 -window.elementorV2.editorComponents?.init?.();
1 +/*! For license information please see editor-components.js.LICENSE.txt */
2 +!function(){"use strict";var e={"./packages/packages/core/editor-components/src/api.ts":function(e,t,n){n.r(t),n.d(t,{apiClient:function(){return a},getParams:function(){return getParams}});var o=n("@elementor/editor-v1-adapters"),r=n("@elementor/http-client");const s="elementor/v1/components",getParams=e=>({action:"get_document_config",unique_id:`document-config-${e}`,data:{id:e}}),a={get:()=>(0,r.httpService)().get(`${s}`).then(e=>e.data.data),create:e=>(0,r.httpService)().post(`${s}`,e).then(e=>e.data.data),updateStatuses:(e,t)=>(0,r.httpService)().put(`${s}/status`,{ids:e,status:t}),getComponentConfig:e=>o.ajax.load(getParams(e)),invalidateComponentConfigCache:e=>o.ajax.invalidateCache(getParams(e)),getComponentLockStatus:async e=>await(0,r.httpService)().get(`${s}/lock-status`,{params:{componentId:e}}).then(e=>{const{is_current_user_allow_to_edit:t,locked_by:n}=e.data.data;return{isAllowedToSwitchDocument:t,lockedBy:n||""}}),lockComponent:async e=>await(0,r.httpService)().post(`${s}/lock`,{componentId:e}).then(e=>e.data),unlockComponent:async e=>await(0,r.httpService)().post(`${s}/unlock`,{componentId:e}).then(e=>e.data),getOverridableProps:async e=>await(0,r.httpService)().get(`${s}/overridable-props`,{params:{componentId:e.toString()}}).then(e=>e.data.data),updateArchivedComponents:async(e,t)=>await(0,r.httpService)().post(`${s}/archive`,{componentIds:e,status:t}).then(e=>e.data.data),updateComponentTitle:(e,t)=>(0,r.httpService)().post(`${s}/update-titles`,{components:e,status:t}).then(e=>e.data.data),validate:async e=>await(0,r.httpService)().post(`${s}/create-validate`,e).then(e=>e.data)}},"./packages/packages/core/editor-components/src/component-instance-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceTransformer:function(){return c}});var o=n("@elementor/editor-canvas"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts"),a=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts");const c=(0,o.createTransformer)(async({component_id:e,overrides:t})=>{const n=(0,s.selectUnpublishedComponents)((0,r.__getState)()).find(({uid:t})=>t===e),o=t?.reduce((e,t)=>({...e,...t}),{});if(n)return{elements:structuredClone(n.elements),overrides:o};if("number"!=typeof e)throw new Error(`Component ID "${e}" not valid.`);const c=await(0,a.getComponentDocumentData)(e);return{elements:c?.elements??[],overrides:o}})},"./packages/packages/core/editor-components/src/component-overridable-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentOverridableTransformer:function(){return r}});var o=n("@elementor/editor-canvas");const r=(0,o.createTransformer)((e,t)=>{const{overrides:n}=t.renderContext??{},r=n?.[e.override_key];if(r){return function isOriginValueOverride(e){return"override"===e.$$type}(e.origin_value)?function transformOverride(e,t,n){const r=o.settingsTransformersRegistry.get("override");if(!r)return null;const s=r(e.origin_value.value,t);if(!s)return null;const[a]=Object.keys(s);return{[a]:n}}(e,t,r):r}return e.origin_value})},"./packages/packages/core/editor-components/src/component-override-transformer.ts":function(e,t,n){n.r(t),n.d(t,{componentOverrideTransformer:function(){return r}});var o=n("@elementor/editor-canvas");const r=(0,o.createTransformer)(e=>{const{override_key:t,override_value:n}=e;return{[t]:n}})},"./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentSearch:function(){return ComponentSearch}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const ComponentSearch=()=>{const{inputValue:e,handleChange:t}=(0,c.useSearch)();return o.createElement(s.Stack,{direction:"row",gap:.5,sx:{width:"100%",px:2,py:1.5}},o.createElement(s.Box,{sx:{flexGrow:1}},o.createElement(s.TextField,{role:"search",fullWidth:!0,size:"tiny",value:e,placeholder:(0,a.__)("Search","elementor"),onChange:e=>t(e.target.value),InputProps:{startAdornment:o.createElement(s.InputAdornment,{position:"start"},o.createElement(r.SearchIcon,{fontSize:"tiny"}))}})))}},"./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentItem:function(){return c},ComponentName:function(){return ComponentName}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),a=n("@elementor/ui");function _extends(){return _extends=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)({}).hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},_extends.apply(null,arguments)}const c=(0,o.forwardRef)(({component:e,disabled:t=!0,draggable:n,onDragStart:r,onDragEnd:c,onClick:p,isEditing:l=!1,error:d=null,nameSlot:m,endSlot:u,...g},f)=>o.createElement(a.ListItemButton,_extends({disabled:t,draggable:n,onDragStart:r,onDragEnd:c,shape:"rounded",ref:f,sx:{border:"solid 1px",borderColor:"divider",py:.5,px:1,display:"flex",width:"100%",alignItems:"center",gap:1}},g),o.createElement(a.Box,{display:"flex",alignItems:"center",gap:1,minWidth:0,flexGrow:1,onClick:p},o.createElement(a.ListItemIcon,{size:"tiny"},o.createElement(s.ComponentsIcon,{fontSize:"tiny"})),o.createElement(i,{isActive:l,isError:!!d},o.createElement(a.Box,{display:"flex",flex:1,minWidth:0,flexGrow:1},m??o.createElement(ComponentName,{name:e.name})))),u)),i=(0,a.styled)(a.Box,{shouldForwardProp:e=>"isActive"!==e&&"isError"!==e})(({theme:e,isActive:t,isError:n})=>({display:"flex",width:"100%",flexGrow:1,borderRadius:e.spacing(.5),border:getIndicatorBorder({isActive:t,isError:n,theme:e}),padding:`0 ${e.spacing(1)}`,marginLeft:t?e.spacing(1):0,minWidth:0})),getIndicatorBorder=({isActive:e,isError:t,theme:n})=>t?`2px solid ${n.palette.error.main}`:e?`2px solid ${n.palette.secondary.main}`:"none";function ComponentName({name:e,editable:t}){return t?.isEditing?o.createElement(r.EditableField,_extends({ref:t.ref,as:a.Typography,variant:"caption"},t.getProps())):o.createElement(r.EllipsisWithTooltip,{title:e,as:a.Typography,variant:"caption",color:"text.primary"})}},"./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsList:function(){return ComponentsList},EmptySearchResult:function(){return EmptySearchResult},useFilteredComponents:function(){return useFilteredComponents}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/hooks/use-components.ts"),i=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),p=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),l=n("./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx"),m=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const u={fontSize:"0.875rem !important",fontWeight:"500 !important"};function ComponentsList(){const{components:e,isLoading:t,searchValue:n}=useFilteredComponents();if(t)return o.createElement(d.LoadingComponents,null);return!e?.length?n.length?o.createElement(EmptySearchResult,null):(0,p.isProOutdatedForComponents)()?o.createElement(ProOutdatedEmptyState,null):(0,p.isProComponentsSupported)()?o.createElement(EmptyState,null):o.createElement(ProUpgradeEmptyState,null):o.createElement(s.List,{sx:{display:"flex",flexDirection:"column",gap:1,px:2}},e.map(e=>o.createElement(l.ComponentItem,{key:e.uid,component:e})))}const ProUpgradeEmptyState=()=>o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,a.__)("Create Reusable Components","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:200}},(0,a.__)("Create design elements that sync across your entire site.","elementor"))),o.createElement(s.Button,{variant:"contained",color:"promotion",size:"small",startIcon:o.createElement(r.CrownFilledIcon,null),href:"https://go.elementor.com/go-pro-components/",target:"_blank",rel:"noopener noreferrer"},(0,a.__)("Upgrade now","elementor"))),ProOutdatedEmptyState=()=>o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4,maxWidth:268,m:"auto"},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,a.__)("Create Reusable Components","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary"},(0,a.__)("Create design elements that sync across your entire site.","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{mt:1}},(0,a.__)("To create components, update Elementor Pro to the latest version.","elementor"))),o.createElement(s.Button,{variant:"text",color:"info",size:"small",href:"/wp-admin/plugins.php",target:"_blank",rel:"noopener noreferrer"},(0,a.__)("Update Elementor Pro","elementor"))),EmptyState=()=>{const{canCreate:e}=(0,i.useComponentsPermissions)();return o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",sx:{px:2,py:4},gap:2,overflow:"hidden"},o.createElement(s.Stack,{alignItems:"center",gap:1},o.createElement(r.ComponentsIcon,{fontSize:"large",sx:{color:"text.secondary"}}),o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,a.__)("No components yet","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:200}},(0,a.__)("Components are reusable blocks that sync across your site.","elementor"),o.createElement("br",null),e?(0,a.__)("Create once, use everywhere.","elementor"):(0,a.__)("With your current role, you cannot create components. Contact an administrator to create one.","elementor")),o.createElement(s.Link,{href:"http://go.elementor.com/components-guide-article",target:"_blank",rel:"noopener noreferrer",variant:"caption",color:"info.main"},(0,a.__)("Learn more about components","elementor"))),e&&o.createElement(o.Fragment,null,o.createElement(s.Divider,{sx:{width:"100%"}}),o.createElement(s.Stack,{alignItems:"center",gap:1,width:"100%"},o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"text.secondary",sx:u},(0,a.__)("Create your first one:","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"secondary",sx:{maxWidth:228}},(0,a.__)('Right-click any div-block or flexbox on your canvas or structure and select "Create component"',"elementor")))))},EmptySearchResult=()=>{const{searchValue:e,clearSearch:t}=(0,m.useSearch)();return o.createElement(s.Stack,{color:"text.secondary",pt:5,alignItems:"center",gap:1,overflow:"hidden",justifySelf:"center"},o.createElement(r.ComponentsIcon,null),o.createElement(s.Box,{sx:{width:"100%"}},o.createElement(s.Typography,{align:"center",variant:"subtitle2",color:"inherit",sx:u},(0,a.__)("Sorry, nothing matched","elementor")),e&&o.createElement(s.Typography,{variant:"subtitle2",color:"inherit",sx:{...u,display:"flex",width:"100%",justifyContent:"center"}},o.createElement("span",null,"“"),o.createElement("span",{style:{maxWidth:"80%",overflow:"hidden",textOverflow:"ellipsis"}},e),o.createElement("span",null,"”."))),o.createElement(s.Typography,{align:"center",variant:"caption",color:"inherit"},(0,a.__)("Try something else.","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",color:"inherit"},o.createElement(s.Link,{color:"secondary",variant:"caption",component:"button",onClick:t},(0,a.__)("Clear & try again","elementor"))))},useFilteredComponents=()=>{const{components:e,isLoading:t}=(0,c.useComponents)(),{searchValue:n}=(0,m.useSearch)();return{components:e.filter(e=>e.name.toLowerCase().includes(n.toLowerCase())),isLoading:t,searchValue:n}}},"./packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsProNotification:function(){return ComponentsProNotification},UPGRADE_URL:function(){return a}});var o=n("react"),r=n("@wordpress/i18n"),s=n("./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx");const a="https://go.elementor.com/go-pro-components-exist-footer/";function ComponentsProNotification(){return o.createElement(s.ComponentsUpgradeAlert,{title:(0,r.__)("Create new components","elementor"),description:(0,r.__)("Creating new components requires an active Pro subscription.","elementor"),upgradeUrl:a})}},"./packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpdateNotification:function(){return ComponentsUpdateNotification}});var o=n("react"),r=n("@wordpress/i18n"),s=n("./packages/packages/core/editor-components/src/components/components-update-alert.tsx");function ComponentsUpdateNotification(){return o.createElement(s.ComponentsUpdateAlert,{title:(0,r.__)("Create new Components","elementor"),description:(0,r.__)("To create new components, update Elementor Pro to the latest version.","elementor")})}},"./packages/packages/core/editor-components/src/components/components-tab/components.tsx":function(e,t,n){n.r(t),n.d(t,{Components:function(){return Components}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/ui"),a=n("./packages/packages/core/editor-components/src/hooks/use-components.ts"),c=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),i=n("./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx"),p=n("./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx"),l=n("./packages/packages/core/editor-components/src/components/components-tab/components-pro-notification.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-tab/components-update-notification.tsx"),m=n("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx");const u="components-full-height-panel",ComponentsContent=()=>{const{components:e,isLoading:t}=(0,a.useComponents)(),n=!t&&e.length>0,r=!(0,c.isProComponentsSupported)()&&n,m=(0,c.isProOutdatedForComponents)();return(0,o.useLayoutEffect)(()=>{let e=document.getElementById(u);return e||(e=document.createElement("style"),e.id=u,e.textContent="\n#elementor-panel-page-elements {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n}\n\n#elementor-panel-elements {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n}\n\n#elementor-panel-elements-wrapper {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1;\n\tmin-height: 0;\n}\n",document.head.appendChild(e)),()=>{document.getElementById(u)?.remove()}},[]),o.createElement(s.Stack,{justifyContent:"space-between",sx:{flex:1,minHeight:0}},n&&o.createElement(i.ComponentSearch,null),o.createElement(p.ComponentsList,null),r&&(m?o.createElement(d.ComponentsUpdateNotification,null):o.createElement(l.ComponentsProNotification,null)))},Components=()=>o.createElement(r.ThemeProvider,null,o.createElement(m.SearchProvider,{localStorageKey:"elementor-components-search"},o.createElement(ComponentsContent,null)))},"./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx":function(e,t,n){n.r(t),n.d(t,{LoadingComponents:function(){return LoadingComponents}});var o=n("react"),r=n("@elementor/ui");const s=Array.from({length:3},(e,t)=>t),LoadingComponents=()=>o.createElement(r.Stack,{"aria-label":"Loading components",gap:1.5,sx:{pointerEvents:"none",position:"relative",maxHeight:"300px",overflow:"hidden",px:1,"&:after":{position:"absolute",bottom:0,content:'""',left:0,width:"100%",height:"40%",pointerEvents:"none",zIndex:1}}},s.map(e=>o.createElement(r.Box,{key:e,display:"flex",alignItems:"center",gap:1.5,sx:{py:.75,px:1.5,opacity:0,animation:`e-loading-fade-in 0.4s ease-out ${80*e}ms forwards`,"@keyframes e-loading-fade-in":{from:{opacity:0,transform:"translateY(4px)"},to:{opacity:1,transform:"translateY(0)"}}}},o.createElement(r.Skeleton,{animation:"wave",variant:"rounded",width:24,height:24}),o.createElement(r.Skeleton,{animation:"wave",variant:"rounded",width:"60%",height:14}))))},"./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx":function(e,t,n){n.r(t),n.d(t,{SearchProvider:function(){return SearchProvider},useSearch:function(){return useSearch}});var o=n("react"),r=n("@elementor/utils");const s=(0,o.createContext)(void 0),SearchProvider=({children:e,localStorageKey:t})=>{const{debouncedValue:n,handleChange:a,inputValue:c}=(0,r.useSearchState)({localStorageKey:t});return o.createElement(s.Provider,{value:{handleChange:a,clearSearch:()=>{a("")},searchValue:n,inputValue:c}},e)},useSearch=()=>{const e=(0,o.useContext)(s);if(!e)throw new Error("useSearch must be used within a SearchProvider");return e}},"./packages/packages/core/editor-components/src/components/components-update-alert.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpdateAlert:function(){return ComponentsUpdateAlert}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n");const c="/wp-admin/plugins.php";function ComponentsUpdateAlert({title:e,description:t}){return o.createElement(s.Box,{sx:{mt:"auto",position:"sticky",bottom:0}},o.createElement(s.Alert,{variant:"standard",color:"info",icon:o.createElement(r.InfoCircleFilledIcon,{fontSize:"tiny"}),role:"status",size:"small",action:o.createElement(s.AlertAction,{variant:"contained",color:"info",href:c,target:"_blank",rel:"noopener noreferrer"},(0,a.__)("Upgrade Now","elementor")),sx:{m:2,mt:1}},o.createElement(s.AlertTitle,null,e),o.createElement(s.Typography,{variant:"caption"},t)))}},"./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentsUpgradeAlert:function(){return ComponentsUpgradeAlert}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n");function ComponentsUpgradeAlert({title:e,description:t,upgradeUrl:n}){return o.createElement(s.Box,{sx:{mt:"auto",position:"sticky",bottom:0}},o.createElement(s.Alert,{variant:"standard",color:"promotion",icon:o.createElement(r.CrownFilledIcon,{fontSize:"tiny"}),role:"status",size:"small",action:o.createElement(s.AlertAction,{variant:"contained",color:"promotion",href:n,target:"_blank",rel:"noopener noreferrer"},(0,a.__)("Upgrade now","elementor")),sx:{m:2,mt:1}},o.createElement(s.AlertTitle,null,e),o.createElement(s.Typography,{variant:"caption"},t)))}},"./packages/packages/core/editor-components/src/components/control-label.tsx":function(e,t,n){n.r(t),n.d(t,{ControlLabel:function(){return ControlLabel}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/ui");const ControlLabel=({children:e,...t})=>o.createElement(s.Stack,{direction:"row",alignItems:"center",justifyItems:"start",gap:.25},o.createElement(r.ControlFormLabel,t,e),o.createElement(r.ControlAdornments,null))},"./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx":function(e,t,n){n.r(t),n.d(t,{DetachInstanceConfirmationDialog:function(){return DetachInstanceConfirmationDialog},openDetachConfirmDialog:function(){return openDetachConfirmDialog}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),a=n("@wordpress/i18n");function DetachInstanceConfirmationDialog({open:e,onClose:t,onConfirm:n}){return o.createElement(r.ConfirmationDialog,{open:e,onClose:t},o.createElement(r.ConfirmationDialog.Title,{icon:s.AlertTriangleFilledIcon,iconColor:"secondary"},(0,a.__)("Detach from Component?","elementor")),o.createElement(r.ConfirmationDialog.Content,null,o.createElement(r.ConfirmationDialog.ContentText,null,(0,a.__)("Detaching this instance will break its link to the Component. Changes to the Component will no longer apply. Continue?","elementor"))),o.createElement(r.ConfirmationDialog.Actions,{onClose:t,onConfirm:n,confirmLabel:(0,a.__)("Detach","elementor"),color:"primary"}))}function openDetachConfirmDialog(e){(0,r.openDialog)({component:o.createElement(DetachInstanceConfirmationDialog,{open:!0,onClose:r.closeDialog,onConfirm:()=>{(0,r.closeDialog)(),e()}})})}},"./packages/packages/core/editor-components/src/components/errors.ts":function(e,t,n){n.r(t),n.d(t,{OverrideControlInnerElementNotFoundError:function(){return r}});var o=n("@elementor/utils");const r=(0,o.createError)({code:"override_control_inner_element_not_found",message:"Component inner element not found for override control. The element may have been deleted without updating the overridable props, or the component has not finished rendering yet."})},"./packages/packages/core/editor-components/src/components/in-edit-mode.tsx":function(e,t,n){n.r(t),n.d(t,{openEditModeDialog:function(){return openEditModeDialog}});var o=n("react"),r=n("@elementor/editor-ui"),s=n("@elementor/icons"),a=n("@elementor/ui"),c=n("@wordpress/i18n");const openEditModeDialog=e=>{(0,r.openDialog)({component:o.createElement(EditModeDialog,{lockedBy:e})})},EditModeDialog=({lockedBy:e})=>{const t=(0,c.__)("%s is currently editing this document","elementor").replace("%s",e);return o.createElement(o.Fragment,null,o.createElement(a.DialogHeader,{logo:!1},o.createElement(a.Box,{display:"flex",alignItems:"center",gap:1},o.createElement(a.Icon,{color:"secondary"},o.createElement(s.InfoCircleFilledIcon,{fontSize:"medium"})),o.createElement(a.Typography,{variant:"subtitle1"},t))),o.createElement(a.DialogContent,null,o.createElement(a.Stack,{spacing:2,direction:"column"},o.createElement(a.Typography,{variant:"body2"},(0,c.__)("You can wait for them to finish or reach out to coordinate your changes together.","elementor")),o.createElement(a.DialogActions,null,o.createElement(a.Button,{color:"secondary",variant:"contained",onClick:r.closeDialog},(0,c.__)("Close","elementor"))))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx":function(e,t,n){n.r(t),n.d(t,{DetachAction:function(){return DetachAction}});var o=n("react"),r=n("@elementor/editor-notifications"),s=n("@elementor/icons"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts"),i=n("./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx"),p=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx");const DetachAction=({componentInstanceId:e,componentId:t})=>{const[n,l]=(0,o.useState)(!1),d=(0,a.__)("Detach from Component","elementor");return o.createElement(o.Fragment,null,o.createElement(p.EditComponentAction,{label:d,icon:s.DetachIcon,onClick:()=>{l(!0)}}),o.createElement(i.DetachInstanceConfirmationDialog,{open:n,onClose:()=>{l(!1)},onConfirm:async()=>{l(!1);try{await(0,c.detachComponentInstance)({instanceId:e,componentId:t,trackingInfo:getDetachTrackingInfo()})}catch{(0,r.notify)({type:"error",message:(0,a.__)("Failed to detach component instance.","elementor"),id:"detach-component-instance-failed"})}}}))};function getDetachTrackingInfo(){const e=window,t=e?.elementorCommon?.eventsManager?.config;return t?{location:t.locations.components.instanceEditingPanel,trigger:t.triggers.click}:{location:"",trigger:""}}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx":function(e,t,n){n.r(t),n.d(t,{EmptyState:function(){return EmptyState}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts");const EmptyState=({onEditComponent:e})=>{const{canEdit:t}=(0,c.useComponentsPermissions)(),n=t?(0,a.__)("Edit the component to add properties, manage them or update the design across all instances.","elementor"):(0,a.__)("With your current role, you cannot edit this component. Contact an administrator to add properties.","elementor");return o.createElement(s.Stack,{alignItems:"center",justifyContent:"start",height:"100%",color:"text.secondary",sx:{p:2.5,pt:8,pb:5.5,mt:1},gap:1.5},o.createElement(r.ComponentPropListIcon,{fontSize:"large"}),o.createElement(s.Typography,{align:"center",variant:"subtitle2"},(0,a.__)("No properties yet","elementor")),o.createElement(s.Typography,{align:"center",variant:"caption",maxWidth:"170px"},n),t&&o.createElement(s.Button,{variant:"outlined",color:"secondary",size:"small",sx:{mt:1},disabled:!e,onClick:e},o.createElement(r.PencilIcon,{fontSize:"small"}),(0,a.__)("Edit component","elementor")))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx":function(e,t,n){n.r(t),n.d(t,{InstanceEditingPanel:function(){return InstanceEditingPanel}});var o=n("react"),r=n("@elementor/icons"),s=n("@elementor/ui"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),i=n("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),p=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),l=n("./packages/packages/core/editor-components/src/components/components-update-alert.tsx"),d=n("./packages/packages/core/editor-components/src/components/components-upgrade-alert.tsx"),m=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx"),u=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx"),g=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx"),f=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx"),v=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts");const k="https://go.elementor.com/go-pro-components-Instance-edit-footer/";function InstanceEditingPanel(){const{canEdit:e}=(0,c.useComponentsPermissions)(),t=(0,v.useInstancePanelData)();if(!t)return null;const{componentId:n,component:y,overrides:_,overridableProps:C,groups:h,isEmpty:b,componentInstanceId:E}=t,I=(0,a.__)("Edit %s","elementor").replace("%s",y.name),P=o.createElement(s.Stack,{direction:"row",gap:.5},o.createElement(m.DetachAction,{componentInstanceId:E,componentId:n}),e&&o.createElement(f.EditComponentAction,{disabled:!0,label:I,icon:r.PencilIcon}));return o.createElement(s.Box,{"data-testid":"instance-editing-panel",sx:{display:"flex",flexDirection:"column",height:"100%"}},o.createElement(i.ComponentInstanceProvider,{componentId:n,overrides:_,overridableProps:C},o.createElement(f.InstancePanelHeader,{componentName:y.name,actions:P}),o.createElement(g.InstancePanelBody,{groups:h,isEmpty:b,emptyState:o.createElement(u.EmptyState,null),componentInstanceId:E})),!(0,p.isProComponentsSupported)()&&((0,p.isProOutdatedForComponents)()?o.createElement(l.ComponentsUpdateAlert,{title:(0,a.__)("Edit Component","elementor"),description:(0,a.__)("To edit components, update Elementor Pro to the latest version.","elementor")}):o.createElement(d.ComponentsUpgradeAlert,{title:(0,a.__)("Edit components","elementor"),description:(0,a.__)("Editing components requires an active Pro subscription.","elementor"),upgradeUrl:k})))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx":function(e,t,n){n.r(t),n.d(t,{InstancePanelBody:function(){return InstancePanelBody}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-editing-panel"),a=n("@elementor/editor-panels"),c=n("@elementor/ui"),i=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx");function InstancePanelBody({groups:e,isEmpty:t,emptyState:n,componentInstanceId:p}){return o.createElement(a.PanelBody,null,o.createElement(r.ControlAdornmentsProvider,{items:(0,s.getFieldIndicators)("settings")},t?n:o.createElement(c.Stack,{direction:"column",alignItems:"stretch"},e.map(e=>o.createElement(o.Fragment,{key:e.id+p},o.createElement(i.OverridePropsGroup,{group:e}),o.createElement(c.Divider,null))))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx":function(e,t,n){n.r(t),n.d(t,{EditComponentAction:function(){return EditComponentAction},InstancePanelHeader:function(){return InstancePanelHeader}});var o=n("react"),r=n("@elementor/editor-panels"),s=n("@elementor/editor-ui"),a=n("@elementor/icons"),c=n("@elementor/ui");function InstancePanelHeader({componentName:e,actions:t}){return o.createElement(r.PanelHeader,{sx:{justifyContent:"start",px:2}},o.createElement(c.Stack,{direction:"row",alignItems:"center",flexGrow:1,gap:1,maxWidth:"100%"},o.createElement(a.ComponentsIcon,{fontSize:"small",sx:{color:"text.tertiary"}}),o.createElement(s.EllipsisWithTooltip,{title:e,as:r.PanelHeaderTitle,sx:{flexGrow:1}}),t))}function EditComponentAction({label:e,onClick:t,disabled:n=!1,icon:r}){return o.createElement(c.Tooltip,{title:e},o.createElement(c.IconButton,{size:"tiny",onClick:t,"aria-label":e,disabled:n},o.createElement(r,{fontSize:"tiny"})))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx":function(e,t,n){n.r(t),n.d(t,{OverridePropControl:function(){return OverridePropControl}});var o=n("react"),r=n("@elementor/editor-controls"),s=n("@elementor/editor-editing-panel"),a=n("@elementor/editor-elements"),c=n("@elementor/ui"),i=n("./packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts"),p=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),l=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),d=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),m=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),u=n("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),g=n("./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx"),f=n("./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts"),v=n("./packages/packages/core/editor-components/src/store/store.ts"),k=n("./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts"),y=n("./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts"),_=n("./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts"),C=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),h=n("./packages/packages/core/editor-components/src/components/control-label.tsx"),b=n("./packages/packages/core/editor-components/src/components/errors.ts"),E=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-resolved-origin-value.tsx");function OverridePropControl({overrideKey:e}){const t=(0,u.useComponentOverridableProps)(),n=t?.props[e];return n?o.createElement(s.SettingsField,{bind:"component_instance",propDisplayName:n.label},o.createElement(OverrideControl,{overridableProp:n})):null}function OverrideControl({overridableProp:e}){const t=(0,s.useElement)(),{value:n,setValue:I}=(0,r.useBoundProp)(d.componentInstancePropTypeUtil),P=(0,v.useCurrentComponentId)(),x=(0,u.useComponentId)(),w=(0,u.useComponentOverridableProps)(),S=(0,u.useComponentInstanceOverrides)(),O=(0,i.useControlsByWidgetType)(e?.originPropFields?.widgetType??e.widgetType),T=(0,r.getControlReplacements)(),D=(0,_.getMatchingOverride)(S,e.overrideKey),U=(0,E.useResolvedOriginValue)(D,e);if(!x)throw new Error("Component ID is required");if(!w)throw new Error("Component has no overridable props");const A=(0,y.getPropTypeForComponentOverride)(e);if(!A)return null;const V=(D?(0,C.resolveOverridePropValue)(D):null)??U??e.originValue,N={[e.overrideKey]:V},{control:L,controlProps:F,layout:B}=function getControlParams(e,t,n){const o=e[t.propKey],{value:r}=o,a=function getControlLayout(e){return e.value.meta?.layout||s.controlsRegistry.getLayout(e.value.type)}(o),c=function populateChildControlProps(e){if(e.childControlType){const t=s.controlsRegistry.get(e.childControlType),n=s.controlsRegistry.getPropTypeUtil(e.childControlType);e={...e,childControlConfig:{component:t,props:e.childControlProps||{},propTypeUtil:n}}}return e}(r.props);"custom"===a&&(c.label=n??r.label);return{control:o,controlProps:c,layout:a}}(O,e?.originPropFields??e,e.label),{elementId:M,widgetType:z,elType:R,propKey:q}=e.originPropFields??e,j=(0,k.getContainerByOriginId)(M,t.element.id);if(!j)throw new b.OverrideControlInnerElementNotFoundError({context:{componentId:x,elementId:M}});const $=j.id,K="widget"===R?z:R,W=(0,a.getElementType)(K);if(!W)return null;const G=(0,a.getElementSettings)($,Object.keys(W.propsSchema)),H=(0,s.createTopLevelObjectType)({schema:{[e.overrideKey]:A}});return o.createElement(g.OverridablePropProvider,{value:m.componentOverridablePropTypeUtil.extract(D)??void 0,componentInstanceElement:t},o.createElement(s.ElementProvider,{element:{id:$,type:K},elementType:W,settings:G},o.createElement(s.SettingsField,{bind:q,propDisplayName:e.label},o.createElement(r.PropProvider,{propType:H,value:N,setValue:t=>{if(!w)return void I({...n,overrides:void 0});const o=function getTempNewValueForDynamicProp(e,t,n){const o=null===n;if(o&&(0,s.isDynamicPropValue)(t))return e.default??null;return n}(A,V,t[e.overrideKey]),r=function createOverrideValue({matchingOverride:e,overrideKey:t,overrideValue:n,componentId:o}){const r=m.componentOverridablePropTypeUtil.extract(e),s=m.componentOverridablePropTypeUtil.extract(n)??r;if(s){const e=p.componentInstanceOverridePropTypeUtil.create({override_key:t,override_value:(0,C.resolveOverridePropValue)(n),schema_source:{type:"component",id:o}});return m.componentOverridablePropTypeUtil.create({override_key:s.override_key,origin_value:e})}return p.componentInstanceOverridePropTypeUtil.create({override_key:t,override_value:n,schema_source:{type:"component",id:o}})}({matchingOverride:D,overrideKey:e.overrideKey,overrideValue:o,componentId:x});let a=(S??[]).filter(e=>function isValidOverride(e,t){const n=m.componentOverridablePropTypeUtil.isValid(t)?t.value.origin_value?.value.override_key:t.value.override_key;return!!e.props[n]}(w,e)).map(e=>e===D?r:e);D||(a=[...a,r]),I({...n,overrides:l.componentInstanceOverridesPropTypeUtil.create(a)});const c=m.componentOverridablePropTypeUtil.extract(r);if(c&&P){if(e.originPropFields)return void(0,f.updateOverridableProp)(P,c,e.originPropFields);const{elType:t,widgetType:n,propKey:o,elementId:r}=e;(0,f.updateOverridableProp)(P,c,{elType:t,widgetType:n,propKey:o,elementId:r})}},isDisabled:()=>!1},o.createElement(r.PropKeyProvider,{bind:e.overrideKey},o.createElement(r.ControlReplacementsProvider,{replacements:T},o.createElement(c.Box,{mb:1.5},o.createElement(s.ControlTypeContainer,{layout:B},"custom"!==B&&o.createElement(h.ControlLabel,null,e.label),o.createElement(OriginalControl,{control:L,controlProps:F})))))))))}function OriginalControl({control:e,controlProps:t}){const{value:n}=e;return o.createElement(s.BaseControl,{type:n.type,props:t})}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/override-props-group.tsx":function(e,t,n){n.r(t),n.d(t,{OverridePropsGroup:function(){return OverridePropsGroup}});var o=n("react"),r=n("@elementor/editor-editing-panel"),s=n("@elementor/editor-ui"),a=n("@elementor/ui"),c=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/override-prop-control.tsx");function OverridePropsGroup({group:e}){const[t,n]=(0,r.useStateByElement)(e.id,!0),i=(0,o.useId)(),p=`label-${i}`,l=`content-${i}`,d=e.label;return o.createElement(a.Box,{"aria-label":`${d} section`},o.createElement(a.ListItemButton,{id:p,"aria-controls":l,"aria-label":`${d} section`,onClick:()=>{n(!t)},p:0,sx:{"&:hover":{backgroundColor:"transparent"}}},o.createElement(a.Stack,{direction:"row",alignItems:"center",justifyItems:"start",flexGrow:1,gap:.5},o.createElement(a.ListItemText,{secondary:d,secondaryTypographyProps:{color:"text.primary",variant:"caption",fontWeight:"bold"},sx:{flexGrow:0,flexShrink:1,marginInlineEnd:1}})),o.createElement(s.CollapseIcon,{open:t,color:"secondary",fontSize:"tiny"})),o.createElement(a.Collapse,{id:l,"aria-labelledby":p,in:t,timeout:"auto"},o.createElement(a.Stack,{direction:"column",gap:1,p:2},e.props.map(e=>o.createElement(c.OverridePropControl,{key:e,overrideKey:e})))))}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts":function(e,t,n){n.r(t),n.d(t,{useInstancePanelData:function(){return useInstancePanelData}});var o=n("@elementor/editor-editing-panel"),r=n("./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/store/store.ts");function useInstancePanelData(){const{element:e,settings:t}=function useComponentInstanceSettings(){const{element:e,settings:t}=(0,o.useElement)();return{element:e,settings:s.componentInstancePropTypeUtil.extract(t.component_instance)}}(),n=t?.component_id?.value,c=t?.overrides?.value,i=(0,a.useComponent)(n??null),p=e?.id,l=(0,r.useSanitizeOverridableProps)(n??null,p);if(!(n&&l&&i&&p))return null;const d=l.groups.order.map(e=>l.groups.items[e]??null).filter(e=>null!==e&&e.props.length>0),m=0===d.length||0===Object.keys(l.props).length;return{componentId:n,component:i,overrides:c,overridableProps:l,groups:d,isEmpty:m,componentInstanceId:p}}},"./packages/packages/core/editor-components/src/components/instance-editing-panel/use-resolved-origin-value.tsx":function(e,t,n){n.r(t),n.d(t,{useResolvedOriginValue:function(){return useResolvedOriginValue}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts"),a=n("./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts"),c=n("./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts");function useResolvedOriginValue(e,t){return function resolveOriginValue(e,t,n){const{originValue:o,originPropFields:r}=n;if(hasValue(o))return o;if(t){const n=getOriginFromOverride(e,t);if(hasValue(n))return n}const{elementId:s,propKey:a}=r??{};if(s&&a)return findOriginValueByElementId(e,s,a);return null}((0,o.__useSelector)(s.selectData),e,t)}function getOriginFromOverride(e,t){const n=(0,c.extractInnerOverrideInfo)(t);if(!n)return null;const{componentId:o,innerOverrideKey:s,overrideValue:i}=n,p=(0,a.getOverridableProp)({componentId:o,overrideKey:s});if(hasValue(p?.originValue))return p.originValue;if(p?.originPropFields?.elementId){const t=p.originPropFields.propKey??p.propKey,n=findOriginValueByElementId(e,p.originPropFields.elementId,t);if(hasValue(n))return n}const l=r.componentOverridablePropTypeUtil.extract(i);return l?getOriginFromOverride(e,r.componentOverridablePropTypeUtil.create(l)):null}function findOriginValueByElementId(e,t,n,o=new Set){for(const r of e){if(o.has(r.id))continue;o.add(r.id);const s=Object.values(r.overridableProps?.props??{}).find(({elementId:e,propKey:o})=>e===t&&o===n);if(s){if(hasValue(s.originValue))return s.originValue;if(s.originPropFields?.elementId){const t=s.originPropFields.propKey??n;return findOriginValueByElementId(e,s.originPropFields.elementId,t,o)}}}return null}function hasValue(e){return null!=e}},"./packages/packages/core/editor-components/src/components/load-template-components.tsx":function(e,t,n){n.r(t),n.d(t,{LoadTemplateComponents:function(){return LoadTemplateComponents}});var o=n("react"),r=n("@elementor/editor-templates"),s=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts");const LoadTemplateComponents=()=>{const e=(0,r.useLoadedTemplates)();return(0,o.useEffect)(()=>{(0,s.loadComponentsAssets)(e.flatMap(e=>e??[]))},[e]),null}},"./packages/packages/core/editor-components/src/consts.ts":function(e,t,n){n.r(t),n.d(t,{COMPONENT_WIDGET_TYPE:function(){return o}});const o="e-component"},"./packages/packages/core/editor-components/src/create-component-type.ts":function(e,t,n){n.r(t),n.d(t,{COMPONENT_WIDGET_TYPE:function(){return v},createComponentType:function(){return createComponentType}});var o=n("@elementor/editor-canvas"),r=n("@elementor/editor-documents"),s=n("@elementor/editor-notifications"),a=n("@elementor/store"),c=n("@elementor/utils"),i=n("@wordpress/i18n"),p=n("./packages/packages/core/editor-components/src/api.ts"),l=n("./packages/packages/core/editor-components/src/store/store.ts"),d=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts"),m=n("./packages/packages/core/editor-components/src/utils/format-component-elements-id.ts"),u=n("./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts"),g=n("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),f=n("./packages/packages/core/editor-components/src/utils/tracking.ts");const v="e-component",k="https://go.elementor.com/go-pro-components-Instance-edit-canvas-double-click/",y="https://go.elementor.com/go-pro-components-Instance-edit-context-menu/",_="/wp-admin/plugins.php",C="component-edit-upgrade",h="component-edit-update",b=2e3;function notifyComponentEditUpdate(){(0,s.notify)({type:"info",id:h,message:(0,i.__)("To edit components, update Elementor Pro to the latest version.","elementor"),additionalActionProps:[{size:"small",variant:"contained",color:"info",href:_,target:"_blank",children:(0,i.__)("Update Now","elementor")}]})}const updateGroups=(e,t)=>{const n=new Map(Object.entries(t.disable??{})),o=new Map(Object.entries(t.add??{}));return e.map(e=>{const t=n.get(e.name)??[],r=o.get(e.name),s=e.actions.map(e=>t.includes(e.name)?{...e,isEnabled:()=>!1}:e);return r&&s.splice(r.index,0,...r.actions),{...e,actions:s}})};function createComponentType(e){const t=window.elementor.modules.elements.types.Widget,n=function createComponentView(e){const t=window;return class extends((0,o.createTemplatedElementView)(e)){eventsManagerConfig=t.elementorCommon.eventsManager.config;#e;isComponentCurrentlyEdited(){const e=(0,r.getCurrentDocument)();return e?.id===this.getComponentId()}getRenderContext(){const e=this.getNamespaceKey(),t=this._parent?.getRenderContext?.(),n=t?.[e];if(!this.#e)return t;const o=this.#e.overrides??{},r=n?.overrides??{};return{...t,[e]:{overrides:{...r,...o}}}}getResolverRenderContext(){const e=this.getNamespaceKey(),t=this.getRenderContext();return t?.[e]}afterSettingsResolve(e){const n=e.component_instance;if(n){this.#e={overrides:n.overrides??{}};const o=this.model.get("id"),r=n.elements??[],s=(0,m.formatComponentElementsId)(r,[o]);this.collection=t.elementor.createBackboneElementsCollection(s),this.collection.models.forEach(setInactiveRecursively),e.component_instance="<template data-children-placeholder></template>"}return e}getDomElement(){return this.children.findByIndex(0)?.getDomElement()??this.$el}attachBuffer(e,t){const n=e.$el.find("[data-children-placeholder]").get(0);n?n.replaceWith(t):super.attachBuffer(e,t)}getComponentId(){const e=this.options?.model?.get("settings")?.get("component_instance")?.value;return e.component_id.value}getContextMenuGroups(){const e=super.getContextMenuGroups().filter(e=>"save"!==e.name);if(!this.getComponentId())return e;return updateGroups(e,this._getContextMenuConfig())}_getContextMenuConfig(){const e=isUserAdministrator(),t=(0,c.hasProInstalled)(),n=(0,u.isProOutdatedForComponents)(),o={name:"edit component",icon:"eicon-edit",title:()=>(0,i.__)("Edit Component","elementor"),...!t&&!n&&{shortcut:`<a href="${y}" target="_blank" onclick="event.stopPropagation()" class="${"elementor-context-menu-list__item__shortcut__promotion-badge"}"><i class="eicon-upgrade-crown"></i></a>`,hasShortcutAction:!0},isEnabled:()=>(0,u.isProComponentsSupported)()||n,callback:(e,t)=>this.editComponent(t)},r={name:"detach instance",icon:"eicon-chain-broken",title:()=>(0,i.__)("Detach from Component","elementor"),isEnabled:()=>!0,callback:(e,t)=>this.detachInstance(t)};return{add:{general:{index:1,actions:e?[o,r]:[r]}},disable:{clipboard:["pasteStyle","resetStyle"]}}}async switchDocument(){const{isAllowedToSwitchDocument:t,lockedBy:n}=await p.apiClient.getComponentLockStatus(this.getComponentId());t?(0,g.switchToComponent)(this.getComponentId(),this.model.get("id"),this.el):e.showLockedByModal?.(n||"")}editComponent({trigger:e,location:t,secondaryLocation:n}){if((0,u.isProOutdatedForComponents)())return void notifyComponentEditUpdate();if(!(0,u.isProComponentsSupported)()||this.isComponentCurrentlyEdited())return;this.switchDocument();const o=this.model.get("editor_settings");(0,f.trackComponentEvent)({action:"edited",source:"user",component_uid:o?.component_uid,component_name:o?.title,location:t,secondary_location:n,trigger:e})}detachInstance({trigger:t,location:n,secondaryLocation:o}){const r=this.getComponentId(),a=this.model.get("id");if(!r||!a)return;const handleConfirm=async()=>{try{await(0,d.detachComponentInstance)({instanceId:a,componentId:r,trackingInfo:{location:n,secondaryLocation:o,trigger:t}})}catch{(0,s.notify)({type:"error",message:(0,i.__)("Failed to detach component instance.","elementor"),id:"detach-component-instance-failed"})}};e.showDetachConfirmDialog?.(handleConfirm)}handleDblClick(e){if(e.stopPropagation(),!isUserAdministrator())return;if((0,u.isProOutdatedForComponents)())return void notifyComponentEditUpdate();if(!(0,c.hasProInstalled)())return void function notifyComponentEditUpgrade(){(0,s.notify)({type:"promotion",id:C,message:(0,i.__)("Editing components requires an active Pro subscription.","elementor"),autoHideDuration:b,additionalActionProps:[{size:"small",variant:"contained",color:"promotion",href:k,target:"_blank",children:(0,i.__)("Upgrade Now","elementor")}]})}();const{triggers:t,locations:n,secondaryLocations:o}=this.eventsManagerConfig;this.editComponent({trigger:t.doubleClick,location:n.canvas,secondaryLocation:o.canvasElement})}events(){return{...super.events(),dblclick:this.handleDblClick}}attributes(){return{...super.attributes(),"data-elementor-id":this.getComponentId()}}}}({...e});return class extends t{getType(){return e.type}getView(){return n}getModel(){return function createComponentModel(){const e=window,t=e.elementor.modules.elements.types.Widget,n=new t,o=n.getModel();return o.extend({initialize(e,t){o.prototype.initialize.call(this,e,t);const n=this.get("settings")?.get("component_instance");if(n?.value){const e=n.value.component_id?.value;e&&"number"==typeof e&&this.set("componentId",e)}this.set("isGlobal",!0)},getTitle(){const e=this.get("editor_settings"),t=e?.title;if(t)return t;const n=e?.component_uid;if(n){const e=(0,l.selectComponentByUid)((0,a.__getState)(),n);if(e?.name)return e.name}return window.elementor.getElementData(this).title},getComponentId(){return this.get("componentId")||null},getComponentName(){return this.getTitle()},getComponentUid(){const e=this.get("editor_settings");return e?.component_uid||null}})}()}}}function setInactiveRecursively(e){const t=e.get("editSettings");t&&t.set("inactive",!0);const n=e.get("elements");n&&n.forEach(e=>{setInactiveRecursively(e)})}function isUserAdministrator(){const e=window;return e.elementor.config?.user?.is_administrator??!1}},"./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts":function(e,t,n){n.r(t),n.d(t,{useComponentsPermissions:function(){return useComponentsPermissions}});var o=n("@elementor/editor-current-user");const useComponentsPermissions=()=>{const{isAdmin:e}=(0,o.useCurrentUserCapabilities)();return{canCreate:e,canEdit:e,canDelete:e,canRename:e}}},"./packages/packages/core/editor-components/src/hooks/use-components.ts":function(e,t,n){n.r(t),n.d(t,{useComponents:function(){return useComponents}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");const useComponents=()=>({components:(0,o.__useSelector)(r.selectComponents),isLoading:(0,o.__useSelector)(r.selectLoadIsPending)})},"./packages/packages/core/editor-components/src/hooks/use-controls-by-widget-type.ts":function(e,t,n){n.r(t),n.d(t,{useControlsByWidgetType:function(){return useControlsByWidgetType}});var o=n("@elementor/editor-elements");function useControlsByWidgetType(e){const t=(0,o.getElementType)(e);if(!t)return{};return function getControlsByBind(e){return e.reduce((e,t)=>({...e,[t.value.bind]:t}),{})}(iterateControls(t.controls))}function iterateControls(e){return e.map(e=>"control"===e.type&&"bind"in e.value?e:"section"===e.type?iterateControls(e.value.items):null).filter(Boolean).flat()}},"./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{useSanitizeOverridableProps:function(){return useSanitizeOverridableProps}});var o=n("./packages/packages/core/editor-components/src/store/store.ts"),r=n("./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts");function useSanitizeOverridableProps(e,t){const n=(0,o.useOverridableProps)(e),s=(0,o.useIsSanitizedComponent)(e,"overridableProps");if(n&&e)return s?n:(0,r.filterValidOverridableProps)(n,t)}},"./packages/packages/core/editor-components/src/init.ts":function(e,t,n){n.r(t),n.d(t,{init:function(){return init}});var o=n("@elementor/editor"),r=n("@elementor/editor-canvas"),s=n("@elementor/editor-documents"),a=n("@elementor/editor-editing-panel"),c=n("@elementor/editor-elements-panel"),i=n("@elementor/editor-styles-repository"),p=n("@elementor/editor-v1-adapters"),l=n("@elementor/store"),d=n("@wordpress/i18n"),m=n("./packages/packages/core/editor-components/src/component-instance-transformer.ts"),u=n("./packages/packages/core/editor-components/src/component-overridable-transformer.ts"),g=n("./packages/packages/core/editor-components/src/component-override-transformer.ts"),f=n("./packages/packages/core/editor-components/src/components/components-tab/components.tsx"),v=n("./packages/packages/core/editor-components/src/components/detach-instance-confirmation-dialog.tsx"),k=n("./packages/packages/core/editor-components/src/components/in-edit-mode.tsx"),y=n("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-editing-panel.tsx"),_=n("./packages/packages/core/editor-components/src/components/load-template-components.tsx"),C=n("./packages/packages/core/editor-components/src/create-component-type.ts"),h=n("./packages/packages/core/editor-components/src/populate-store.ts"),b=n("./packages/packages/core/editor-components/src/prevent-circular-nesting.ts"),E=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts"),I=n("./packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts"),P=n("./packages/packages/core/editor-components/src/store/components-styles-provider.ts"),x=n("./packages/packages/core/editor-components/src/store/store.ts"),w=n("./packages/packages/core/editor-components/src/sync/before-save.ts"),S=n("./packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts");function init(){i.stylesRepository.register(P.componentsStylesProvider),(0,l.__registerSlice)(x.slice),(0,r.registerElementType)(C.COMPONENT_WIDGET_TYPE,e=>(0,C.createComponentType)({...e,showLockedByModal:k.openEditModeDialog,showDetachConfirmDialog:v.openDetachConfirmDialog})),window.elementorCommon.__beforeSave=w.beforeSave,(0,c.injectTab)({id:"components",label:(0,d.__)("Components","elementor"),component:f.Components,position:1}),(0,o.injectIntoLogic)({id:"components-populate-store",component:h.PopulateStore}),(0,p.registerDataHook)("after","editor/documents/attach-preview",async()=>{const{id:e,config:t}=(0,s.getV1CurrentDocument)();e&&(0,I.removeComponentStyles)(e),await(0,E.loadComponentsAssets)(t?.elements??[])}),(0,o.injectIntoLogic)({id:"templates",component:_.LoadTemplateComponents}),(0,a.registerEditingPanelReplacement)({id:"component-instance-edit-panel",condition:(e,t)=>"e-component"===t.key,component:y.InstanceEditingPanel}),r.settingsTransformersRegistry.register("component-instance",m.componentInstanceTransformer),r.settingsTransformersRegistry.register("overridable",u.componentOverridableTransformer),r.settingsTransformersRegistry.register("override",g.componentOverrideTransformer),(0,b.initCircularNestingPrevention)(),(0,S.initLoadComponentDataAfterInstanceAdded)()}},"./packages/packages/core/editor-components/src/populate-store.ts":function(e,t,n){n.r(t),n.d(t,{PopulateStore:function(){return PopulateStore}});var o=n("react"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/thunks.ts");function PopulateStore(){return(0,o.useEffect)(()=>{(0,r.__dispatch)((0,s.loadComponents)())},[]),null}},"./packages/packages/core/editor-components/src/prevent-circular-nesting.ts":function(e,t,n){n.r(t),n.d(t,{extractComponentIdsFromElements:function(){return extractComponentIdsFromElements},initCircularNestingPrevention:function(){return initCircularNestingPrevention},wouldCreateCircularNesting:function(){return wouldCreateCircularNesting}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-notifications"),s=n("@elementor/editor-v1-adapters"),a=n("@elementor/store"),c=n("@wordpress/i18n"),i=n("./packages/packages/core/editor-components/src/store/store.ts");const p="e-component",l={type:"default",message:(0,c.__)("Can't add this component - components that contain each other can't be nested.","elementor"),id:"circular-component-nesting-blocked"};function initCircularNestingPrevention(){(0,s.blockCommand)({command:"document/elements/create",condition:blockCircularCreate}),(0,s.blockCommand)({command:"document/elements/move",condition:blockCircularMove}),(0,s.blockCommand)({command:"document/elements/paste",condition:blockCircularPaste})}function wouldCreateCircularNesting(e){if(void 0===e)return!1;const t=(0,a.__getState)(),n=(0,i.selectCurrentComponentId)(t),o=(0,i.selectPath)(t);return null!==n&&(e===n||o.some(t=>t.componentId===e))}function extractComponentIdFromElement(e){return e.widgetType!==p?null:e.settings?.component_instance?.value?.component_id?.value??null}function extractComponentIdsFromElements(e){const t=[];for(const n of e){const e=extractComponentIdFromElement(n);null!==e&&t.push(e),n.elements?.length&&t.push(...extractComponentIdsFromElements(n.elements))}return t}function blockCircularCreate(e){const t=function extractComponentIdFromModel(e){return e&&e.widgetType===p?e.settings?.component_instance?.value?.component_id?.value??null:null}(e.model);if(null===t)return!1;const n=wouldCreateCircularNesting(t);return n&&(0,r.notify)(l),n}function blockCircularMove(e){const{containers:t=[e.container]}=e,n=t.some(e=>{if(!e)return!1;return(0,o.getAllDescendants)(e).some(e=>{const t=function extractComponentIdFromContainer(e){const t=e.model?.get?.("widgetType");if(t!==p)return null;const n=e.model?.get?.("settings"),o=n?.get?.("component_instance");return o?.value?.component_id?.value??null}(e);return null!==t&&wouldCreateCircularNesting(t)})});return n&&(0,r.notify)(l),n}function blockCircularPaste(e){const{storageType:t}=e;if("localstorage"!==t)return!1;const n=window?.elementorCommon?.storage?.get();if(!n?.clipboard?.elements)return!1;const o=extractComponentIdsFromElements(n.clipboard.elements).some(wouldCreateCircularNesting);return o&&(0,r.notify)(l),o}},"./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceOverridePropTypeUtil:function(){return s}});var o=n("@elementor/editor-props"),r=n("@elementor/schema");const s=(0,o.createPropUtils)("override",r.z.object({override_key:r.z.string(),override_value:r.z.unknown(),schema_source:r.z.object({type:r.z.literal("component"),id:r.z.number()})}))},"./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstanceOverridesPropTypeUtil:function(){return c}});var o=n("@elementor/editor-props"),r=n("@elementor/schema"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");const c=(0,o.createPropUtils)("overrides",r.z.array(r.z.union([s.componentInstanceOverridePropTypeUtil.schema,a.componentOverridablePropTypeUtil.schema])).optional().default([]))},"./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentInstancePropTypeUtil:function(){return a}});var o=n("@elementor/editor-props"),r=n("@elementor/schema"),s=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts");const a=(0,o.createPropUtils)("component-instance",r.z.object({component_id:o.numberPropTypeUtil.schema,overrides:r.z.optional(s.componentInstanceOverridesPropTypeUtil.schema)}))},"./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts":function(e,t,n){n.r(t),n.d(t,{componentOverridablePropTypeUtil:function(){return s}});var o=n("@elementor/editor-props"),r=n("@elementor/schema");const s=(0,o.createPropUtils)("overridable",r.z.object({override_key:r.z.string(),origin_value:r.z.object({$$type:r.z.string(),value:r.z.unknown()}).nullable()}))},"./packages/packages/core/editor-components/src/provider/component-instance-context.tsx":function(e,t,n){n.r(t),n.d(t,{ComponentInstanceProvider:function(){return ComponentInstanceProvider},useComponentId:function(){return useComponentId},useComponentInstanceOverrides:function(){return useComponentInstanceOverrides},useComponentOverridableProps:function(){return useComponentOverridableProps}});var o=n("react");const r=(0,o.createContext)(null);function ComponentInstanceProvider({children:e,...t}){return o.createElement(r.Provider,{value:t},e)}const useComponentId=()=>(0,o.useContext)(r)?.componentId,useComponentInstanceOverrides=()=>(0,o.useContext)(r)?.overrides,useComponentOverridableProps=()=>(0,o.useContext)(r)?.overridableProps},"./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx":function(e,t,n){n.r(t),n.d(t,{OverridablePropProvider:function(){return OverridablePropProvider},useComponentInstanceElement:function(){return useComponentInstanceElement},useOverridablePropValue:function(){return useOverridablePropValue}});var o=n("react");const r=(0,o.createContext)(null);function OverridablePropProvider({children:e,...t}){return o.createElement(r.Provider,{value:t},e)}const useOverridablePropValue=()=>(0,o.useContext)(r)?.value,useComponentInstanceElement=()=>(0,o.useContext)(r)?.componentInstanceElement},"./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsAssets:function(){return loadComponentsAssets}});var o=n("@elementor/editor-documents"),r=n("./packages/packages/core/editor-components/src/utils/get-component-documents.ts"),s=n("./packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts"),a=n("./packages/packages/core/editor-components/src/store/actions/load-components-styles.ts");async function loadComponentsAssets(e){const t=await(0,r.getComponentDocuments)(e);!function updateDocumentState(e){const t=[...e.values()].some(o.isDocumentDirty);t&&(0,o.setDocumentModifiedStatus)(!0)}(t),(0,a.loadComponentsStyles)(t),await(0,s.loadComponentsOverridableProps)([...t.keys()])}},"./packages/packages/core/editor-components/src/store/actions/load-components-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsOverridableProps:function(){return loadComponentsOverridableProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function loadComponentsOverridableProps(e){if(e.length)return Promise.all(e.map(loadComponentOverrides))}async function loadComponentOverrides(e){if((0,s.selectIsOverridablePropsLoaded)((0,o.__getState)(),e))return;const t=await r.apiClient.getOverridableProps(e);t&&(0,o.__dispatch)(s.slice.actions.setOverridableProps({componentId:e,overridableProps:t}))}},"./packages/packages/core/editor-components/src/store/actions/load-components-styles.ts":function(e,t,n){n.r(t),n.d(t,{loadComponentsStyles:function(){return loadComponentsStyles}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function loadComponentsStyles(e){if(!e.size)return;const t=(0,r.selectStyles)((0,o.__getState)()),n=new Map([...e.entries()].filter(([e])=>!t[e]));n.size&&function addStyles(e){const t=Object.fromEntries([...e.entries()].map(([e,t])=>[e,extractStylesFromDocument(t)]));(0,o.__dispatch)(r.slice.actions.addStyles(t))}(n)}function extractStylesFromDocument(e){return e.elements?.length?e.elements.flatMap(extractStylesFromElement):[]}function extractStylesFromElement(e){return[...Object.values(e.styles??{}),...(e.elements??[]).flatMap(extractStylesFromElement)]}},"./packages/packages/core/editor-components/src/store/actions/remove-component-styles.ts":function(e,t,n){n.r(t),n.d(t,{removeComponentStyles:function(){return removeComponentStyles}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts"),s=n("./packages/packages/core/editor-components/src/store/store.ts");function removeComponentStyles(e){r.apiClient.invalidateComponentConfigCache(e),(0,o.__dispatch)(s.slice.actions.removeStyles({id:e}))}},"./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts":function(e,t,n){n.r(t),n.d(t,{updateOverridableProp:function(){return updateOverridableProp}});var o=n("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),r=n("./packages/packages/core/editor-components/src/store/dispatchers.ts"),s=n("./packages/packages/core/editor-components/src/store/selectors.ts");function updateOverridableProp(e,t,n){const a=s.componentsSelectors.getOverridableProps(e);if(!a)return;const c=a.props[t.override_key];if(!c)return;const i=(0,o.resolveOverridePropValue)(t.origin_value),p=n?{originValue:i,originPropFields:n}:{originValue:i},l={...a,props:{...a.props,[c.overrideKey]:{...c,...p}}};r.componentsActions.setOverridableProps(e,l)}},"./packages/packages/core/editor-components/src/store/components-styles-provider.ts":function(e,t,n){n.r(t),n.d(t,{componentsStylesProvider:function(){return a}});var o=n("@elementor/editor-styles-repository"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");const a=(0,o.createStylesProvider)({key:"components-styles",priority:100,subscribe:e=>(0,r.__subscribeWithSelector)(e=>e[s.SLICE_NAME],()=>{e()}),actions:{all:()=>(0,s.selectFlatStyles)((0,r.__getState)()),get:e=>(0,s.selectFlatStyles)((0,r.__getState)()).find(t=>t.id===e)??null}})},"./packages/packages/core/editor-components/src/store/dispatchers.ts":function(e,t,n){n.r(t),n.d(t,{componentsActions:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function safeDispatch(){return(0,o.__getStore)()?.dispatch}const s={add(e){(0,o.__dispatch)(r.slice.actions.add(e))},load(e){(0,o.__dispatch)(r.slice.actions.load(e))},addUnpublished(e){(0,o.__dispatch)(r.slice.actions.addUnpublished(e))},removeUnpublished(e){(0,o.__dispatch)(r.slice.actions.removeUnpublished(e))},resetUnpublished(){(0,o.__dispatch)(r.slice.actions.resetUnpublished())},removeStyles(e){(0,o.__dispatch)(r.slice.actions.removeStyles({id:e}))},addStyles(e){(0,o.__dispatch)(r.slice.actions.addStyles(e))},addCreatedThisSession(e){(0,o.__dispatch)(r.slice.actions.addCreatedThisSession(e))},removeCreatedThisSession(e){(0,o.__dispatch)(r.slice.actions.removeCreatedThisSession(e))},archive(e){(0,o.__dispatch)(r.slice.actions.archive(e))},setCurrentComponentId(e){safeDispatch()?.(r.slice.actions.setCurrentComponentId(e))},setPath(e){safeDispatch()?.(r.slice.actions.setPath(e))},setOverridableProps(e,t){(0,o.__dispatch)(r.slice.actions.setOverridableProps({componentId:e,overridableProps:t}))},rename(e,t){(0,o.__dispatch)(r.slice.actions.rename({componentUid:e,name:t}))},cleanUpdatedComponentNames(){(0,o.__dispatch)(r.slice.actions.cleanUpdatedComponentNames())},updateComponentSanitizedAttribute(e,t){(0,o.__dispatch)(r.slice.actions.updateComponentSanitizedAttribute({componentId:e,attribute:t}))},resetSanitizedComponents(){(0,o.__dispatch)(r.slice.actions.resetSanitizedComponents())}}},"./packages/packages/core/editor-components/src/store/extensible-slice.ts":function(e,t,n){n.r(t),n.d(t,{__resetExtraReducers:function(){return __resetExtraReducers},createComponentsAction:function(){return createComponentsAction},registerComponentsReducer:function(){return registerComponentsReducer},slice:function(){return i}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store-types.ts"),s=n("./packages/packages/core/editor-components/src/store/thunks.ts");const a=new Map;function registerComponentsReducer(e,t){a.set(`${r.SLICE_NAME}/${e}`,t)}function createComponentsAction(e){const t=(0,o.__createAction)(`${r.SLICE_NAME}/${e}`);return{action:t,register(t){registerComponentsReducer(e,t)},dispatch(e){(0,o.__dispatch)(t(e))}}}function __resetExtraReducers(){a.clear()}const c=(0,o.__createSlice)({name:r.SLICE_NAME,initialState:r.initialState,reducers:{add:(e,{payload:t})=>{Array.isArray(t)?e.data=[...t,...e.data]:e.data.unshift(t)},load:(e,{payload:t})=>{e.data=t},addUnpublished:(e,{payload:t})=>{e.unpublishedData.unshift(t)},removeUnpublished:(e,{payload:t})=>{const n=Array.isArray(t)?t:[t];e.unpublishedData=e.unpublishedData.filter(e=>!n.includes(e.uid))},resetUnpublished:e=>{e.unpublishedData=[]},removeStyles(e,{payload:t}){const{[t.id]:n,...o}=e.styles;e.styles=o},addStyles:(e,{payload:t})=>{e.styles={...e.styles,...t}},addCreatedThisSession:(e,{payload:t})=>{e.createdThisSession.push(t)},removeCreatedThisSession:(e,{payload:t})=>{e.createdThisSession=e.createdThisSession.filter(e=>e!==t)},archive:(e,{payload:t})=>{const n=e.data.find(e=>e.id===t);n&&(n.isArchived=!0,e.archivedThisSession.push(t))},setCurrentComponentId:(e,{payload:t})=>{e.currentComponentId=t},setPath:(e,{payload:t})=>{e.path=t},setOverridableProps:(e,{payload:t})=>{const n=e.data.find(e=>e.id===t.componentId);n&&(n.overridableProps=t.overridableProps)},rename:(e,{payload:t})=>{const n=e.data.find(e=>e.uid===t.componentUid);n&&(n.id&&(e.updatedComponentNames[n.id]=t.name),n.name=t.name)},cleanUpdatedComponentNames:e=>{e.updatedComponentNames={}},updateComponentSanitizedAttribute:(e,{payload:{componentId:t,attribute:n}})=>{e.sanitized[t]||(e.sanitized[t]={}),e.sanitized[t][n]=!0},resetSanitizedComponents:e=>{e.sanitized={}}},extraReducers:e=>{e.addCase(s.loadComponents.fulfilled,(e,{payload:t})=>{e.data=t,e.loadStatus="idle"}),e.addCase(s.loadComponents.pending,e=>{e.loadStatus="pending"}),e.addCase(s.loadComponents.rejected,e=>{e.loadStatus="error"})}}),i={...c,reducer(e,t){const n=c.reducer(e,t),o=a.get(t.type);if(!o||!n)return n;const r=structuredClone(n);return o(r,t),r}}},"./packages/packages/core/editor-components/src/store/selectors.ts":function(e,t,n){n.r(t),n.d(t,{componentsSelectors:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");const s={getOverridableProps(e){return(0,r.selectOverridableProps)((0,o.__getState)(),e)},getCurrentComponent(){return(0,r.selectCurrentComponent)((0,o.__getState)())},getCurrentComponentId(){const e=function safeGetState(){return(0,o.__getStore)()?.getState()}();return e?(0,r.selectCurrentComponentId)(e):null},getUnpublishedComponents(){return(0,r.selectUnpublishedComponents)((0,o.__getState)())},getUpdatedComponentNames(){return(0,r.selectUpdatedComponentNames)((0,o.__getState)())},getArchivedThisSession(){return(0,r.selectArchivedThisSession)((0,o.__getState)())},getCreatedThisSession(){return(0,r.selectCreatedThisSession)((0,o.__getState)())},getComponents(){return(0,r.selectComponents)((0,o.__getState)())},getComponentByUid(e){return(0,r.selectComponentByUid)((0,o.__getState)(),e)}}},"./packages/packages/core/editor-components/src/store/store-types.ts":function(e,t,n){n.r(t),n.d(t,{SLICE_NAME:function(){return r},initialState:function(){return o}});const o={data:[],unpublishedData:[],loadStatus:"idle",styles:{},createdThisSession:[],archivedThisSession:[],path:[],currentComponentId:null,updatedComponentNames:{},sanitized:{}},r="components"},"./packages/packages/core/editor-components/src/store/store.ts":function(e,t,n){n.r(t),n.d(t,{SLICE_NAME:function(){return r.SLICE_NAME},__resetExtraReducers:function(){return s.__resetExtraReducers},createComponentsAction:function(){return s.createComponentsAction},initialState:function(){return r.initialState},registerComponentsReducer:function(){return s.registerComponentsReducer},selectArchivedThisSession:function(){return selectArchivedThisSession},selectComponent:function(){return selectComponent},selectComponentByUid:function(){return selectComponentByUid},selectComponents:function(){return a},selectCreatedThisSession:function(){return d},selectCurrentComponent:function(){return k},selectCurrentComponentId:function(){return v},selectData:function(){return selectData},selectFlatStyles:function(){return l},selectIsOverridablePropsLoaded:function(){return g},selectLoadIsError:function(){return p},selectLoadIsPending:function(){return i},selectOverridableProps:function(){return u},selectPath:function(){return f},selectStyles:function(){return selectStyles},selectUnpublishedComponents:function(){return c},selectUpdatedComponentNames:function(){return y},slice:function(){return s.slice},useComponent:function(){return useComponent},useCurrentComponent:function(){return useCurrentComponent},useCurrentComponentId:function(){return useCurrentComponentId},useIsSanitizedComponent:function(){return useIsSanitizedComponent},useOverridableProps:function(){return useOverridableProps}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store-types.ts"),s=n("./packages/packages/core/editor-components/src/store/extensible-slice.ts");const selectData=e=>e[r.SLICE_NAME].data,selectArchivedThisSession=e=>e[r.SLICE_NAME].archivedThisSession,selectLoadStatus=e=>e[r.SLICE_NAME].loadStatus,selectUnpublishedData=e=>e[r.SLICE_NAME].unpublishedData,getCurrentComponentId=e=>e[r.SLICE_NAME].currentComponentId,selectComponent=(e,t)=>e[r.SLICE_NAME].data.find(e=>e.id===t),useComponent=e=>(0,o.__useSelector)(t=>e?selectComponent(t,e):null),selectComponentByUid=(e,t)=>e[r.SLICE_NAME].data.find(e=>e.uid===t)??e[r.SLICE_NAME].unpublishedData.find(e=>e.uid===t),a=(0,o.__createSelector)(selectData,selectUnpublishedData,(e,t)=>[...t.map(e=>({uid:e.uid,name:e.name,overridableProps:e.overridableProps})),...e.filter(e=>!e.isArchived)]),c=(0,o.__createSelector)(selectUnpublishedData,e=>e),i=(0,o.__createSelector)(selectLoadStatus,e=>"pending"===e),p=(0,o.__createSelector)(selectLoadStatus,e=>"error"===e),selectStyles=e=>e[r.SLICE_NAME].styles??{},l=(0,o.__createSelector)(e=>e[r.SLICE_NAME].styles??{},e=>Object.values(e).flat()),d=(0,o.__createSelector)(e=>e[r.SLICE_NAME].createdThisSession,e=>e),m={props:{},groups:{items:{},order:[]}},u=(0,o.__createSelector)(selectComponent,e=>{if(e)return e.overridableProps??m}),useOverridableProps=e=>(0,o.__useSelector)(t=>e?u(t,e):null),g=(0,o.__createSelector)(selectComponent,e=>!!e?.overridableProps),f=(0,o.__createSelector)(e=>e[r.SLICE_NAME].path,e=>e),v=(0,o.__createSelector)(getCurrentComponentId,e=>e),k=(0,o.__createSelector)(selectData,getCurrentComponentId,(e,t)=>e.find(e=>e.id===t)),useCurrentComponentId=()=>(0,o.__useSelector)(v),useCurrentComponent=()=>(0,o.__useSelector)(k),y=(0,o.__createSelector)(e=>e[r.SLICE_NAME].updatedComponentNames,e=>Object.entries(e).map(([e,t])=>({componentId:Number(e),title:t}))),useIsSanitizedComponent=(e,t)=>{const n=(0,o.__useSelector)(e=>e[r.SLICE_NAME].sanitized);return!!e&&!!n[e]?.[t]}},"./packages/packages/core/editor-components/src/store/thunks.ts":function(e,t,n){n.r(t),n.d(t,{loadComponents:function(){return s}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/api.ts");const s=(0,o.__createAsyncThunk)("components/load",async()=>await r.apiClient.get())},"./packages/packages/core/editor-components/src/sync/before-save.ts":function(e,t,n){n.r(t),n.d(t,{beforeSave:function(){return beforeSave}});var o=n("./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts");const beforeSave=({container:e,status:t})=>{const n=e?.model.get("elements").toJSON?.()??[];return(0,o.publishDraftComponentsInPageBeforeSave)({elements:n,status:t})}},"./packages/packages/core/editor-components/src/sync/load-component-data-after-instance-added.ts":function(e,t,n){n.r(t),n.d(t,{initLoadComponentDataAfterInstanceAdded:function(){return initLoadComponentDataAfterInstanceAdded}});var o=n("@elementor/editor-v1-adapters"),r=n("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts");function initLoadComponentDataAfterInstanceAdded(){(0,o.registerDataHook)("after","document/elements/paste",(e,t)=>{load(t)}),(0,o.registerDataHook)("after","document/elements/import",(e,t)=>{load(t)})}function load(e){const t=Array.isArray(e)?e:[e];(0,r.loadComponentsAssets)(t.map(e=>e.model.toJSON()))}},"./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts":function(e,t,n){n.r(t),n.d(t,{publishDraftComponentsInPageBeforeSave:function(){return publishDraftComponentsInPageBeforeSave}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-notifications"),s=n("@elementor/http-client"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/api.ts"),i=n("./packages/packages/core/editor-components/src/utils/get-component-documents.ts");const p="insufficient_permissions",l="https://go.elementor.com/go-pro-components-Instance-draft-failure/",d="component-publish-upgrade";async function publishDraftComponentsInPageBeforeSave({status:e,elements:t}){if("publish"!==e)return;const n=[...(await(0,i.getComponentDocuments)(t)).values()].filter(o.isDocumentDirty).map(e=>e.id);if(0!==n.length){try{await c.apiClient.updateStatuses(n,"publish")}catch(e){if(function isInsufficientPermissionsError(e){return e instanceof s.AxiosError&&e.response?.data?.code===p}(e))return void function notifyPublishUpgrade(){(0,r.notify)({type:"promotion",id:d,message:(0,a.__)("You have unpublished component on this page. You need a pro version to publish it.","elementor"),additionalActionProps:[{size:"small",variant:"contained",color:"promotion",href:l,target:"_blank",children:(0,a.__)("Upgrade Now","elementor")}]})}();throw e}n.forEach(e=>(0,o.invalidateDocumentData)(e))}}},"./packages/packages/core/editor-components/src/utils/component-document-data.ts":function(e,t,n){n.r(t),n.d(t,{getComponentDocumentData:function(){return getComponentDocumentData}});var o=n("@elementor/editor-documents");const getComponentDocumentData=async e=>{const t=(0,o.getV1DocumentsManager)();try{return await t.request(e)}catch{return null}}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts":function(e,t,n){n.r(t),n.d(t,{detachComponentInstance:function(){return detachComponentInstance}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-v1-adapters"),s=n("@elementor/store"),a=n("@wordpress/i18n"),c=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),i=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),p=n("./packages/packages/core/editor-components/src/store/store.ts"),l=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts"),d=n("./packages/packages/core/editor-components/src/utils/tracking.ts"),m=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts");async function detachComponentInstance({instanceId:e,componentId:t,trackingInfo:n}){const u=(0,o.getContainer)(e);if(!u)throw new Error(`Instance container with ID "${e}" not found.`);const g=await(0,l.getComponentDocumentData)(t);if(!g)throw new Error(`Component with ID "${t}" not found.`);const f=g.elements?.[0];if(!f)throw new Error(`Component with ID "${t}" has no root element.`);const v=(0,r.undoable)({do:()=>{const r=function extractInstanceOverrides(e){const t=e.model.toJSON().settings,n=i.componentInstancePropTypeUtil.extract(t?.component_instance),o=c.componentInstanceOverridesPropTypeUtil.extract(n?.overrides);return o??[]}(u),a=(0,m.resolveDetachedInstance)(f,r),l=(0,p.selectCurrentComponentId)((0,s.__getState)()),g=l?(0,p.selectOverridableProps)((0,s.__getState)(),l)??null:null,v=u.model.toJSON(),k=(0,o.replaceElement)({currentElementId:e,newElement:a,withHistory:!1}),y=(0,p.selectComponent)((0,s.__getState)(),t)?.uid;return(0,d.trackComponentEvent)({action:"detached",source:"user",component_uid:y,instance_id:e,location:n.location,secondary_location:n.secondaryLocation,trigger:n.trigger}),{detachedElement:k,detachedInstanceElementData:a,editedComponentOnDetach:l,overridablePropsBeforeDetach:g,originalInstanceModel:v}},undo:(e,{detachedElement:t,originalInstanceModel:n,overridablePropsBeforeDetach:r,editedComponentOnDetach:a})=>{const c=(0,o.replaceElement)({currentElementId:t.id,newElement:n,withHistory:!1}),i=(0,p.selectCurrentComponentId)((0,s.__getState)());return i&&i===a&&r&&(0,s.__dispatch)(p.slice.actions.setOverridableProps({componentId:i,overridableProps:r})),c},redo:(e,t,n)=>{const{detachedInstanceElementData:r}=t,a=(0,p.selectCurrentComponentId)((0,s.__getState)()),c=a?(0,p.selectOverridableProps)((0,s.__getState)(),a)??null:null,i=(0,o.replaceElement)({currentElementId:n.id,newElement:r,withHistory:!1});return{...t,detachedElement:i,editedComponentOnDetach:a,overridablePropsBeforeDetach:c}}},{title:(0,a.__)("Detach from Component","elementor"),subtitle:(0,a.__)("Instance detached","elementor")});return v()}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/index.ts":function(e,t,n){n.r(t),n.d(t,{detachComponentInstance:function(){return o.detachComponentInstance}});var o=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/detach-component-instance.ts")},"./packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts":function(e,t,n){n.r(t),n.d(t,{regenerateLocalStyleIds:function(){return regenerateLocalStyleIds}});var o=n("@elementor/editor-elements"),r=n("@elementor/editor-props");function regenerateLocalStyleIds(e){const t=e.styles;if(!t||0===Object.keys(t).length)return{styles:void 0,settings:void 0};const n={},o={};for(const[r,s]of Object.entries(t)){const t=generateLocalStyleId(e.id);n[t]={...s,id:t},o[r]=t}const s=e.settings;if(!s||0===Object.keys(s).length)return{styles:n,settings:void 0};const a={...s};for(const[e,t]of Object.entries(a))if(isClassesProp(t)&&t.value.length>0){const n=t.value.map(e=>o[e]??e);a[e]=r.classesPropTypeUtil.create(n)}return{styles:n,settings:a}}function isClassesProp(e){return r.classesPropTypeUtil.isValid(e)}function generateLocalStyleId(e){return`e-${e}-${(0,o.generateElementId)()}`}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-detached-instance.ts":function(e,t,n){n.r(t),n.d(t,{getOverridableOverride:function(){return getOverridableOverride},resolveDetachedInstance:function(){return resolveDetachedInstance}});var o=n("@elementor/editor-elements"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/regenerate-local-style-ids.ts"),c=n("./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts");function resolveDetachedInstance(e,t){const n=function createOverrideMap(e){const t=new Map;return e.forEach(e=>{let n=null;if(r.componentInstanceOverridePropTypeUtil.isValid(e)?n=e:s.componentOverridablePropTypeUtil.isValid(e)&&(n=getOverridableOverride(e)),n){const e=n.value.override_key;t.set(e,n)}}),t}(t);return resolveElementRecursive(structuredClone(e),n)}function resolveElementRecursive(e,t){if(e.id=(0,o.generateElementId)(),e.styles){const{styles:t,settings:n}=(0,a.regenerateLocalStyleIds)(e);e.styles=t,n&&(e.settings={...e.settings,...n})}return e.settings&&(e.settings=(0,c.resolveOverridableSettings)(e,t)),e.elements?.length&&(e.elements=e.elements.map(e=>resolveElementRecursive(e,t))),e}function getOverridableOverride(e){if(!s.componentOverridablePropTypeUtil.isValid(e))return null;const t=s.componentOverridablePropTypeUtil.extract(e)?.origin_value;return r.componentInstanceOverridePropTypeUtil.isValid(t)?t:null}},"./packages/packages/core/editor-components/src/utils/detach-component-instance/resolve-overridable-settings.ts":function(e,t,n){n.r(t),n.d(t,{resolveOverridableSettings:function(){return resolveOverridableSettings}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/utils/is-component-instance.ts");function resolveOverridableSettings(e,t){return(0,a.isComponentInstance)({widgetType:e.widgetType,elType:e.elType})?function resolveOverridableSettingsForComponentInstance(e,t){const n=e.settings?.component_instance;if(!r.componentInstancePropTypeUtil.isValid(n))return e.settings??{};const o=n.value.overrides?.value;if(!o?.length)return e.settings??{};const s=o.map(e=>resolvePropValue(e,t,{isOverridableOverride:!0}));return{...e.settings,component_instance:{...n,value:{...n.value,overrides:{...n.value.overrides,value:s}}}}}(e,t):function resolveOverridableSettingsForElement(e,t){const n=e.settings?{...e.settings}:{};for(const[o,r]of Object.entries(e.settings??{}))n[o]=resolvePropValue(r,t);return n}(e,t)}function resolvePropValue(e,t,n){const{isOverridableOverride:r=!1}=n??{};if(!s.componentOverridablePropTypeUtil.isValid(e))return e;const a=e.value.override_key,c=t.get(a),i=s.componentOverridablePropTypeUtil.extract(e)?.origin_value;if(!c)return i;if(r)return function resolveOverridableOverride(e,t){if(!t||!o.componentInstanceOverridePropTypeUtil.isValid(t))return null;return o.componentInstanceOverridePropTypeUtil.create({override_value:e.value.override_value,override_key:t.value.override_key,schema_source:t.value.schema_source})}(c,i);const p=o.componentInstanceOverridePropTypeUtil.extract(c)?.override_value;return p}},"./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts":function(e,t,n){n.r(t),n.d(t,{filterValidOverridableProps:function(){return filterValidOverridableProps},isExposedPropValid:function(){return isExposedPropValid}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),s=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),a=n("./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts"),c=n("./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts"),i=n("./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts");function filterValidOverridableProps(e,t){const n={};for(const[o,r]of Object.entries(e.props))isExposedPropValid(r,t)&&(n[o]=r);const o=new Set(Object.keys(n));return{props:n,groups:{items:Object.fromEntries(Object.entries(e.groups.items).map(([e,t])=>[e,{...t,props:t.props.filter(e=>o.has(e))}])),order:e.groups.order}}}function isExposedPropValid(e,t){if(!e.originPropFields)return!0;const n=(0,a.getContainerByOriginId)(e.elementId,t);if(!n)return!1;const p=n.settings?.get("component_instance")??null,l=r.componentInstancePropTypeUtil.extract(p);if(!l?.component_id?.value)return!1;const d=function findOverrideByOuterKey(e,t){if(!e)return null;return e.find(e=>{const n=s.componentOverridablePropTypeUtil.extract(e);return n?n.override_key===t:e.value.override_key===t})??null}(o.componentInstanceOverridesPropTypeUtil.extract(l.overrides)??void 0,e.overrideKey),m=(0,i.extractInnerOverrideInfo)(d);if(!m)return!1;const{componentId:u,innerOverrideKey:g}=m,f=(0,c.getOverridableProp)({componentId:u,overrideKey:g});return!!f&&isExposedPropValid(f,n.id)}},"./packages/packages/core/editor-components/src/utils/format-component-elements-id.ts":function(e,t,n){n.r(t),n.d(t,{formatComponentElementsId:function(){return formatComponentElementsId}});var o=n("@elementor/utils");const r=7;function formatComponentElementsId(e,t){return e.map(e=>{const n=[...t,e.id],s=(0,o.hashString)(n.join("_"),r);return{...e,id:s,originId:e.id,elements:e.elements?formatComponentElementsId(e.elements,n):void 0}})}},"./packages/packages/core/editor-components/src/utils/get-component-documents.ts":function(e,t,n){n.r(t),n.d(t,{getComponentDocuments:function(){return getComponentDocuments}});var o=n("./packages/packages/core/editor-components/src/utils/component-document-data.ts"),r=n("./packages/packages/core/editor-components/src/utils/is-component-instance.ts");async function getComponentDocuments(e,t=new Map){return async function getDocumentsMap(e,t){const n=await Promise.all(e.map(async e=>{const n=await t.get(e);return n?[e,n]:null}));return new Map(n.filter(e=>null!==e))}(await getComponentIds(e,t),t)}async function getComponentIds(e,t){const n=await Promise.all(e.map(async({widgetType:e,elType:n,elements:s,settings:a})=>{const c=[];if((0,r.isComponentInstance)({widgetType:e,elType:n})){const e=a?.component_instance?.value?.component_id.value;if(!e)return c;c.push(e),t.has(e)||t.set(e,(0,o.getComponentDocumentData)(e));const n=await t.get(e);s=n?.elements}if(s?.length){const e=await getComponentIds(s,t);c.push(...e)}return c}));return[...new Set(n.flat())]}},"./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts":function(e,t,n){n.r(t),n.d(t,{getContainerByOriginId:function(){return getContainerByOriginId}});var o=n("@elementor/editor-elements");function getContainerByOriginId(e,t){if(!t)return(0,o.getContainer)(e);const n=(0,o.getContainer)(t);if(!n)return null;const r=window;return r.elementor?.getContainerByKeyValue?.({key:"originId",value:e,parent:n.view})??null}},"./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts":function(e,t,n){n.r(t),n.d(t,{getOverridableProp:function(){return getOverridableProp}});var o=n("@elementor/store"),r=n("./packages/packages/core/editor-components/src/store/store.ts");function getOverridableProp({componentId:e,overrideKey:t}){const n=(0,r.selectOverridableProps)((0,o.__getState)(),e);if(n)return n.props[t]}},"./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts":function(e,t,n){n.r(t),n.d(t,{getPropTypeForComponentOverride:function(){return getPropTypeForComponentOverride}});var o=n("@elementor/editor-elements");const getPropTypeForComponentOverride=e=>{if(e.originPropFields)return getPropType(e.originPropFields);const{widgetType:t,propKey:n}=e;return getPropType({widgetType:t,propKey:n})};function getPropType({widgetType:e,propKey:t}){const n=(0,o.getWidgetsCache)()?.[e]?.atomic_props_schema;return n?.[t]}},"./packages/packages/core/editor-components/src/utils/is-component-instance.ts":function(e,t,n){n.r(t),n.d(t,{isComponentInstance:function(){return isComponentInstance}});var o=n("./packages/packages/core/editor-components/src/consts.ts");function isComponentInstance(e){return[e.widgetType,e.elType].includes(o.COMPONENT_WIDGET_TYPE)}},"./packages/packages/core/editor-components/src/utils/is-pro-components-supported.ts":function(e,t,n){n.r(t),n.d(t,{isProComponentsSupported:function(){return isProComponentsSupported},isProOutdatedForComponents:function(){return isProOutdatedForComponents}});var o=n("@elementor/utils");const r="4.0";function isProComponentsSupported(){return(0,o.hasProInstalled)()&&(0,o.isProAtLeast)(r)}function isProOutdatedForComponents(){return(0,o.hasProInstalled)()&&!(0,o.isProAtLeast)(r)}},"./packages/packages/core/editor-components/src/utils/overridable-props-utils.ts":function(e,t,n){n.r(t),n.d(t,{extractInnerOverrideInfo:function(){return extractInnerOverrideInfo},getMatchingOverride:function(){return getMatchingOverride}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");function getMatchingOverride(e,t){return e?.find(e=>{const n=r.componentOverridablePropTypeUtil.extract(e);if(n){const e=o.componentInstanceOverridePropTypeUtil.extract(n.origin_value);return e?.override_key===t}return e.value.override_key===t})??null}function extractInnerOverrideInfo(e){if(!e)return null;const t=r.componentOverridablePropTypeUtil.extract(e),n=t?o.componentInstanceOverridePropTypeUtil.extract(t.origin_value):o.componentInstanceOverridePropTypeUtil.extract(e);if(!n)return null;const{schema_source:s,override_key:a,override_value:c}=n,i=s?.id;return i&&a?{componentId:i,innerOverrideKey:a,overrideValue:c}:null}},"./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts":function(e,t,n){n.r(t),n.d(t,{resolveOverridePropValue:function(){return resolveOverridePropValue}});var o=n("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),r=n("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts");const resolveOverridePropValue=e=>{if(r.componentOverridablePropTypeUtil.isValid(e))return function getOverridableValue(e){const t=r.componentOverridablePropTypeUtil.extract(e);if(!t)return null;const n=o.componentInstanceOverridePropTypeUtil.isValid(t.origin_value);if(n)return getOverrideValue(t.origin_value);return t.origin_value}(e);return o.componentInstanceOverridePropTypeUtil.isValid(e)?getOverrideValue(e):e};function getOverrideValue(e){const t=o.componentInstanceOverridePropTypeUtil.extract(e);return t?t.override_value:null}},"./packages/packages/core/editor-components/src/utils/switch-to-component.ts":function(e,t,n){n.r(t),n.d(t,{buildUniqueSelector:function(){return buildUniqueSelector},expandNavigator:function(){return expandNavigator},switchToComponent:function(){return switchToComponent}});var o=n("@elementor/editor-documents"),r=n("@elementor/editor-elements"),s=n("@elementor/editor-v1-adapters");async function switchToComponent(e,t,n){const s=function getSelector(e,t){if(e)return buildUniqueSelector(e);if(t)return`[data-id="${t}"]`;return}(n,t);(0,o.invalidateDocumentData)(e),await(0,o.switchToDocument)(e,{selector:s,mode:"autosave",setAsInitial:!1,shouldScroll:!1});const a=(0,r.getCurrentDocumentContainer)(),c=a?.children?.[0];c&&((0,r.selectElement)(c.id),expandNavigator())}async function expandNavigator(){await(0,s.__privateRunCommand)("navigator/expand-all")}function buildUniqueSelector(e){const t=[];let n=e.closest("[data-id]");for(;n;){const e=n.dataset.id;n.hasAttribute("data-elementor-id")&&t.unshift(`[data-id="${e}"]`),n=n.parentElement?.closest("[data-id]")??null}if(0===t.length){const t=e.closest("[data-id]");if(t?.dataset?.id)return`[data-id="${t.dataset.id}"]`}return t.join(" ")}},"./packages/packages/core/editor-components/src/utils/tracking.ts":function(e,t,n){n.r(t),n.d(t,{onElementDrop:function(){return onElementDrop},trackComponentEvent:function(){return trackComponentEvent}});var o=n("@elementor/events"),r=n("@elementor/store"),s=n("./packages/packages/core/editor-components/src/store/store.ts");const trackComponentEvent=({action:e,source:t,...n})=>{if("system"===t)return;const{dispatchEvent:r,config:s}=(0,o.getMixpanel)();if(!s?.names?.components?.[e])return;const a=s.names.components[e];r?.(a,{...n,source:t,"Feature name":"Components"})},onElementDrop=(e,t)=>{if("e-component"!==t?.model?.get("widgetType"))return;const n=t.model.get("editor_settings"),o=n?.title,a=n?.component_uid,c=t.id,i=(0,s.selectCreatedThisSession)((0,r.__getState)()),p=a&&i.includes(a),l=window.elementorCommon.eventsManager.config,{locations:d,secondaryLocations:m}=l;trackComponentEvent({action:"instanceAdded",source:"user",instance_id:c,component_uid:a,component_name:o,is_same_session_reuse:p,location:d.widgetPanel,secondary_location:m.componentsTab})}},"@elementor/editor":function(e){e.exports=window.elementorV2.editor},"@elementor/editor-canvas":function(e){e.exports=window.elementorV2.editorCanvas},"@elementor/editor-controls":function(e){e.exports=window.elementorV2.editorControls},"@elementor/editor-current-user":function(e){e.exports=window.elementorV2.editorCurrentUser},"@elementor/editor-documents":function(e){e.exports=window.elementorV2.editorDocuments},"@elementor/editor-editing-panel":function(e){e.exports=window.elementorV2.editorEditingPanel},"@elementor/editor-elements":function(e){e.exports=window.elementorV2.editorElements},"@elementor/editor-elements-panel":function(e){e.exports=window.elementorV2.editorElementsPanel},"@elementor/editor-notifications":function(e){e.exports=window.elementorV2.editorNotifications},"@elementor/editor-panels":function(e){e.exports=window.elementorV2.editorPanels},"@elementor/editor-props":function(e){e.exports=window.elementorV2.editorProps},"@elementor/editor-styles-repository":function(e){e.exports=window.elementorV2.editorStylesRepository},"@elementor/editor-templates":function(e){e.exports=window.elementorV2.editorTemplates},"@elementor/editor-ui":function(e){e.exports=window.elementorV2.editorUi},"@elementor/editor-v1-adapters":function(e){e.exports=window.elementorV2.editorV1Adapters},"@elementor/events":function(e){e.exports=window.elementorV2.events},"@elementor/http-client":function(e){e.exports=window.elementorV2.httpClient},"@elementor/icons":function(e){e.exports=window.elementorV2.icons},"@elementor/schema":function(e){e.exports=window.elementorV2.schema},"@elementor/store":function(e){e.exports=window.elementorV2.store},"@elementor/ui":function(e){e.exports=window.elementorV2.ui},"@elementor/utils":function(e){e.exports=window.elementorV2.utils},"@wordpress/i18n":function(e){e.exports=window.wp.i18n},react:function(e){e.exports=window.React}},t={};function __webpack_require__(n){var o=t[n];if(void 0!==o)return o.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,__webpack_require__),r.exports}__webpack_require__.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=function(e,t){for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},__webpack_require__.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};!function(){__webpack_require__.r(n),__webpack_require__.d(n,{COMPONENT_WIDGET_TYPE:function(){return u.COMPONENT_WIDGET_TYPE},ComponentInstanceProvider:function(){return h.ComponentInstanceProvider},ComponentItem:function(){return r.ComponentItem},ComponentName:function(){return r.ComponentName},ComponentSearch:function(){return o.ComponentSearch},ComponentsList:function(){return s.ComponentsList},DetachAction:function(){return m.DetachAction},EditComponentAction:function(){return l.EditComponentAction},EmptySearchResult:function(){return s.EmptySearchResult},InstanceEmptyState:function(){return i.EmptyState},InstancePanelBody:function(){return p.InstancePanelBody},InstancePanelHeader:function(){return l.InstancePanelHeader},LoadingComponents:function(){return a.LoadingComponents},OverridablePropProvider:function(){return b.OverridablePropProvider},SLICE_NAME:function(){return w.SLICE_NAME},SearchProvider:function(){return c.SearchProvider},apiClient:function(){return t.apiClient},componentInstanceOverridePropTypeUtil:function(){return k.componentInstanceOverridePropTypeUtil},componentInstanceOverridesPropTypeUtil:function(){return y.componentInstanceOverridesPropTypeUtil},componentInstancePropTypeUtil:function(){return _.componentInstancePropTypeUtil},componentOverridablePropTypeUtil:function(){return C.componentOverridablePropTypeUtil},componentsActions:function(){return P.componentsActions},componentsSelectors:function(){return x.componentsSelectors},createComponentsAction:function(){return w.createComponentsAction},filterValidOverridableProps:function(){return O.filterValidOverridableProps},getContainerByOriginId:function(){return T.getContainerByOriginId},getOverridableProp:function(){return D.getOverridableProp},getPropTypeForComponentOverride:function(){return U.getPropTypeForComponentOverride},init:function(){return e.init},isComponentInstance:function(){return A.isComponentInstance},loadComponentsAssets:function(){return E.loadComponentsAssets},onElementDrop:function(){return L.onElementDrop},publishDraftComponentsInPageBeforeSave:function(){return S.publishDraftComponentsInPageBeforeSave},registerComponentsReducer:function(){return w.registerComponentsReducer},resolveOverridePropValue:function(){return V.resolveOverridePropValue},selectOverridableProps:function(){return w.selectOverridableProps},selectPath:function(){return w.selectPath},slice:function(){return w.slice},switchToComponent:function(){return N.switchToComponent},trackComponentEvent:function(){return L.trackComponentEvent},updateOverridableProp:function(){return I.updateOverridableProp},useComponentInstanceElement:function(){return b.useComponentInstanceElement},useComponents:function(){return g.useComponents},useComponentsPermissions:function(){return f.useComponentsPermissions},useCurrentComponent:function(){return w.useCurrentComponent},useCurrentComponentId:function(){return w.useCurrentComponentId},useFilteredComponents:function(){return s.useFilteredComponents},useInstancePanelData:function(){return d.useInstancePanelData},useIsSanitizedComponent:function(){return w.useIsSanitizedComponent},useOverridablePropValue:function(){return b.useOverridablePropValue},useOverridableProps:function(){return w.useOverridableProps},useSanitizeOverridableProps:function(){return v.useSanitizeOverridableProps}});var e=__webpack_require__("./packages/packages/core/editor-components/src/init.ts"),t=__webpack_require__("./packages/packages/core/editor-components/src/api.ts"),o=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/component-search.tsx"),r=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/components-item.tsx"),s=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/components-list.tsx"),a=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/loading-components.tsx"),c=__webpack_require__("./packages/packages/core/editor-components/src/components/components-tab/search-provider.tsx"),i=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/empty-state.tsx"),p=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-body.tsx"),l=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/instance-panel-header.tsx"),d=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/use-instance-panel-data.ts"),m=__webpack_require__("./packages/packages/core/editor-components/src/components/instance-editing-panel/detach-action.tsx"),u=__webpack_require__("./packages/packages/core/editor-components/src/create-component-type.ts"),g=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-components.ts"),f=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-components-permissions.ts"),v=__webpack_require__("./packages/packages/core/editor-components/src/hooks/use-sanitize-overridable-props.ts"),k=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-override-prop-type.ts"),y=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-overrides-prop-type.ts"),_=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-instance-prop-type.ts"),C=__webpack_require__("./packages/packages/core/editor-components/src/prop-types/component-overridable-prop-type.ts"),h=__webpack_require__("./packages/packages/core/editor-components/src/provider/component-instance-context.tsx"),b=__webpack_require__("./packages/packages/core/editor-components/src/provider/overridable-prop-context.tsx"),E=__webpack_require__("./packages/packages/core/editor-components/src/store/actions/load-components-assets.ts"),I=__webpack_require__("./packages/packages/core/editor-components/src/store/actions/update-overridable-prop.ts"),P=__webpack_require__("./packages/packages/core/editor-components/src/store/dispatchers.ts"),x=__webpack_require__("./packages/packages/core/editor-components/src/store/selectors.ts"),w=__webpack_require__("./packages/packages/core/editor-components/src/store/store.ts"),S=__webpack_require__("./packages/packages/core/editor-components/src/sync/publish-draft-components-in-page-before-save.ts"),O=__webpack_require__("./packages/packages/core/editor-components/src/utils/filter-valid-overridable-props.ts"),T=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-container-by-origin-id.ts"),D=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-overridable-prop.ts"),U=__webpack_require__("./packages/packages/core/editor-components/src/utils/get-prop-type-for-component-override.ts"),A=__webpack_require__("./packages/packages/core/editor-components/src/utils/is-component-instance.ts"),V=__webpack_require__("./packages/packages/core/editor-components/src/utils/resolve-override-prop-value.ts"),N=__webpack_require__("./packages/packages/core/editor-components/src/utils/switch-to-component.ts"),L=__webpack_require__("./packages/packages/core/editor-components/src/utils/tracking.ts")}(),(window.elementorV2=window.elementorV2||{}).editorComponents=n}(),window.elementorV2.editorComponents?.init?.();
2934 3 //# sourceMappingURL=editor-components.js.map